Wann verwendet eine Anwendung zu viele Sitzungen?

9

Ich arbeite an einer Client-Server-Anwendung, die OCI für die Kommunikation mit Oracle verwendet. In der Vergangenheit hat unsere Anwendung Sitzungen häufig als unendliche Ressource behandelt, möglicherweise zum Nachteil anderer Anwendungen, die diesen Oracle-Server gemeinsam nutzen.

Ich versuche meine Entwicklerkollegen davon zu überzeugen, dass es wichtig ist, dass unsere Anwendung gut mit anderen zusammenarbeitet und nicht so ein Ressourcenfresser ist.

Ab wann würden Oracle-Datenbankadministratoren davon ausgehen, dass eine Anwendung Sitzungen übermäßig verwendet (oder missbraucht)?

BEARBEITEN: Derzeit ist eine der größten Konsumenten von Sitzungen diese eine Komponente, die das direkte Laden von Pfaden verwendet, um mehrere (20 bis 30) Tabellen parallel zu laden.

Aaron Klotz
quelle

Antworten:

10

Wie bei allen Dingen kommt es darauf an.

Wenn Sie OCI verwenden, gehe ich davon aus, dass Sie eine Client / Server-Anwendung entwickeln. Ich möchte im Allgemeinen, dass die Datenbank in dieser Situation gemeinsam genutzte Serververbindungen unterstützt, und ich möchte eine gemeinsam genutzte Serververbindung anfordern, wenn die Anwendung eine Verbindung zur Datenbank herstellt. Dies verbessert die Leistung der Anwendung, indem der Arbeitsaufwand für die Datenbank zum Erstellen einer neuen Sitzung begrenzt wird. Dies hat den Nebeneffekt, dass mehr Ressourcen für andere auf dem Server verfügbar bleiben. Die Verwendung von Shared Server-Verbindungen erfordert einen längeren Codepfad, wenn die Datenbank nachfolgende Abfragen ausführt, da die Abfrage an einen Shared Server-Prozess gesendet werden muss. Dies ist jedoch im Allgemeinen keine große Sache, wenn die Anzahl der Shared Server-Prozesse angemessen ist.

Das Öffnen einer Reihe von Sitzungen kann auch ein Problem sein, wenn der DBA keine automatische PGA-Verwaltung verwendet. Wenn Sie die manuelle PGA-Verwaltung verwenden, wird PGA pro Sitzung konfiguriert, sodass jeder Sitzung eine SORT_AREA_SIZEandere Sortierung unter anderen PGA-Komponenten zugewiesen werden kann . Wenn Sie mithilfe der manuellen PGA-Verwaltung eine große Anzahl von Sitzungen in einer Datenbank erstellt haben und jede Sitzung versucht hat, die PGA-Nutzung zu maximieren, können Sie den RAM-Server leicht aushungern lassen und Leistungsprobleme für alle verursachen. Angenommen, Sie verwenden Oracle 10.1 oder höher, ist jedoch eine automatische PGA-Verwaltung verfügbar. In diesem Fall konfiguriert der DBA ein PGA_AGGREGATE_TARGET(oder enthält das PGA in MEMORY_TARGETin 11g) und die Datenbank stellt sicher, dass das aggregierte PGA über alle Sitzungen hinweg begrenzt ist, sodass der Datenbank die Ressourcen ausgehen.

Wenn die Datenbank gemeinsam genutzte Serververbindungen unterstützt, Ihre Anwendung eine gemeinsam genutzte Serververbindung erhält und die Datenbank die automatische PGA-Verwaltung verwendet, ist es den meisten Datenbankadministratoren egal, wie viele Sitzungen Sie erstellen.

Wenn Sie nun viele Sitzungen erstellen, damit Sie mehr parallel arbeiten können, führt dies zu Leistungsproblemen, die über die Anzahl der Sitzungen hinausgehen. Es ist einfach genug, die Datenbank für die Unterstützung von 1000 Sitzungen zu konfigurieren. Beispielsweise ist es viel schwieriger, die Datenbank so zu konfigurieren, dass sie nicht in einem Stapel stirbt, wenn alle 1000 Sitzungen gleichzeitig eine wichtige Abfrage für ein Data Warehouse ausgeben. Wenn Ihre Anwendung alle für die Datenbank verfügbaren Ressourcen für Ihre Abfragen verbraucht, sollte der DBA möglicherweise die Verwendung von Oracle Resource Manager in Betracht ziehenverschiedene Anwendungen und / oder verschiedene Benutzer zu priorisieren. Beispielsweise könnte der DBA den Ressourcenmanager so konfigurieren, dass bei einer CPU-Auslastung von 100% Ihre Anwendung im Aggregat 50% der CPU erhält, eine andere Anwendung im Aggregat 25% und alle anderen die restlichen 25%. . Wenn keine anderen Anforderungen ausstehen, kann Ihre Anwendung alle 100% der CPU nutzen.

Wenn Sie Dinge parallel ausführen, kann es auch hilfreich sein, die Fähigkeit von Oracle zu untersuchen, Anweisungen parallel auszuführen, da dies möglicherweise weniger Aufwand bedeutet als das Schreiben Ihres eigenen Parallelisierungscodes. Ich würde zum Beispiel erwarten, dass es viel einfacher und möglicherweise schneller ist, eine Clientanwendung zu schreiben, die Anweisungen seriell übermittelt, für deren Ausführung eine parallele Oracle-Abfrage verwendet wurde, anstatt mehrere Sitzungen zu öffnen und jede Anweisung von einem separaten Thread Ihrer Anwendung aus auszuführen Oracle verwendete keine parallele Abfrage, um eine der Anweisungen auszuführen. Wenn Sie eine parallele Abfrage verwenden, kann die Datenbank auch die Anzahl der erzeugten parallelen Slaves anpassen, sodass bei besonders ausgelasteten Datenbanken weniger parallele Slaves gestartet werden und wenn die Datenbank relativ inaktiv ist, mehr parallele Slaves gestartet werden.

Justin Cave
quelle