Mehrere Oracle-Instanzen - ist dies eine gute Vorgehensweise?

9

Einer meiner Kunden hat die Datenbank unseres Produkts auf einem Solaris-Computer bereitgestellt, auf dem bereits drei Oracle-Instanzen vorhanden sind. Derzeit laufen also 4 Instanzen von Oracle auf demselben Computer. Und jetzt treten Leistungsprobleme auf.

Ich habe keinen Zugriff auf andere Instanzen oder den Computer, und alle Tools, die ich habe, sind alert.log, AWR und ADDM. Ich weiß, dass etwas mit mehreren Instanzen zusammenhängt, aber ich kann es nicht beweisen.

Meine Frage ist also, haben Sie eine ähnliche Situation erlebt? Wie soll ich damit umgehen? Wie kann ich die Ursache für Leistungsprobleme in Bezug auf mehrere Instanzen ermitteln?

Isaac A. Nugroho
quelle

Antworten:

8

Isaac, vorzugsweise führen wir eine Instanz auf einem Server aus und implementieren die verschiedenen Anwendungen als Schemas und Dienste in dieser einzelnen Datenbank. Wenn der Server über genügend Speicher verfügt, gibt es kein Problem, wenn sich alle Anwendungen wie gute Oracle-Bürger verhalten. Sobald es eine Anwendung gibt, die keine Bindevariablen verwendet, wächst der Schmerz auf dem Host. Gleiches gilt für Anwendungen, die alle paar Sekunden neue Verbindungen erstellen, anstatt vorhandene Verbindungen wiederzuverwenden. Dinge wie Auto Commit helfen auch nicht, die Situation zu verbessern. Wie verhält sich Ihre Anwendung normal? Macht es große Updates? Wann wird ein Commit durchgeführt? Wie viel Redo wird pro Stunde generiert? Verwendet Ihre App Bindungsvariablen? In vielen Fällen ist der Speicherort der Online-Redolog-Dateien kritisch. Wenn die App häufig wiederholt wird (oder mit einer anderen App konkurriert, die dies tut), wird der Logwriter langsamer und führt zu einer starken Leistungsverschlechterung, da die Sitzung auf den Abschluss des Protokolldateischreibvorgangs wartet. Geben Sie Ihrem Kunden ein Festplattenlayout, in dem sich die Wiederholungen auf dedizierten RAID-10-Festplatten befinden, und sehen Sie, wie viel dies hilft. Informieren Sie sich auch über die Speicherzuordnungssituation. Möglicherweise ist eine faire Umverteilung des verfügbaren Speichers erforderlich.

ich hoffe das hilft

ik_zelf
quelle
Du hast Recht. Wir überwachen unsere Instanz und führen Optimierungen durch, wo immer wir können. Aber die Leistung ist nicht stabil, manchmal fällt sie ohne erklärbaren Grund (von unserer Seite)
Isaac A. Nugroho
Isaac, wie oft wird die Datenbank neu gestartet, um welche Version handelt es sich und haben Sie Histrogramme für Spalten, die durch den automatischen Statistikprozess generiert wurden? Verwenden Sie Bindevariablen und Optimizer Pre Peeking?
ik_zelf
2

Das Ausführen mehrerer Instanzen auf demselben Server ist möglich und in einigen Fällen erforderlich. Das oratab wurde speziell für die Verwaltung mehrerer Instanzen entwickelt. In Fällen, in denen Sie mehrere unabhängige Anwendungen haben, ist es möglicherweise vorzuziehen, für jede Anwendung eine Instanz zu haben.

Ausreichend Speicher ist wichtig. Oracle erstellt die SGA im gemeinsamen Speicher. Wenn Sie nicht über genügend Speicher verfügen, werden der SGA oder die Prozesse ein- und ausgelagert. Dies wird als Thrashing bezeichnet und führt zu einer erheblichen Leistungsminderung.

Möglicherweise können die Instanzen so optimiert werden, dass sie mit einem kleineren SGA ausgeführt werden. Oracle bietet Tools zur Optimierung der SGA-Größe. Wenn eine der Instanzen eine übermäßig große SGA hat, werden alle Instanzen bestraft.

Eine andere wichtige Verwendung für Speicher ist der Pufferplatz. Dies fungiert als sekundärer Cache und kann signifikante Lese-E / A eliminieren.

Durch Ausführen sar(unter der Annahme eines Unix-Basis-Betriebssystems) können Sie eine gute Diagnose erhalten, wo das Problem liegt. Mögliche Probleme sind entweder das Austauschen oder die Sättigung der Festplatten-E / A. Durch Hinzufügen von RAM wird wahrscheinlich eines dieser Probleme behoben.

Die Festplatten-E / A-Sättigung kann auch behoben werden, indem einige Tablespaces auf andere Festplatten verschoben werden. Im Allgemeinen konfiguriere ich Oracle so, dass E / A auf so viele Festplatten wie möglich verteilt wird.

BEARBEITEN: Dies sind einige Fälle, für die möglicherweise separate Instanzen erforderlich sind.

  • Dies ist immer erforderlich, wenn Sie verschiedene Versionen von Oracle auf demselben Server ausführen. Anwendungen sind nicht immer zertifiziert oder können mit der neuesten Version arbeiten.
  • Möglicherweise möchten Sie eine Instanz, die automatisch auf einen bestimmten Zeitpunkt zurückgesetzt werden kann. (Obwohl ich davon abraten möchte, habe ich dies für eine automatisierte Testumgebung verwendet.)
  • Wenn Sie in den Anwendungen eine fest codierte Schema-Referenz haben, benötigen Sie möglicherweise verschiedene Instanzen, um Namespace-Kollisionen zu behandeln.
  • Sicherheitsanforderungen sind möglicherweise einfacher zu handhaben, wenn separate Instanzen verwendet werden. In diesem Fall kann es angebracht sein, unterschiedliche Server zu verwenden.
  • Das Ausführen verschiedener Versionen derselben Datenbank (Entwicklung, Test, Benutzerakzeptanz, Schulung und Produktion) auf demselben Server ist mit separaten Instanzen sicherer. Ich würde nicht alle diese Umgebungen auf demselben Server ausführen, sondern häufig zwei oder mehr auf demselben Server.
BillThor
quelle
Können Sie Beispiele angeben, bei denen mehrere Instanzen ausgeführt werden müssen?
ScottCher
1
@ScottCher Ich habe meine Antwort bearbeitet, um einige Fälle bereitzustellen.
BillThor
1

Die kritischste Ressource ist RAM.

Jede laufende Oracle-Instanz weist beim Starten und nicht unter Last RAM für sich zu.

Wir führen 10g mit 10 und 11g mit 8 Instanzen aus, aber dies sind Entwicklungsserver. Nach dem Neustart des Betriebssystems werden einige Oracle-Dienste nicht automatisch gestartet und müssen manuell gestartet werden: Oradim -startup -sid xxx.

Wir fangen gerade erst an, die automatische Speicherverwaltung zu verwenden, aber die Situation unterscheidet sich von SQL Server, wo Sie so viel Datenbanken hinzufügen können, wie der Speicherplatz zur Verfügung stellt.

In Ihrem Fall wird mit mehr Instanzen auf einem Computer die SGA für jede Instanz kleiner, weniger vorkompiliertes SQL kann zwischengespeichert werden und der Computer muss mehr SQL-Kompilierung durchführen, was die Leistung verringert.

Das Hinzufügen von RAM kann in Ihrer Situation hilfreich sein.

bernd_k
quelle
2
Der Grund, warum Sie sagen, dass SQL Server anders ist, ist eher eine Nomenklatur. Eine Gruppe von Prozessen und ihr dedizierter Speicher ist eine Instanz. Wenn Sie eine SQL Server-Datenbank hinzufügen und kein neuer Prozess hinzugefügt wird, ist dies keine Instanz. In diesem Fall ist es viel näher am Hinzufügen eines Schemas.
Stephanie Seite