Ressourcen managen mit Database Resource Manager
von Ulrike Schwinn, ORACLE Deutschland GmbH
Ressourcen in der Datenbank mit dem Database Resource Manager zu verwalten, ist schon seit der Version 8i mit der Enterprise Edition der Datenbank möglich. Zu Beginn war diese Funktion der Datenbank noch wenig bekannt und fand nur spärlichen Einsatz. Gründe
dafür lagen sicherlich in der eingeschränkten Verwendbarkeit, die ausschliesslich über PL/SQL Packages und
für dedizierte Datenbankuser-Sessions möglich war.
Spätestens mit der Oracle Database Version 10g und
der Verfügbarkeit über die graphische Oberfläche des Enterprise Managers und die Erweiterung der Nutzung
über Services, Module, Programme usw. sind diese Gründe aufgehoben. Dabei soll unabhängig von der
Datenbanklast gewissen Sessions ein Minimum an Ressourcen garantiert werden. So können zum Beispiel
CPU-Ressourcen für verschiedene Applikationen priorisiert werden, langlaufende Operationen unterbunden oder die Anzahl
der Sessions begrenzt werden, um nur einige Beispiele zu nennen.
Die folgende Liste gibt einen guten Überblick über alle Ressourcen, die über den Database Resource Manager verwaltet werden
können (Stand Datenbank Version 11g):
CPU-Nutzung
Parallelität
Session-Anzahl
Undo-Nutzung
Idle-Zeit
Execution Zeit
I/O Limit
Auch intern findet das Ressourcen-Management über den Database Resource Manager schon seit Oracle Database 10g
seine Anwendung. Beispiele dafür sind die "Automated Maintenance Tasks" in 11g oder die Aufgabe
"Manage Optimizer Statistics" in 10g.
Der folgende Tipp gibt einen Überblick über die möglichen Funktionen und illustriert die Anwendung an einem Beispiel.
Ein erster Einstieg in das Setup des Datenbase Resource Managers findet sich in der graphische Oberfläche des Enterprise Managers
- je nach Datenbank-Release im Bereich "Server" oder "Administration".
Der folgende Screenshot zeigt die 11g Variante im Enterprise Manager.
Für eine größere Ansicht auf das Bild klicken.
Um das Konzept zu verstehen, werden folgende 3 Begriffe verwendet, die im Ressourcemanagement-Zusammenhang
als Standardbegriffe verwendet werden:
Resource Consumer Group
Resource Consumer Mapping
Resource Plan
Der erste Schritt beim Setup besteht aus der Erzeugung von Benutzergruppen nach unterschiedlichen
Ressource-Anforderungsprofilen; sie werden als Resource Consumer Group bezeichnet. Darüberhinaus existieren von Oracle fest definierte Resource Consumer
Groups, die zusätzlich verwendet werden sollten.
Zum Beispiel ist die sogenannte SYS_GROUP eine Gruppe, die aus den Usern SYS und SYSTEM besteht; OTHER_GROUPS hingegen
besteht aus allen anderen Usern, die keine Zuweisung zu einer Gruppe erhalten haben.
Der folgende Screenshot zeigt das Anlegen einer neuen user definierten Resource Consumer Group mit dem sprechenden Namen GRUPPE_CPU_HIGH.
Für eine größere Ansicht auf das Bild klicken.
Ausser dem Namen und der Beschreibung muss man diejenigen Datenbankuser angeben, die dieser Gruppe angehören können -
in unserem Beispiel der User SCOTT. Die Scheduling Policy bezieht sich dabei auf die Ressource CPU. Wir wählen die
Standardeinstellung aus, die Verteilung nach ROUND-ROBIN-Methode; RUN-TO-COMPLETION wäre eine zweite Möglichkeit.
Die Implementierung mit PL/SQL sieht in diesem Fall folgendermassen aussehen:
Aus welchen Datenbankusern oder Sessions besteht nun eine Resource Consumer Group? Diese Information wird über
das sogenannte Resource Consumer Group Mapping festgelegt. Hier werden Regeln bzw. Eigenschaften definiert,
nach denen die einzelnen Sessions den Gruppen initial zugeordnet werden. Ändern sich die Eigenschaften einer Session oder
tritt eine Überschreitung einzelner Ressourcegrenzen auf, kann dies zu einem automatischen Wechsel in eine
andere Gruppe führen. Darüberhinaus kann ein Gruppenwechsel natürlich auch manuell angestossen werden.
Die folgende Liste zeigt die wichtigsten Mapping-Regeln,
die verwendet werden können:
Oracle User: Datenbank User
Service: TNS Servicename wie z.B. ORA11GR1 oder Oracle definierte wie SYS$USERS als
Bezeichnung für die lokale Nutzung
MODULE und ACTION: Verwendung von DBMS_APPLICATION_INFO Package
Client OS User
Client Program wie SQL Developer
Client Machine
Damit es keine Überlagerungen der einzelnen Regeln gibt, können diese zusätzlich priorisiert werden (siehe Spalte Priority).
Die folgende Abbildung zeigt ein Beispiel für das Mapping von Gruppen.
Für eine größere Ansicht auf das Bild klicken.
Im Beispiel wird Oracle User als eine Mapping Regel für die Resource Consumer Groups SYS_GROUP, GRUPPE_HIGH_CPU und
GRUPPE_LOW_CPU verwendet. Dies bedeutet, dass zum Beispiel der User SCOTT initial der Gruppe GRUPPE_HIGH_CPU
zugeordnet ist. Die Mapping Regel Service gilt für die Consumer Group GRUPPE_HIGH. Damit gehören alle User,
die sich mit dem TNS-Service ORA11GR1 connected haben, automatisch der Gruppe GRUPPE_HIGH an.
Nachdem wir dieses Setup durchgeführt haben, wird der Resource Plan definiert. Resource Pläne enthalten
die Regeln (auch Direktiven genannt), nach denen die Ressourcen an die Resource Consumer Groups aufgeteilt werden.
Resource Pläne sind dynamisch und können mit einem einfachen Befehl aktiviert bzw. deaktiviert werden
(siehe folgendes Listing). Es gilt allerdings immer nur ein Plan zu einer Zeit.
Resource Pläne können aus einem simplen Plan bestehend aus einer Ebene (auch Single Level genannt) oder
komplexer aus mehreren Ebenen (auch Multi Level Plan genannt) und somit mehreren Subplänen bestehen.
Es gibt allerdings auch vordefinierte Resource Pläne wie z.B. den Plan DEFAULT_MAINTENANCE_PLAN,
der für die oben schon erwähnten Maintenance Aufgaben eingesetzt wird. Die Resource Pläne können nun
aus den oben schon gelisteten Ressourcen zusammengesetzt werden.
Zwei generelle Tipps: Machen Sie den Resource Plan nicht zu komplex, d.h. verwenden Sie nicht zu viele unterschiedliche
Ressourcen und Ebenen. Sorgen Sie auch dafür, dass Sie als Administrator in der SYS_GROUP immer ausreichend
Ressourcen zur Verfügung haben.
In diesem Tipp wollen wir uns auf die Zuweisung von CPU-Ressourcen in einem Multi Level Plan konzentrieren.
Folgender Multi Level Plan mit Namen CPU_LAST zeigt eine mögliche Plankonstellation an. Standardmässig
wird die Nutzung von CPU-Ressourcen als erstes im Menüpunkt "General" (siehe Screenshot) abgefragt. Die Nutzung von
Prozentzahlen zur CPU-Zuordnung pro Gruppe ist dabei die gängige Variante.
| Level 1 | Level 2 | Level 3 |
SYS_GROUP | 80 | | |
GRUPPE_CPU_HIGH | | 80 | |
GRUPPE_CPU_LOW | | 20 | |
OTHER_GROUPS | | | 100 |
Folgende Abbildung zeigt das Anlegen des Resource Plans CPU_LAST.
Für eine größere Ansicht auf das Bild klicken.
Was bedeutet dieser Plan? 80% garantierte CPU-Ressourcen erhalten die Administratoren in der SYS_GROUP. Die verbleibenden
20% bzw. alle ungenutzten CPU-Ressourcen werden an Level 2 weitergegeben. Hier erhält die GRUPPE_HIGH 80% (der 20%);
20% (der 20%) erhält GRUPPE_CPU_LOW. Sind ungenutzte CPU-Ressourcen übrig, werden diese an Level 3 und
somit an alle anderen User in der OTHER_GROUPS zugewiesen.
Wie können wir nun die Ressourcen-Nutzung monitoren? Data Dictionary Views, V$Views, der Enterprise Manager und
natürlich auch AWR- und ASH-Berichte zeigen Informationen zu der Nutzung im Database Resource Manager.
Im Folgenden sind einige interessante Views aufgelistet:
V$RSRC_PLAN: aktiver Plan
V$RSRC_PLAN_HISTORY: Plan Historie
V$RSRC_CONSUMER_GROUP: Ressource pro Gruppe
V$RSRC_CONS_GROUP_HISTORY: Historie der Statistiken
V$RSRC_SESSION_INFO: Statistiken pro Session
V$SESSION: Aktive Sessions und Consumer Group Zuordnung mit V$SESSION
DBA_RSRC_CONSUMER_GROUP_PRIVS: Zuordnung der User zu (initialen) Resource Consumer Groups
Folgende Abfrage gibt zum Beispiel einen Überblick über den Einsatz von Resource Plänen über die Zeit.
Möchten Sie einen Überblick und eine Beschreibung aller vordefinierten Resource Consumer Groups, Resource Plans,
Data Dictionary Views erhalten, werfen Sie einen Blick in den Oracle Database Administrator's Guide in Kapitel 25.
Folgende Beispiele dokumentieren den Einsatz des Multi Level Plan in unserem Beispiel von oben. Nicht zu vergessen ist dabei,
dass sich der Effekt des Database Resource Managers erst in Umgebungen unter hoher Systemlast bemerkbar macht.
Um eine repräsentative Demonstration durchzuführen, muss eine Last (hohe CPU-Nachfrage) erzeugt werden, die eine
CPU-Knappheit bewirkt. Daher sorgen wir mit einem einfachen CPU-intensiven SQL Skript dafür,
dass die vorhandenen CPU-Ressourcen vollständig ausgelastet werden, um die Effekte monitoren zu können
Möchte man zum Beispiel einen Gesamtüberblick über die verbrauchten CPU-Ressourcen erhalten,
bietet sich dann folgende Abfragen an.
Es ist deutlich zu sehen, dass die meisten CPU-Ressourcen von der Gruppe SYS_GROUP und weiterhin von der GRUPPE_CPU_HIGH
verbraucht werden. Möchte man ein Session genaues Monitoren durchführen, sollte folgende Abfrage verwendet werden:
Auch im AWR Report ist die Verwendung des Resource Managers in unterschiedlichen Abschnitten sichtbar.
Zum Beispiel weisen Events mit der Bezeichnung "resmgr:cpu quantum" im AWR Report auf den Einsatz des Database
Resource Managers hin.
Einen Gesamtüberblick als Graphik ist dann auch im Enterprise Manager im Bereich Server=> Resource Manager=>Statistics
zu sehen. Die folgende Abildung zeigt eine mögliche Ansicht im Enterprise Manager.
Für eine größere Ansicht auf das Bild klicken.
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|