Dynamisches SQL gibt es schon so lange, wie es DB2 und SQL gibt. Die hohe Flexibilität und Einsatzbreite erkauft man sich allerdings durch einen gewissen Performanceverlust. Einiges, was beim statischen SQL einmalig zum Zeitpunkt des BINDs passiert (Syntaxprüfung, Parsing, Berechtigungskontrolle, Ermittlung des Zugriffspfads ...) erfolgt bei dynamischem SQL erst zum Zeitpunkt der Ausführung - und das jedesmal neu. Bereits mit der DB2 for OS390 Version 5 hat IBM den dynamic statement cache (DSC) eingeführt. Vor allem für die Unterstützung von Anwendungen, die überwiegend oder ausschließlich dynamisches SQL verwenden (wie z.B. SAP oder people soft). Der DSC ist ein Speicherbereich des EDM-Pools im DBM1 Adressraum. In ihm werden Informationen, die beim PREPARE des dynamischen SQL Statements gewonnen wurden, abgelegt und eliminieren so die Notwenigkeit eines weiteren PREPAREs, wenn das identische Statement erneut ausgeführt werden muss. Verschwand das Statement aus dem DSC, z.B. weil dieser zu klein war und nicht alle Statements aufnehmen konnte, weil sich RUNSTATS-Daten oder Berechtigungen änderten oder schlicht, weil das DB2-System neu gestartet wurde, dann ging die Information verloren und der Prepare musste wiederholt werden. Ab V12 function level 500 bietet DB2 jetzt die Möglicheit, diese Informationen im Katalog abzulegen und dadurch über einen längeren Zeitraum verfügbar zu halten.
Parameter | Beschreibung | mögliche Werte | ||||||||
CACHEDYN | sollen präparierte Statements im cache gespeichert werden | YES (Default) NO | ||||||||
MAXKEEPD | maximale Anzahl präparierter dynamischer Statements, die im cache gespeichert werden sollen | (numerischer Wert) , Default: 5000 | ||||||||
CACHEDYN_STABILIZATION CACHEDYNST | wie soll mit dynamic sql stabilization umgegangen werden |
|
DELETE FROM DSN_STATEMENT_CACHE_TABLE ;
---------+---------+---------+---------+---------+---------+------
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0
---------+---------+---------+---------+---------+---------+------
EXPLAIN STMTCACHE ALL;
---------+---------+---------+---------+---------+---------+------
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0
---------+---------+---------+---------+---------+---------+------
SELECT STMT_ID, SUBSTR(STMT_TEXT,1,80) AS TEXT
FROM DSN_STATEMENT_CACHE_TABLE
ORDER BY CACHED_TS DESC
---------+---------+---------+---------+---------+---------+---------+---------+
STMT_ID TEXT
---------+---------+---------+---------+---------+---------+---------+---------+
1144 DELETE FROM DSN_STATEMENT_CACHE_TABLE
1143 SELECT NAME, TSNAME FROM SYSIBM.SYSTABLES WHERE DBNAME = 'DSNDB06'
1142 INSERT INTO MYUSER.MYTABLEVIEW VALUES (S ...
1141 WITH NN# AS ( SELECT A ...
-STA DYNQUERYCAPTURE STBLGRP (GROUP01) STMTID(1143)
********************************* Top of Data **********************************
DSNX221I -DB2S DSNXESTC DYNAMIC QUERY CAPTURE FOR COMMAND NUMBER 1
STARTED SUCCESSFULLY.
******************************** Bottom of Data ********************************
-STA DYNQUERYCAPTURE STBLGRP (GRPTH20) THRESHLD(20)
SELECT SDQ_STMT_ID, STBLGRP, STMTTEXT
FROM SYSIBM.SYSDYNQRY
---------+---------+---------+---------+---------+---------+---------+---------+
SDQ_STMT_ID STBLGRP STMTTEXT
---------+---------+---------+---------+---------+---------+---------+---------+
1 GROUP01 SELECT NAME, TSNAME FROM SYSIBM.SYSTABLES WHERE DBNAME = 'DSNDB06'
DSNE610I NUMBER OF ROWS DISPLAYED IS 1
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100
---------+---------+---------+---------+---------+---------+---------+---------+
SELECT SDQ_STMT_ID ID, SUBSTR(BQUALIFIER,1,10) BQUALIFIER,
SUBSTR(BNAME,1,20) BNAME , BTYPE , BAUTH, AUTHID
FROM SYSIBM.SYSDYNQRYDEP
--------+---------+---------+---------+---------+---------+---------+------
ID BQUALIFIER BNAME BTYPE BAUTH AUTHID
--------+---------+---------+---------+---------+---------+---------+------
1 DSNDB06 DSNRSTAT P 0
1 SYSIBM SYSTABLES T 0
1 SYSIBM SYSTABLES T 50 MYUSER
1 SYSIBM DSNDTX05 I 0
DSNE610I NUMBER OF ROWS DISPLAYED IS 4
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100
---------+---------+---------+---------+---------+---------+---------+---------+
FREE STABILIZED DYNAMIC QUERY SDQSTMTID (1)
DSNT340I -DB2S FREE STABILIZED DYNAMIC QUERY COMPLETED SUCCESSFULLY
FOR 1 STATEMENTS.
Zurück zu DB2 | Home | Impressum / Datenschutz |