Tabellen Monitoring mit DBA_TAB_MODIFICATIONS und SYS.COL_USAGE$
von Ulrike Schwinn, ORACLE Deutschland B.V. & Co.KG
Häufig stellt sich die Frage, wie man die Zugriffe auf Objekte wie Tabellen und Indizes überwachen kann. Abhängig davon können beispielsweise Entscheidungen über die Existenz von Indizes oder die Art der Partitionierung getroffen werden bzw. Optimizerzugriffe besser eingeschätzt werden. Die Nutzung von Auditing bzw. die Verwendung von Objekt Statistiken kann dabei natürlich hilfreich sein. Darüberhinaus bietet Oracle allerdings weitere Monitoring Techniken an, die es erlauben, mit speziellen Views und Tabellen Spaltenzugriffe in der WHERE Klausel, TRUNCATE Operationen oder DML Zugriffe zu überwachen.
Hinweis: Für Indizes wurde dazu schon in einem älteren Tipp das Index Monitoring beschrieben. Dies beantwortet die Frage, ob bestimmte Indizes überhaupt verwendet werden. Mehr dazu können Sie hier nachlesen.
Im folgenden Tipp sollen zwei Techniken des Tabellen Monitorings erläutert werden: das Tabellen Monitoring speziell für DML, TRUNCATE und DROP PARTITION Operationen und das Monitoring der Prädikatnutzung von Spalten in der WHERE Klausel.
DML Monitoring mit DBA_TAB_MODIFICATIONS
Seit jeher gibt es die Möglichkeit, Aktivitäten wie INSERT, UPDATE, DELETE und TRUNCATE auf Tabellen sowie DROP Operationen auf Partitionen zu überwachen. Vor 10g musste man dazu manuell die entsprechenden Tabellen mit dem Attribut MONITORING (vergleichbar mit dem Index Monitoring) versehen. Ab 10g ist dies nicht mehr erforderlich, da der Statistik Maintenance Job diese Informationen für das eigene Statistik Gathering benötigt und daher automatisch das Monitoring einschaltet. Einzige Voraussetzung ist das Setzen von STATISTICS_LEVEL auf TYPICAL. Wird beispielsweise ein bestimmter Prozentsatz (Default ist 10 Prozent) an veränderten Zeilen überschritten, sind die Tabellen Statistiken STALE und werden beim nächsten Statistik Gathering Job mitgepflegt.
Standardmässig werden diese Informationen in der SGA gehalten. Möchte man diese Statistiken allerdings umgehend sichtbar machen (materialisieren), kann man dazu die Prozedur FLUSH_DATABASE_MONITORING_INFO aus dem Package DBMS_STATS verwenden. Zu finden sind die entsprechenden Informationen dann in der View DBA_TAB_MODIFICATIONS. So lässt sich zum Beispiel verifizieren, ob eine Tabelle nach dem Maintenance Job starken Veränderungen unterliegt.
Folgendes einfache Beispiel demonstriert das Verhalten.
Nach dem Aktualisierung der Statistiken zum Beispiel mit GATHER_TABLE_STATS wird die View DBA_TAB_MODIFICATIONS wieder automatisch geleert. Die aktualisierten Statistiken finden sich dann wie immer in DBA_TABLES, DBA_TAB_STATISTICS etc. Dies bedeutet natürlich auch, dass direkt nach dem Maintenance Job bzw. nach einem Gather Statistic Job keine Einträge in der Tabelle vorzufinden sind.
Übrigens lässt sich der Schwellenwert von 10 Prozent seit 11g über sogenannte globale oder lokale Präferenzen beeinflussen. Global wird die Einstellung (STALE_PERCENT genannt) über DBMS_STATS.SET_GLOBAL_PREFS und lokal für einzelne Tabellen über DBMS_STATS.SET_TABLE_PREFS beeinflusst. Folgendes Beispiel zeigt die Verwendung der lokalen Tabellen Präferenz - der Schwellenwert, ab wann die Statistiken STALE werden, wird auf 20 Prozent erhöht.
Spaltenzugriffe auf Tabellen
In DWH Umgebungen ist es häufig notwendig, Entscheidungen über Kriterien zur Partitionierung oder Indizierung zu treffen.
Da kann es hilfreich sein, Informationen über Spalten zu haben, die bei Join Abfragen Verwendung finden oder als Prädikat in der WHERE Klausel vorzufinden sind. Die entsprechenden Informationen stammen vom Cost Based Optimizer und werden schon seit Oracle 9i automatisch in der Tabelle SYS.COL_USAGE$ gespeichert. Da diese View für interne Zwecke erstellt wurde, ist die Lesbarkeit nicht besonders nutzer-freundlich, wie folgendes Listing beweist.
Die Spalten OBJ# und INTCOL# geben dabei Hinweise auf die Objekte und ihre Spalten; TIMESTAMP gibt den Zeitpunkt des Zugriffs an und die Spalten EQUALITY_PREDS, EQUIJOIN_PREDS, NONEQUIJOIN_PREDS, RANGE_PREDS, LIKE_PREDS und NULL_PREDS sind die Platzhalter für die Verwendung der Spalten. Um diese Informationen besser nutzen zu können, lohnt sich, wie in MOS Note 400214.1 beschrieben, eine View DBA_COLUMN_USAGE zu erzeugen, die die Lesbarkeit wesentlich erhöht.
Um die Nutzung zu demonstrieren, werden folgende Abfragen ausgeführt.
Das Ergebnis wird zuerst in der SGA vorgehalten. Ein direkter Zugriff wird wie oben durch die Prozedur FLUSH_DATABASE_MONITORING_INFO aus dem Package DBMS_STATS ermöglicht.
Wie man leicht erkennen kann, listet das Ergebnis die Zugriffe auf die Tabellen und die entsprechenden Spalten auf.
Hinweis: Die hier beschriebenen Techniken und das Index Monitoring sind in jeder Datenbank Edition enthalten.
Weitere Informationen
Folgende Tipps, Links, MOS Notes können hilfreich sein:
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben.
Zurück zur Community-Seite
|