Aktivitätsprotokollierung für die automatische Statistikerfassung

Das Statistikprotokoll ist eine Aufzeichnung aller Aktivitäten zur Statistikerfassung (manuell und automatisch), die in einer bestimmten Datenbank stattgefunden haben.

Der Standardname des Statistikprotokolls ist db2optstats.number.log. Es befindet sich im Verzeichnis $diagpath/events. Das Statistikprotokoll ist ein Umlaufprotokoll. Das Protokollierungsverhalten wird durch die Registrierdatenbankvariable DB2_OPTSTATS_LOG gesteuert.

Das Statistikprotokoll kann direkt angezeigt oder mithilfe der Tabellenfunktion SYSPROC.PD_GET_DIAG_HIST abgefragt werden. Diese Tabellenfunktion gibt eine Reihe von Spalten zurück, die Standardinformationen zu jedem protokollierten Ereignis enthalten, wie beispielsweise die Zeitmarke, den Db2® -Instanznamen, den Datenbanknamen, die Prozess-ID, den Prozessnamen und die Thread-ID. Das Protokoll enthält außerdem generische Spalten zur Verwendung durch verschiedene Protokolleinrichtungen. In der folgenden Tabelle werden die generischen Spalten und ihre Verwendung im Statistikprotokoll beschrieben.

Tabelle 1. Generische Spalten in der Statistikprotokolldatei
Spaltenname Datentyp Beschreibung
OBJTYPE VARCHAR(64) Der Typ von Objekt, auf den sich das Ereignis bezieht. Bei der Statistikprotokollierung ist dies der Typ von Statistik, der zu erfassen ist. OBJTYPE kann sich auch auf einen Hintergrundprozess zur Statistikerfassung beziehen, wenn der Prozess gestartet oder gestoppt wird. Ferner kann sich OBJTYPE auf Aktivitäten beziehen, die von der automatischen Statistikerfassung ausgeführt werden, zum Beispiel Stichprobentests, Anfangsstichproben und Tabellenbewertung.
Mögliche Werte für Aktivitäten zur Statistikerfassung:
TABLE STATS
Tabellenstatistiken werden erfasst.
INDEX STATS
Indexstatistiken werden erfasst.
TABLE AND INDEX STATS
Tabellen- und Indexstatistiken werden erfasst.
Mögliche Werte für die automatische Statistikerfassung:
EVALUATION
Der automatische, im Hintergrund ausgeführte Statistikerfassungsprozess hat mit der Bewertungsphase begonnen. In dieser Phase werden Tabellen überprüft, um festzustellen, ob für sie aktualisierte Statistikdaten erforderlich sind. Ist dies der Fall, werden Statistikdaten erfasst.
INITIAL SAMPLING
Statistikdaten werden für eine Tabelle durch Stichprobenentnahme erfasst. Die Stichprobenstatistiken werden im Systemkatalog gespeichert. Dies ermöglicht der automatischen Statistikerfassung ein rasches Fortfahren für eine Tabelle, die keine Statistiken hat. Nachfolgende Operationen erfassen Statistikdaten ohne Stichprobenentnahme. Die anfängliche Stichprobenentnahme wird während der Bewertungsphase der automatischen Statistikerfassung ausgeführt.
SAMPLING TEST
Statistikdaten werden für eine Tabelle durch Stichprobenentnahme erfasst. Die Stichprobenstatistiken werden nicht im Systemkatalog gespeichert. Die Stichprobenstatistiken werden mit den aktuellen Katalogstatistiken verglichen, um festzustellen, ob und wann vollständige Statistikdaten für die betroffene Tabelle erfasst werden sollten. Die Stichprobenentnahme wird während der Bewertungsphase der automatischen Statistikerfassung durchgeführt.
STATS DAEMON
Der Statistikdämon ist ein Hintergrundprozess zur Verarbeitung von Anforderungen, die durch die Echtzeitstatistikerfassung übergeben werden. Dieser Objekttyp wird protokolliert, wenn der Hintergrundprozess gestartet und gestoppt wird.
COLUMN GROUP STATS
Die Statistikerfassung wendet ein Erkennungsverfahren an, um die zu erfassenden Spaltengruppenstatistiken zu ermitteln.
OBJNAME VARCHAR(255) Der Name des Objekts, auf das sich das Ereignis bezieht, falls verfügbar. Für die Statistikprotokollierung ist dies der Name der Tabelle oder des Index. Wenn OBJTYPE den Wert STATS DAEMON oder EVALUATION hat, ist OBJNAME der Datenbankname und OBJNAME_QUALIFIER hat den Wert NULL.
OBJNAME_QUALIFIER VARCHAR(255) Für die Statistikprotokollierung ist dies das Schema der Tabelle oder des Index.
EVENTTYPE VARCHAR(24) Der Ereignistyp ist die Aktion, die diesem Ereignis zugeordnet ist. Die folgenden Werte für die Statistikprotokollierung sind möglich:
COLLECT
Diese Aktion wird für eine Operation zur Statistikerfassung protokolliert.
START
Diese Aktion wird protokolliert, wenn der Hintergrundprozess der Echtzeitstatistikerfassung (OBJTYPE = STATS DAEMON) oder eine Bewertungsphase der automatischen Statistikerfassung (OBJTYPE = EVALUATION) gestartet wird.
STOP
Diese Aktion wird protokolliert, wenn der Hintergrundprozess der Echtzeitstatistikerfassung (OBJTYPE = STATS DAEMON) oder eine Bewertungsphase der automatischen Statistikerfassung (OBJTYPE = EVALUATION) gestoppt wird.
ACCESS
Diese Aktion wird protokolliert, wenn versucht wurde, auf eine Tabelle zu Zwecken der Statistikerfassung zuzugreifen. Dieser Ereignistyp dient zur Protokollierung eines fehlgeschlagenen Zugriffsversuchs, wenn das Objekt nicht verfügbar ist.
SCHREIBEN
Diese Aktion wird protokolliert, wenn zuvor erfasste Statistikdaten, die im Statistikcache gespeichert sind, in den Systemkatalog geschrieben werden.
DISCOVER
Diese Aktion wird für eine Operation zur Statistikerkennung protokolliert.
FIRST_EVENTQUALIFIERTYPE VARCHAR(64) Der Typ des ersten Ereignisqualifikationsmerkmals. Ereignisqualifikationsmerkmale dienen zur Beschreibung der von dem Ereignis betroffenen Bereiche. Für die Statistikprotokollierung ist das erste Ereignisqualifikationsmerkmal die Zeitmarke für den Zeitpunkt, zu dem das Ereignis aufgetreten ist. Der Wert für den Typ des ersten Ereignisqualifikationsmerkmals ist AT.
FIRST_EVENTQUALIFIER CLOB(16K) Das erste Qualifikationsmerkmal für das Ereignis. Für die Statistikprotokollierung ist das erste Ereignisqualifikationsmerkmal die Zeitmarke für den Zeitpunkt, zu dem das Statistikereignis aufgetreten ist. Die Zeitmarke des Statistikereignisses kann sich von der Zeitmarke des Protokollsatzes, wie er in der Spalte TIMESTAMP dargestellt wird, unterscheiden.
SECOND_EVENTQUALIFIERTYPE VARCHAR(64) Der Typ des zweiten Ereignisqualifikationsmerkmals. Für die Statistikprotokollierung kann dieser Wert BY oder NULL sein. Dieses Feld wird für andere Ereignistypen nicht verwendet.
SECOND_EVENTQUALIFIER CLOB(16K) Das zweite Qualifikationsmerkmal für das Ereignis. Bei der Statistikprotokollierung stellt diese Spalte für COLLECT-Ereignistypen dar, wie die Statistiken erfasst wurden. Mögliche Werte:
Benutzer
Die Statistikerfassung wurde durch einen DB2-Benutzer ausgeführt, der den Befehl LOAD, REDISTRIBUTE oder RUNSTATS aufgerufen oder die Anweisung CREATE INDEX abgesetzt hat.
Synchron
Die Statistikerfassung wurde bei der SQL-Anweisungskompilierung durch den DB2-Server ausgeführt. Die Statistiken werden im Statistikcache, jedoch nicht im Systemkatalog gespeichert.
Synchronous sampled
Die Statistikerfassung wurde durch Stichprobenentnahme bei der SQL-Anweisungskompilierung durch den DB2-Server ausgeführt. Die Statistiken werden im Statistikcache, jedoch nicht im Systemkatalog gespeichert.
Fabricate
Die Statistikdaten wurden bei der SQL-Anweisungskompilierung mithilfe von Informationen konstruiert, die vom Daten- und Indexmanager gepflegt werden. Die Statistiken werden im Statistikcache, jedoch nicht im Systemkatalog gespeichert.
Fabricate partial
Nur einige Statistikdaten wurden bei der SQL-Anweisungskompilierung mithilfe von Informationen konstruiert, die vom Daten- und Indexmanager gepflegt werden. Insbesondere wurden nur die HIGH2KEY- und LOW2KEY-Werte für bestimmte Spalten konstruiert. Die Statistiken werden im Statistikcache, jedoch nicht im Systemkatalog gespeichert.
Asynchron
Die Statistiken wurden durch einen DB2-Hintergrundprozess erfasst und im Systemkatalog gespeichert.
Dieses Feld wird für andere Ereignistypen nicht verwendet.
THIRD_EVENTQUALIFIERTYPE VARCHAR(64) Der Typ des dritten Ereignisqualifikationsmerkmals. Für die Statistikprotokollierung kann dieser Wert DUE TO oder NULL sein.
THIRD_EVENTQUALIFIER CLOB(16K) Das dritte Qualifikationsmerkmal für das Ereignis. Für die Statistikprotokollierung stellt diese Spalte die Ursache dar, aus der die Statistikaktivität nicht abgeschlossen werden konnte. Mögliche Werte:
Timeout
Die synchrone Statistikerfassung hat das Zeitbudget überschritten.
Fehler
Die Statistikaktivität ist aufgrund eines Fehlers fehlgeschlagen.
RUNSTATS error
Die synchrone Statistikerfassung ist aufgrund eines RUNSTATS-Fehlers fehlgeschlagen. Bei einigen Fehlern wurde die SQL-Anweisungskompilierung möglicherweise erfolgreich abgeschlossen, auch wenn die Statistikdaten nicht erfasst werden konnten. Wenn zum Beispiel nicht genügend Speicherplatz für die Statistikerfassung verfügbar ist, wird die SQL-Anweisungskompilierung fortgesetzt.
Object unavailable
Die Statistiken konnten für das Datenbankobjekt nicht erfasst werden, weil kein Zugriff auf das Objekt möglich war. Einige mögliche Ursachen:
  • Das Objekt ist im Z-Modus (Super Exclusive) gesperrt.
  • Der Tabellenbereich, in dem sich das Objekt befindet, ist nicht verfügbar.
  • Die Tabellenindizes müssen erneut erstellt werden.
Conflict
Die synchrone Statistikerfassung wurde nicht ausgeführt, weil eine andere Anwendung bereits synchrone Statistiken erfasste.
Überprüfen Sie die Spalte FULLREC oder die db2diag-Protokolldateien auf Details zu diesem Fehler.
EVENTSTATE VARCHAR(255) Der Status des Objekts oder der Aktion infolge des Ereignisses. Für die Statistikprotokollierung gibt diese Spalte den Status der Statistikoperation an. Mögliche Werte:
  • Starten
  • Erfolg
  • Fehler

Beispiele

In diesem Beispiel gibt die Abfrage Protokollsätze für Ereignisse bis zu einem Jahr vor der aktuellen Zeitmarke zurück, indem sie die Tabellenfunktion PD_GET_DIAG_HIST aufruft.
   select pid, tid,
       substr(eventtype, 1, 10),
       substr(objtype, 1, 30) as objtype,
       substr(objname_qualifier, 1, 20) as objschema,
       substr(objname, 1, 10) as objname,
       substr(first_eventqualifier, 1, 26) as event1,
       substr(second_eventqualifiertype, 1, 2) as event2_type,
       substr(second_eventqualifier, 1, 20) as event2,
       substr(third_eventqualifiertype, 1, 6) as event3_type,
       substr(third_eventqualifier, 1, 15) as event3,
       substr(eventstate, 1, 20) as eventstate
     from table(sysproc.pd_get_diag_hist 
       ('optstats', 'EX', 'NONE', 
         current_timestamp - 1 year, cast(null as timestamp))) as sl
     order by timestamp(varchar(substr(first_eventqualifier, 1, 26), 26));
Die Ergebnisse werden nach der Zeitmarke in der Spalte FIRST_EVENTQUALIFIER geordnet, die den Zeitpunkt des Statistikereignisses angibt.
PID   TID           EVENTTYPE OBJTYPE                OBJSCHEMA OBJNAME    EVENT1                     EVENT2_ EVENT2               EVENT3_ EVENT3   EVENTSTATE
                                                                                                     TYPE                         TYPE
----- ------------- --------- ---------------------  --------- ---------- -------------------------- ------- -------------------- ------- -------- ----------
28399    1082145120 START     STATS DAEMON           -         PROD_DB    2007-07-09-18.37.40.398905 -       -                    -       -        success
28389  183182027104 COLLECT   TABLE AND INDEX STATS  DB2USER   DISTRICT   2007-07-09-18.37.43.261222 BY      Synchronous          -       -        start
28389  183182027104 COLLECT   TABLE AND INDEX STATS  DB2USER   DISTRICT   2007-07-09-18.37.43.407447 BY      Synchronous          -       -        success
28399    1082145120 COLLECT   TABLE AND INDEX STATS  DB2USER   CUSTOMER   2007-07-09-18.37.43.471614 BY      Asynchronous         -       -        start
28399    1082145120 COLLECT   TABLE AND INDEX STATS  DB2USER   CUSTOMER   2007-07-09-18.37.43.524496 BY      Asynchronous         -       -        success
28399    1082145120 STOP      STATS DAEMON           -         PROD_DB    2007-07-09-18.37.43.526212 -       -                    -       -        success
28389  183278496096 COLLECT   TABLE STATS            DB2USER   ORDER_LINE 2007-07-09-18.37.48.676524 BY      Synchronous sampled  -       -        start
28389  183278496096 COLLECT   TABLE STATS            DB2USER   ORDER_LINE 2007-07-09-18.37.53.677546 BY      Synchronous sampled  DUE TO  Timeout  failure
28389    1772561034 START     EVALUATION             -         PROD_DB    2007-07-10-12.36.11.092739 -       -                    -       -        success
28389    8231991291 COLLECT   TABLE AND INDEX STATS  DB2USER   DISTRICT   2007-07-10-12.36.30.737603 BY      Asynchronous         -       -        start
28389    8231991291 COLLECT   TABLE AND INDEX STATS  DB2USER   DISTRICT   2007-07-10-12.36.34.029756 BY      Asynchronous         -       -        success
28389    1772561034 STOP      EVALUATION             -         PROD_DB    2007-07-10-12.36.39.685188 -       -                    -       -        success
28399    1504428165 START     STATS DAEMON           -         PROD_DB    2007-07-10-12.37.43.319291 -       -                    -       -        success
28399    1504428165 COLLECT   TABLE AND INDEX STATS  DB2USER   CUSTOMER   2007-07-10-12.37.43.471614 BY      Asynchronous         -       -        start
28399    1504428165 COLLECT   TABLE AND INDEX STATS  DB2USER   CUSTOMER   2007-07-10-12.37.44.524496 BY      Asynchronous         -       -        failure
28399    1504428165 STOP      STATS DAEMON           -         PROD_DB    2007-07-10-12.37.45.905975 -       -                    -       -        success
28399    4769515044 START     STATS DAEMON           -         PROD_DB    2007-07-10-12.48.33.319291 -       -                    -       -        success
28389    4769515044 WRITE     TABLE AND INDEX STATS  DB2USER   CUSTOMER   2007-07-10-12.48.33.969888 BY      Asynchronous         -       -        start
28389    4769515044 WRITE     TABLE AND INDEX STATS  DB2USER   CUSTOMER   2007-07-10-12.48.34.215230 BY      Asynchronous         -       -        success