演習 3: しきい値を使用した不良アクティビティーの制御と、しきい値違反モニターの使用

この演習では、特定のリソースの使用量による制限を確立して、しきい値を使用してリソースの誤用を検出する方法、またはシステムの過負荷を初期のうちに検出する方法について説明します。

時間の見積もり: 15 分から 20 分

しきい値に違反すると、特定のアクションが起動するようにできます。 サポートされるアクションは以下のとおりです。

  • STOP EXECUTION: しきい値に違反する原因となったアクティビティーの処理を停止します。
  • CONTINUE: 処理を続行します。
  • しきい値に違反したアクティビティーに関する情報を収集します。 このアクションは、CONTINUE アクションか STOP EXECUTION アクションと組み合わせて指定できます。

しきい値に違反したアクティビティーが停止するか、それとも実行を続行できるかにかかわらず、しきい値に違反するたびに違反のレコードがアクティブな THRESHOLD VIOLATIONS イベント・モニター (事前に定義されていることが前提) に書き込まれます。 レコードには、違反のあったしきい値、違反の時刻、しきい値アクションなどの情報が含まれます。

この演習では、しきい値を使用して、不良アクティビティーを検出したり、システム上で実行できないようにしたりして、システム・リソースを使い切る方法について説明します。 不良アクティビティーとは、予想外に大量のリソースを使用するアクティビティーのことです。 例えば、異常に長時間実行する照会や、予想外に大きな結果セットを戻す照会があります。

ステップ 1: しきい値違反イベント・モニターの作成

しきい値違反情報のキャプチャーに使用する表書き込みイベント・モニターを作成して使用可能にし、演習 1 で作成したアクティビティー・イベント・モニターを使用可能にします。

CREATE EVENT MONITOR threvio FOR THRESHOLD VIOLATIONS WRITE TO TABLE
          THRESHOLDVIOLATIONS(IN userspace1),
          CONTROL(IN userspace1)

SET EVENT MONITOR threvio STATE 1

SET EVENT MONITOR db2activities STATE 1

ステップ 2: ワークロードの作成

the workth.db2 スクリプトから実行されるすべてのアクティビティーが work1_sc サービス・クラスにマップされるようにワークロードを作成します。

work1_sc サービス・クラスは演習 2 で作成したので既存です。

CREATE WORKLOAD workth_wl
          CURRENT CLIENT_APPLNAME('CLP workth.db2')
          SERVICE CLASS work1_sc

ステップ 3: しきい値の作成

2 つのしきい値を作成します。その 1 つ (th_estcost) は ESTIMATEDSQLCOST のしきい値で、もう 1 つ (th_sqlrows) は SQLROWSRETURNED のしきい値です。アクティビティーを制御するサービス・クラス (この演習では work1_sc サービス・クラス) にこれらの値を適用します。

th_estcost しきい値は、work1_sc サービス・クラス中で実行しているアクティビティーのオプティマイザー見積もりコスト (timeron 単位) の上限 (10000 timeron) を指定します。 見積もりコストが 10000 timeron を超える照会を work1_sc サービス・クラス中で実行しようとすると、このしきい値に違反し、照会を実行できません。

th_sqlrows しきい値は、work1_sc サービス・クラス中で実行しているアクティビティーがデータ・サーバーから最大 30 行を戻せることを指定します。 照会が 30 より多い行を戻そうとすると、このしきい値に違反するので、30 行のみクライアントに戻され、照会は停止します。 さらに、しきい値の違反の原因となったアクティビティーに関するデータが収集されます。

どちらの場合も、アクティビティーがしきい値に違反すると、しきい値違反レコードがステップ 1 の定義どおりに THRESHOLD VIOLATIONS イベント・モニターに書き込まれ、アクティビティーの実行が (STOP EXECUTION アクションのために) 停止します。 アクティビティーをサブミットしたアプリケーションは、SQL4712N エラーを受信します。

CREATE THRESHOLD th_estcost
    FOR SERVICE CLASS work1_sc ACTIVITIES
    ENFORCEMENT DATABASE
    WHEN ESTIMATEDSQLCOST > 10000
    STOP EXECUTION

CREATE THRESHOLD th_sqlrows
    FOR SERVICE CLASS work1_sc ACTIVITIES
    ENFORCEMENT DATABASE
    WHEN SQLROWSRETURNED > 30
    COLLECT ACTIVITY DATA WITH DETAILS AND VALUES
    STOP EXECUTION  

追加情報: しきい値は予測的か反応的かのどちらかになります。

  • 予測的しきい値: 予測的しきい値境界は、アクティビティーが実行を開始する前に検査されます。 予測的しきい値が違反するかどうか検査するために、データ・サーバーは照会コンパイラーから使用量の見積もりを入手します。 この例の場合、th_estcost しきい値が予測的しきい値です。
  • 反応的しきい値: 反応的しきい値境界は、アクティビティーが実行されている間に検査されます。 制御されるリソースの概算の実行時使用量は、反応的しきい値境界を評価するのに使用されます。 実行時使用量の推定量は連続して入手するのではなく、むしろトラッキングされる作業の存続時間中の、選択された定義済みのチェックポイントで入手します。 この例の場合、th_sqlrows が反応的しきい値です。

ステップ 4: 一部のアクティビティーの実行

一部のアクティビティーを実行します。その一部は前述のステップで定義したしきい値の上限に違反します。

db2 -o -tvf workth.db2

前述のステップで定義したしきい値に違反するステートメントが、SQL4712N/SQLSTATE 5U026 のエラーで失敗することに注意してください。

ステップ 5: しきい値違反イベント・モニターの表示

すべてのしきい値違反に関する情報が、THRESHOLD VIOLATIONS イベント・モニターによって収集されます。 以下の例のように、しきい値違反モニター表に対して正規の SQL ステートメントを発行して、しきい値違反情報を照会できます。

CONNECT TO SAMPLE
SELECT  APPL_ID,
       UOW_ID,
       ACTIVITY_ID,
       COORD_PARTITION_NUM AS COORDPART,
       THRESHOLD_PREDICATE,
       THRESHOLD_ACTION,
       TIME_OF_VIOLATION
FROM THRESHOLDVIOLATIONS_THREVIO
ORDER BY THRESHOLD_ACTION, THRESHOLD_PREDICATE, TIME_OF_VIOLATION

出力は、以下のようになります。

APPL_ID                                                          UOW_ID     
ACTIVITY_ID          COORDPART   THRESHOLD_PREDICATE
                                        THRESHOLD_ACTION TIME_OF_VIOLATION
--------------------------------------------------------------------------- ----
---------------- ----------- -------------------------
------------------------------------------------------- ------------------------
--
*LOCAL.DB2.070821150008                                                  11
1           0 EstimatedSQLCost
                                        Stop            2007-08-21-
11.00.11.000000
*LOCAL.DB2.070821150008                                                  10
1           0 SQLRowsReturned
                                       Stop             2007-08-21-
11.00.10.000000

  2 record(s) selected.

ステップ 6: しきい値に違反したアクティビティーに関する情報の表示

COLLECT 節で定義されているしきい値に違反するアクティビティーに関するアクティビティー情報が収集されます。 以下の照会を使用して、しきい値に違反するアクティビティーに関する詳細情報を表示します。

SELECT VARCHAR(A.APPL_NAME, 15) as APPL_NAME,
       VARCHAR(A.TPMON_CLIENT_APP, 20) AS CLIENT_APP_NAME,
       A.ACTIVITY_ID,
       A.ACTIVITY_TYPE,
       A.WORKLOAD_ID,
       T.THRESHOLD_PREDICATE,           
       A.QUERY_CARD_ESTIMATE,
       T.THRESHOLD_MAXVALUE,
       T.TIME_OF_VIOLATION,
       VARCHAR(AS.STMT_TEXT, 100) AS STMT_TEXT
FROM  THRESHOLDVIOLATIONS_THREVIO AS T,
       ACTIVITY_DB2ACTIVITIES AS A,
       ACTIVITYSTMT_DB2ACTIVITIES AS AS       
WHERE T.APPL_ID = A.APPL_ID AND
       T.UOW_ID = A.UOW_ID AND
            T.ACTIVITY_ID = A.ACTIVITY_ID AND
            A.APPL_ID = AS.APPL_ID AND
            A.ACTIVITY_ID = AS.ACTIVITY_ID AND
            A.UOW_ID = AS.UOW_ID

出力は、以下のようになります。

APPL_NAME       CLIENT_APP_NAME      ACTIVITY_ID          ACTIVITY_TYPE
                                           WORKLOAD_ID THRESHOLD_PREDICATE
                                        QUERY_CARD_ESTIMATE  THRESHOLD_MAXVALUE
  TIME_OF_VIOLATION          STMT_TEXT

--------------- -------------------- -------------------- ----------------------
------------------------------------------ ----------- -------------------------
--------------------------------------- -------------------- -------------------
- -------------------------- ---------------------------------------------------
-------------------------------------------------
db2bp           CLP workth.db2                          3 READ_DML
                                                     3 SQLRowsReturned
                                                          41                   3
0 2007-08-31-09.01.16.000000 SELECT * FROM SALES

th_estcost (EstimatedSqlCost) しきい値に違反したアクティビティーが表示されないことに注意してください。 その理由は、このしきい値は COLLECT ACTIVITY DATA 節を指定していないので、このアクティビティーに関するアクティビティー・データが収集されなかったからです。

ステップ 7: 次の演習のためのリセット

使用可能にしたイベント・モニターを使用不可にします。 また、作成した th_estcost しきい値と th_sqlrows しきい値を使用不可にしてドロップします。

SET EVENT MONITOR threvio STATE 0
SET EVENT MONITOR db2activities STATE 0

ALTER THRESHOLD th_estcost DISABLE
DROP THRESHOLD th_estcost

ALTER THRESHOLD th_sqlrows DISABLE
DROP THRESHOLD th_sqlrows

さらに、アクティビティー・イベント・モニター表としきい値違反表をクリーンアップします。

DELETE from ACTIVITY_DB2ACTIVITIES
DELETE from ACTIVITYSTMT_DB2ACTIVITIES
DELETE from THRESHOLDVIOLATIONS_THREVIO

CALL WLM_COLLECT_STATS()