表に影響を及ぼすステートメントの識別

使用リストを使用して、DML ステートメント・セクションの実行時に特定の表に影響を及ぼすステートメント・セクションを識別します。各ステートメントの統計を表示し、それらの統計を使用してさらにモニタリングや調整が必要となる箇所を判別できます。

始める前に

次のタスクを実行します。

  • オブジェクトの使用統計を表示する対象となる表を識別します。 MON_GET_TABLE 表関数を使用すると、1 つ以上の表のモニター・メトリックを表示できます。
  • 必要なステートメントを実行するために、各ステートメントの許可 ID によって保持されている特権として DBADM 権限または SQLADM 権限が含まれていることを確認します。
  • MON_GET_TABLE_USAGE_LIST 表関数または MON_GET_USAGE_LIST_STATUS 表関数に関する EXECUTE 特権があることを確かめます。

このタスクについて

MON_GET_TABLE 表関数の出力を表示すると、モニター・エレメントに異常値がある場合があります。使用リストを使用して、いずれかの DML ステートメントがその値に関係しているかどうかを判別できます。

使用リストには、特定の時間フレームにおいて表に影響を及ぼしたそれぞれのステートメントに関する、ロックやバッファー・プールの使用などの要因についての統計が含まれています。特定のステートメントが表に悪影響を与えていると判断する場合、こうした統計を使用して、さらにモニタリングが必要な箇所や、ステートメントの調整方法を判別します。

手順

表に影響を及ぼすステートメントを識別するには、以下のようにします。

  1. 以下のコマンドを発行して、mon_obj_metrics 構成パラメーターを EXTENDED に設定します。
    Db2 UPDATE DATABASE CONFIGURATION USING MON_OBJ_METRICS EXTENDED

    この構成パラメーターを EXTENDED に設定すると、使用リスト内の項目ごとに統計が収集されるようになります。

  2. CREATE USAGE LIST ステートメントを使用して、表の使用リストを作成します。
    例えば、SALES.INVENTORY 表の INVENTORYUL 使用リストを作成する場合、次のコマンドを発行します。
    CREATE USAGE LIST INVENTORYUL FOR TABLE SALES.INVENTORY
  3. SET USAGE LIST STATE ステートメントを使用して、オブジェクト使用統計の収集をアクティブにします。
    例えば、INVENTORYUL 使用リストの収集をアクティブにする場合、次のコマンドを発行します。
    SET USAGE LIST INVENTORYUL STATE = ACTIVE
  4. オブジェクト統計の収集中に、MON_GET_USAGE_LIST_STATUS 表関数を使用して、使用リストの状態がアクティブで、使用リストに割り振られているメモリー量が十分であることを確認します。
    例えば、INVENTORYUL 使用リストの状況を確認する場合、次のコマンドを発行します。
    SELECT MEMBER,
           STATE,
           LIST_SIZE,
           USED_ENTRIES,
           WRAPPED
    FROM TABLE(MON_GET_USAGE_LIST_STATUS('SALES', 'INVENTORYUL', -2))
  5. オブジェクト使用統計を収集する期間が経過したら、SET USAGE LIST STATE ステートメントを使用して、使用リストのデータ収集を非アクティブにします。
    例えば、INVENTORYUL 使用リストの収集を非アクティブにする場合、次のコマンドを発行します。
    SET USAGE LIST SALES.INVENTORYUL STATE = INACTIVE
  6. MON_GET_TABLE_USAGE_LIST 関数を使用して収集された情報を表示します。
    統計を収集した期間中に表に影響を及ぼしたステートメントの一部またはそのすべての統計を表示できます。
    例えば、表から読み取った行の数が多い上位 10 個のステートメントだけを表示する場合、以下のコマンドを発行します。
    SELECT MEMBER,
           EXECUTABLE_ID,
           NUM_REFERENCES,
           NUM_REF_WITH_METRICS,
           ROWS_READ,
           ROWS_INSERTED,
           ROWS_UPDATED,
           ROWS_DELETED
    FROM TABLE(MON_GET_TABLE_USAGE_LIST('SALES', 'INVENTORYUL', -2))
    ORDER BY ROWS_READ DESC
    FETCH FIRST 10 ROWS ONLY
  7. 表に影響を及ぼしたステートメントのテキストを表示する場合、MON_GET_TABLE_USAGE_LIST 出力の executable_id エレメントの値を MON_GET_PKG_CACHE_STMT 表関数の入力として使用します。
    例えば、次のコマンドを発行して、特定のステートメントのテキストを表示します。

    SELECT STMT_TEXT
    FROM TABLE
    (MON_GET_PKG_CACHE_STMT(NULL, x'01000000000000007C0000000000000000000000020020081126171720728997', NULL, -2))

  8. ステートメントのリストと、それらのステートメント用に提供されている統計を使用して、追加のモニタリングや調整が必要な場合にはその箇所を判別します。
    例えば、pool_writes モニター・エレメントの値が direct_writes モニター・エレメント値と比較して低いステートメントには、注意が必要なバッファー・プールの問題がある可能性があります。

次のタスク

使用リストの情報が不要な場合には、SET USAGE LIST STATE ステートメントを使用して使用リストに関連するメモリーを解放します。例えば、INVENTORYUL 使用リストに関連するメモリーを解放するには、次のコマンドを発行します。
SET USAGE LIST SALES.INVENTORYUL STATE = RELEASED