Question & Answer
Question
SQL を実行したところ、SQL で参照していない表に対してロックが取得されていました。なぜですか。
Answer
SQL で直接参照している表以外にも、視点・ユーザー定義関数・トリガーなどを経由して間接的に参照している表に対してロックが取得されることがあります。
Explain 機能により SQL のアクセス・プランを取得すると、参照される表を確認できます。ただし、ユーザー定義関数については SQL 言語ルーチンに限ります。
トリガーを定義した例:
Explain 機能により SQL のアクセス・プランを取得すると、参照される表を確認できます。ただし、ユーザー定義関数については SQL 言語ルーチンに限ります。
トリガーを定義した例:
- 従業員表 (EMP1) に新しく行を追加したとき、会社状況表 (COMPANY_STAT) の従業員数列 (NEMP) の値を +1 するトリガーを定義します。
db2 "CREATE TRIGGER NEW_HIRED AFTER INSERT ON EMP1 FOR EACH ROW UPDATE COMPANY_STAT SET NEMP = NEMP + 1"
- 以下の SQL を実行して従業員表 (EMP1) に新規の行を挿入します。
db2 "INSERT INTO EMP1 VALUES('0021','Ito Hirofumi')"
- このときのアクセスプランを取得すると、EMP1 表だけでなく COMPANY_STAT 表にもアクセスしていることがわかります。
Original Statement: ------------------ INSERT INTO EMP1 VALUES('0021','Ito Hirofumi') Optimized Statement: ------------------- $WITH CONTEXT$($TRIGGER$(SCHEMA1.NEW_HIRED)) INSERT INTO SCHEMA1.EMP1 AS Q3 SELECT 'Ito Hirofumi ', '0021 ' FROM (VALUES 1) AS Q1 Access Plan: ----------- Total Cost: 7302.16 Query Degree: 1 Rows RETURN ( 1) Cost I/O | 0.04 FILTER ( 2) 7302.16 965 /----------+-----------\ 1 960 INSERT UPDATE ( 3) ( 5) 7.56537 7294.59 1 964 /----+-----\ /---+---\ 1 4 960 1000 TBSCAN TABLE: SCHEMA1 TBSCAN TABLE: SCHEMA1 ( 4) EMP1 ( 6) COMPANY_STAT 4.91238e-005 Q3 31.711 Q6 0 4 | | 1 1000 TABFNC: SYSIBM TABLE: SCHEMA1 GENROW COMPANY_STAT Q7
[{"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":"a8m500000008PkyAAE","label":"Compiler-\u003EOptimization db2explain db2advis"},{"code":"a8m500000008PmMAAU","label":"Performance-\u003ELocks"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
25 August 2023
UID
swg21591815