Wenn’s mal hakt bei DB2

Immer wieder kommt es vor, dass Abfragen auf DB2-Tabellen nur sehr langsam ausgeführt werden. Performance-Tuning ist keine triviale Angelegenheit und sollten DB2-Admins durchführen. Ungeachtet dessen, kann man sich als Entwickler trotzdem ein Bild von der jeweiligen DB2-Konfiguration machen.

DB2 Statistiken

Über die DB2 Statistiken versucht DB2 Datenbankzugriffe zu optimieren. Dies setzt voraus dass Statistik-Informationen aktuell vorliegen. Die Statistiken werden über RUNSTAT und REORG erzeugt. Möchte man beispielsweise wissen, wann die Statistiken zuletzt erzeugt wurden, so kann über eine Abfrage auf die SYSIBM.SYSTABLES oder über die View SYSCAT.TABLES diese Information gewinnen.

Folgende SQL-Query zeigt die Informationen je Tabelle in einem Schema mit den gewünschten Informationen – CARD (Datensatzanzahl) und STATS_TIME (Datum, wann die Statistiken zuletzt erzeugt wurden):

SELECT TABSCHEMA, TABNAME, CARD, STATS_TIME FROM SYSIBM.SYSTABLES ORDER BY CARD DESC;
alternativ
SELECT TABSCHEMA, TABNAME, CARD, STATS_TIME FROM SYSCAT.TABLES ORDER BY CARD DESC;

DB2 Konfiguration ermitteln

Über das DB2-CLI können DB2 Konfigurationen abgefragt werden. Hierbei sollte bereits ein Filter (z.B. mit egrep) auf die entsprechenden Parameter gesetzt werden, außer man möchte sich die gesamte Konfiguration anzeigen lassen.

db2 get database configuration for DBAIMH01 | egrep 'LOGFILSIZE|LOGPRIMARY|LOGSECOND|NEWLOGPATH|Path'

Ist man sich gänzlich unsicher, welche DB2-Version man überhaupt installiert hat, hilft das Kommando db2level weiter. Diese Kommando muss ohne Parameter auf der Kommandozeile eingegeben werden.

db2level

Ebenfalls gängig ist die Auswertung mit Hilfe eines snapshots. Dazu kann beispielsweise auf der Kommandozeile folgendes Statement nützliche Informationen ausgeben:

db2 get snapshot for all on DBAIMH01 | egrep 'Secondary'

db2advis

Zur Optimierung von Datenbankabfragen kann auch das Kommandozeilen Werkzeug db2advis eingesetzt werden. Mit dem Parameter -d wird die Datenbank und dem Parameter -s ein entsprechendes SQL-Statement ausgeführt. Der Parameter -t gibt an wie viele Minuten die Abfrage maximal ausgeführt werden soll.

db2advis -d DBAIMH01 -l query.sql -t 5

EXPLAIN PLAN

Mit EXPLAIN PLAN kann für ein auszuführendes Statement ein Abfrage Plan erstellt werden. Nutzt man beispielsweise DBeaver als Datenbank-Client werden die Ergebnisse einer Abfrage in den EXPLAIN-Tabellen abgespeichert. Wichtig ist, dass die EXPLAIN-Tabellen entweder im Schema SYSTOOLS vorhanden sind (ist nicht Standard) oder die Berechtigung vorhanden ist in einem User-Schema die EXPLAIN-Tabellen anzulegen. Mehr zu EXPLAIN evtl. in einem Folgepost.

Schreibe einen Kommentar