演習 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()