例: ルーチンのステートメント・テキストの取得
ルーチン・モニターを使用すると、ルーチンによって実行されたステートメントを取得できます。
シナリオ
この例では、データベース管理者 (DBA) はルーチンによって実行されたコストの高いステートメントを手動で調査しています。
調査の一環として、MON_GET_ROUTINE_EXEC_LIST 内の行をルーチンの特定のステートメントまたは行にリンクすると役立つことがあります。
無名ブロック、動的 SQL ステートメント、または外部ルーチンなどの存続期間の短いルーチンのステートメント・テキストを取得するには、パッケージ・キャッシュのステートメントを取得します。
以下の照会は、MON_GET_ROUTINE_EXEC_LIST 内の行を特定のステートメントにリンクします。
SELECT
A.ROUTINETYPE, A.ROUTINESCHEMA, A.ROUTINENAME,
A.SECTION_TYPE, A.SECTION_NUMBER, A.STMTNO,
SUBSTR(B.STMT_TEXT,1,160)
FROM
TABLE(MON_GET_ROUTINE_EXEC_LIST('P','DRICARD',NULL,'PROC1',-1)) AS A,
TABLE(MON_GET_PKG_CACHE_STMT(NULL,NULL,NULL,-1)) AS B
WHERE
A.EXECUTABLE_ID=B.EXECUTABLE_ID返される結果は、次のようになります。
STMT_TEXT
--------------------------------------------
WITH GET_UPDATE_LIST (COL1, COL2STATS) AS AF
insert into T1 values(3,'d','d','d')
call SYSIBMSUBROUTINE.P1_66613_1157394573()
3 record(s) selected.注: 動的 SQL ステートメントまたは外部ルーチン・ステートメントが MON_GET_ROUTINE_EXEC_LIST によって返され、関連付けられた executable_id がパッケージ・キャッシュにもうない場合には、イベント・モニターを使用してその情報をログに記録していない限りは、対象のステートメント・テキストをリカバリーすることはできません。
InfoSphere® Optim™ Performance Manager 製品のリフレッシュ・サイクルでは、ほとんどの場合、この情報を取得できます。
コンパイル済み SQL ステートメントおよびインライン化されたルーチンの場合、MON_GET_ROUTINE_EXEC_LIST によって返されるパッケージおよびステートメントの情報を使用してステートメント・テキストを検出できます。
例えば、
SELECT RS.ROUTINETYPE, RS.ROUTINESCHEMA, RS.ROUTINENAME,
RS.SECTION_NUMBER, RS.STMTNO, SUBSTR(SS.TEXT,1,160)
FROM
TABLE(MON_GET_ROUTINE_EXEC_LIST('F','DRICARD','','MYFUNC',-1)) AS RS,
SYSIBM.SYSSTMT SS
WHERE
RS.SECTION_TYPE = 'S'
AND SS.PLNAME = RS.PACKAGE_SCHEMA
AND SS.PLCREATOR = RS.PACKAGE_NAME
AND SS.STMTNO = RS.STMTNO
AND SS.SECTNO = RS.SECTION_NUMBER返される結果は、次のようになります。
STMT_TEXT
--------------------------------------------
insert into MYTABLE values('1')
1 record(s) selected.