例: ステートメントの実行に関連したアクティビティー情報のキャプチャー
実行に長い時間を要しているステートメントを特定する場合は、あるしきい値を定義して、そのしきい値を超えた場合にそのステートメントの実行に関する情報をアクティビティー・イベント・モニターにキャプチャーさせることができます。 その後、ステートメントの実行情報を、アクティビティー・イベント・モニターによって収集された情報と関連付けて、スローダウンの原因となった可能性のある事柄について詳しく理解するのに役立つアクティビティー・メトリックを表示することができます。
始める前に
このタスクについて
以下の例の場合、調査対象の照会は、アプリケーションの一部として実行されています。 照会は以下のとおりです。
SELECT DISTINCT PARTS_BIN FROM STOCK WHERE PART_NUMBER = ?
スローダウンの理由として考えられることの 1 つとして、データ分布が好ましくない場合があります。 例えば、STOCK 表にはほとんどの部品番号に関しては数行しか含まれておらず、特定の 1 つの部品番号については数千行にも及ぶので、この SELECT ステートメントの実行に時間がかかる場合があります。 以下の例は、先行する照会に関連付けられたアクティビティーにより、パラメーター・マーカー (?) に対して処理される実際の値を取得する方法を示しています。
プロシージャー
照会の実行が低下した原因がデータ分布が適切でないためであるという推測をテストするには、該当のステートメントにしきい値を作成できます。 その後、このしきい値とアクティビティー・イベント・モニターを使用して、そのステートメントの実行に関する情報をキャプチャーできます。 この情報から、想定よりも長く実行された照会によって処理された実際の値を判定できます。
変化形: 実行可能 ID を使用しているステートメントに対するしきい値の定義
前述の例では、 ステップ1で閾値が明示的に特定されており、ステートメントの実際のテキストを使用しています。 しきい値を間接的に定義することも可能で、その場合にはパッケージ・キャッシュに含まれるステートメントの実行可能 ID を指定します。 例えば、しきい値を次のように定義できます。
CREATE THRESHOLD TH1
FOR STATEMENT REFERENCE
x'0100000000000000020000000000000000000000020020100304162158584850' ACTIVITIES
ENFORCEMENT DATABASE
WHEN ACTIVITYTOTALTIME > 10 SECONDS
COLLECT ACTIVITY DATA WITH DETAILS, SECTION AND VALUES
CONTINUE;
この例では、STATEMENT REFERENCE というキーワードに続く実行可能 ID を使用して、パッケージ・キャッシュ内で対応するステートメント・テキストを検索しています。 ステートメントの実行可能 ID は、パッケージ・キャッシュを調べることにより判別できます。 パッケージキャッシュに含まれる情報の表示方法の詳細については、ステートメントの実行可能IDなど、 パフォーマンスチューニングの候補となるステートメントを識別するためのパッケージキャッシュ情報の使用を参照してください。パッケージ・キャッシュでその実行可能 ID が検出される場合、パッケージ・キャッシュから関連するステートメント・テキストが取得されて、ステートメントしきい値の定義に使用されます。 静的 SQL セクションのステートメントの場合、実行可能 ID がパッケージ・キャッシュに存在しない場合、そのステートメント・テキストはシステム・カタログから取得されます。 動的 SQL セクションのステートメントの場合、PREPARE ステートメントを使用して、そのステートメント・ストリングから準備済みステートメントを作成することを考慮してください。 実行可能 ID がパッケージ・キャッシュにもシステム・カタログにも見つからない場合は、エラー (SQL4721N) が戻されます。