Question & Answer
Question
一時表を大量に使用している SQL やコマンドを特定する良い方法はありますか。
Answer
スナップショット・モニター SQL 管理ビューを利用することで、一時表を大量に使用する SQL およびコマンドを一覧表示できます。
注:Db2 10.5 以降を使用している場合は以下のページを参照してください。
注:Db2 10.5 以降を使用している場合は以下のページを参照してください。
下記サンプル SQL を参考にしてください。
■ 一時表の使用状況確認用サンプル SQL
下記の SQL は、DDL/DML 以外に LOAD および REORG が使用する一時表の情報を出力します。
mon_tmptbl.sql97
■ 一時表の使用状況確認用サンプル SQL
下記の SQL は、DDL/DML 以外に LOAD および REORG が使用する一時表の情報を出力します。
mon_tmptbl.sql97
SELECT
T3.*,
SUBSTR(T10.STMT_TEXT,1,256) SUB_STMT_TEXT
FROM
(
SELECT
AGENT_ID,
TBSP_ID,
SUM(DATA_OBJECT_PAGES) TOTAL_TEMP_PAGES
FROM
SYSIBMADM.SNAPSTMT T1,
SYSIBMADM.SNAPTAB T2
WHERE
SUBSTR(T2.TABSCHEMA,1,INSTR(T2.TABSCHEMA,'><')) = '<' || T1.AGENT_ID || '>'
GROUP BY
AGENT_ID, TBSP_ID
) T3
JOIN
(
SELECT
AGENT_ID,
STMT_TEXT
FROM
(
SELECT
APPLICATION_HANDLE AGENT_ID,
STMT_TEXT
FROM
SYSIBMADM.MON_CURRENT_SQL T4
)
UNION ALL
(
SELECT
AGENT_ID,
UTILITY_DESCRIPTION --STMT_TEXT
FROM
(
SELECT
T6.AGENT_ID,
TABNAME
FROM
SYSIBMADM.SNAPAPPL_INFO T5,
SYSIBMADM.SNAPLOCK T6
WHERE
APPL_STATUS = 'LOAD' AND
T5.AGENT_ID = T6.AGENT_ID
) T7
JOIN
SYSIBMADM.SNAPUTIL T8
ON
T8.UTILITY_DESCRIPTION LIKE '%' || T7.TABNAME
)
UNION ALL
(
SELECT
T9.AGENT_ID,
STMT_OPERATION
FROM
SYSIBMADM.SNAPSTMT T9
WHERE
T9.STMT_OPERATION = 'REORG'
)
) T10
ON
T3.AGENT_ID = T10.AGENT_ID;
■ 出力例
$ db2 -tf mon_tmptbl.sql97
AGENT_ID TBSP_ID TOTAL_TEMP_PAGES SUB_STMT_TEXT
-------- ------- ---------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2683 1 8877 with t(c) as (values(1) union all select c+1 from t where c < 1000000), t2(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) as (select bigint(rand()*1000000000),1,1,1,1,1,1,1,1,1 from t) select * from t2,t2 t3 order by t2.c1
2477 1 584 OFFLINE LOAD DEL AUTOMATIC INDEXING INSERT NON-RECOVERABLE DB2INST1.TBL01
2 レコードが選択されました。
上記 SQL では、 SUM(DATA_OBJECT_PAGES) により、一時表のサイズを AGENT_ID ごとにまとめ、 TOTAL_TEMP_PAGES として出力しています。
また、STMT_TEXT は見やすくするため、 出力を 256 文字に制限したものを SUB_STMT_TEXT として出力しています。
■ 解説
一時表のスキーマ名は、"<agent_id><auth_id>" の形式をとるため、これを元に一時表を使用するアプリケーションとの突合せが可能です。
一時表のスキーマ名は、"<agent_id><auth_id>" の形式をとるため、これを元に一時表を使用するアプリケーションとの突合せが可能です。
- agent_id は、一時表を作成しているアプリケーションのアプリケーション・ハンドルです。
- auth_id は、 アプリケーションがデータベースに接続するときに使用する許可 ID です。
また一時表の名前は "TEMP (n, m)" の形式をとります。
- n は表スペース ID です。
- m は table_file_id モニター・エレメントです。
db2pd コマンドで確認した例を以下に示します (表のスキーマ名は8文字で途切れています)。
ここでは、アプリケーション・ハンドル「7」、許可 ID 「DB2INST1」の一部が SchemaNm に出力されています。
例)
>db2pd -db sample -tcb
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:54:25 -- Date 08/14/2012 17:38:59
TCB Table Information:
Address TbspaceID TableID PartID MasterTbs MasterTab TableName SchemaNm ObjClass DataSize LfSize LobSize XMLSize
0x07000000490CF958 0 1 n/a 0 1 SYSBOOT SYSIBM Perm 1 0 0 0
0x0700000049271ED8 2 -1 n/a 2 -1 INTERNAL SYSIBM Perm 1 0 0 0
0x070000004929B458 0 5 n/a 0 5 SYSTABLES SYSIBM Perm 29 0
-省略-
0x0700000049236658 0 142 n/a 0 142 SYSVARIABLES SYSIBM Perm 4 0 32 0
0x07000000492382D8 0 159 n/a 0 159 SYSMODULES SYSIBM Perm 1 0 1 0
0x07000000491CF758 0 -1 n/a 0 -1 INTERNAL SYSIBM Perm 3 0 0 0
0x070000004929EED8 3 -1 n/a 3 -1 INTERNAL SYSIBM Perm 1 0 0 0
0x07000000492A4758 1 2 n/a 1 2 TEMP (00001,00002) <7><DB2I Temp 1849 0 0 0
0x07000000492A50D8 1 3 n/a 1 3 TEMP (00001,00003) <7><DB2I Temp 2342 0 0 0
0x07000000492A5A58 1 4 n/a 1 4 TEMP (00001,00004) <7><DB2I Temp 2342 0 0 0
0x070000004923B1D8 1 6 n/a 1 6 TEMP (00001,00006) <7><DB2I Temp 2344 0 0 0
-省略-
表名の一覧およびアプリケーションと実行中の SQL に関する情報は、各種モニター・ツールより入手可能です。運用上の考慮点
- 自動的に生成される一時表とは異なり、ユーザーが宣言した一時表 (※) の場合は、上記サンプル SQL では、アプリケーションおよび SQL を特定できません。
一時表を宣言する DECLARE GLOBAL TEMPORARY TABLE 文は、ダイナミック SQL スナップショット (コマンド: db2 get dynamic sql for <dbname>)、または db2pd の DynamicCache (コマンド: db2pd -db <dbname> -dynamic) の出力から確認してください。
※ ユーザーが宣言した一時表は、表スナップショットで表タイプが "一時表" あるいは "Temporary" のもの、または db2pd の TCB Table Information 出力で ObjClass が "Temp" の表で、表名が "TEMP (n, m)" の命名規則に従わないものです。
関連情報
table_name - 表名 : モニター・エレメント
table_schema - 表スキーマ名 : モニター・エレメント
SNAPSTMT 管理ビューおよび SNAP_GET_STMT 表関数 - ステートメント・スナップショット情報の検索
SNAPTAB 管理ビューおよび SNAP_GET_TAB 表関数 - table 論理データ・グループのスナップショット情報の検索
SNAPAPPL_INFO 管理ビューおよび SNAP_GET_APPL_INFO 表関数 - appl_info 論理データ・グループのスナップショット情報の検索
SNAPLOCK 管理ビューおよび SNAP_GET_LOCK 表関数 - lock 論理データ・グループのスナップショット情報の検索
SNAPUTIL 管理ビューおよび SNAP_GET_UTIL 表関数 - utility_info 論理データ・グループ・スナップショット情報の検索
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlYAAU","label":"Database Objects-\u003ETables"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.1.0;9.5.0;9.7.0"}]
Was this topic helpful?
Document Information
Modified date:
31 August 2023
UID
swg21649023