例: ルーチンによって実行されたステートメントに費やされた時間のリスト作成
ルーチン・モニターを使用すると、ルーチンによって実行された各ステートメントにかかった時間をリスト表示できます。
シナリオ
この例では、データベース管理者 (DBA) は TEST.PROC1 という重要なストアード・プロシージャーのパフォーマンスを調査しています。
MON_GET_ROUTINE 表関数によって返される TOTAL_ROUTINE_COORD_EXEC_TIME モニター・エレメントは、このストアード・プロシージャーの実行経過時間が長いことを示しています。
DBA は、MON_RTN_EXECLIST データベース構成パラメーターを使用して、ルーチンごとにステートメント情報を追跡するようにデータベースを構成してあります。
DBA は以下の照会を発行し、TEST.PROC1 によって実行されたステートメントのリストを作成します。
SELECT B.EXECUTABLE_ID,
100*B.COORD_STMT_EXEC_TIME / A.TOTAL_ROUTINE_COORD_EXEC_TIME
AS PERCENT_EXEC_TIME,(SELECT SUBSTR(C.STMT_TEXT,1,120)
FROM TABLE(MON_GET_PKG_CACHE_STMT(NULL,B.EXECUTABLE_ID,NULL,-2)) AS C) AS STMT_TEXT
FROM TABLE(MON_GET_ROUTINE('P','TEST',NULL,'PROC1', -2)) AS A,
TABLE(MON_GET_ROUTINE_EXEC_LIST('P','TEST',NULL,'PROC1', -1)) AS B
WHERE A.TOTAL_ROUTINE_COORD_EXEC_TIME<>0
ORDER BY PERCENT_EXEC_TIME DESC結果は、ルーチンの実行経過時間のパーセンテージ順になります。EXECUTABLE_ID PERCENT_EXEC_TIME STMT_TEXT
------------------------------------------------------------------- -------------------- ------------------------------------------------------------------------------------------------------------------------
x'01000000000000000C0000000000000000000000020020120801145618138490' 0 SELECT TABNAME FROM SYSCAT.TABLES WHERE TABNAME='MY_TABLE' AND TABSCHEMA='MYSCHEMA'
x'01000000000000000B0000000000000000000000020020120801145618127528' 0 SELECT TABNAME FROM SYSCAT.TABLES WHERE TABNAME='MY_TABLE_2' AND TABSCHEMA='MYSCHEMA'
x'0100000000000000070000000000000000000000020020120801145618004432' 0 SELECT COLNAME, TYPENAME FROM SYSCAT.COLUMNS WHERE TABNAME='MY_TABLE' AND TABSCHEMA='MYSCHEMA'
3 record(s) selected.示された、ルーチンで実行時間の最も長いステートメントに関して、DBA はさらに調査を行い、一部のステートメントが長期間実行されている原因を判別できます。 DBA は対象ルーチンにおけるそのステートメントのすべての実行に関して集約されたエンベロープ・メトリックを調べるか、ステートメントの executable_id を MON_GET_PKG_CACHE_STMT 表関数と一緒に使用してそのステートメントのすべての実行に関する詳細メトリックを検索できます。