IBM Support

[Db2] 参照していない表にロックがかかる

Question & Answer


Question

SQL を実行したところ、SQL で参照していない表に対してロックが取得されていました。なぜですか。

Answer

SQL で直接参照している表以外にも、視点・ユーザー定義関数・トリガーなどを経由して間接的に参照している表に対してロックが取得されることがあります。
Explain 機能により SQL のアクセス・プランを取得すると、参照される表を確認できます。ただし、ユーザー定義関数については SQL 言語ルーチンに限ります。

トリガーを定義した例:
  1. 従業員表 (EMP1) に新しく行を追加したとき、会社状況表 (COMPANY_STAT) の従業員数列 (NEMP) の値を +1 するトリガーを定義します。
    db2 "CREATE TRIGGER NEW_HIRED AFTER INSERT ON EMP1 FOR EACH ROW
    UPDATE COMPANY_STAT SET NEMP = NEMP + 1"
  2. 以下の SQL を実行して従業員表 (EMP1) に新規の行を挿入します。
    db2 "INSERT INTO EMP1 VALUES('0021','Ito Hirofumi')"
  3. このときのアクセスプランを取得すると、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
関連情報
[Db2] SQL の実行計画 (Explain) を取得する方法
 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"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"}]

Document Information

Modified date:
25 August 2023

UID

swg21591815