22 SQLテスト・ケース・ビルダーを使用した診断データの収集

SQLテスト・ケース・ビルダーは、異なるデータベース・インスタンス内の問題の再現に必要な情報を自動的に収集するツールです。

SQLテスト・ケースは、パフォーマンスの問題が発生した特定のSQL文の実行計画を開発者が再現できるようにするための一連の情報です。

この章のトピックは、次のとおりです:

22.1 SQLテスト・ケース・ビルダーの目的

SQLテスト・ケース・ビルダーによって、問題に関する情報とその問題が発生した環境に関する情報を収集し再現するプロセスが自動化されます。

ほとんどのSQLコンポーネントでは、再現可能なテスト・ケースを取得することが、迅速に不具合を解決するための最も重要な要因となります。ユーザーにとって最も長く手間のかかるステップでもあります。SQLテスト・ケース・ビルダーの目的は、SQLインシデントに関連する情報をできるだけ多く収集し、Oracleスタッフが別のシステムで問題を再現できるようにパッケージ化することです。

SQLテスト・ケース・ビルダーの出力は、事前に定義されたディレクトリに集められたスクリプトです。これらのスクリプトには、別のデータベース・インスタンスでの必要なすべてのオブジェクトと環境の再作成に必要なコマンドが含まれています。テスト・ケースの準備が整ったら、そのディレクトリのZIPファイルを作成して別のデータベースに移動するか、またはそのファイルをOracleサポートにアップロードできます。

22.2 SQLテスト・ケース・ビルダーの概念

SQLテスト・ケース・ビルダーの主な概念には、SQLインシデント、記録される情報のタイプおよび出力の形式が含まれます。

この項では、次の項目について説明します。

22.2.1 SQLインシデント

Oracle Databaseの障害診断インフラストラクチャでは、インシデントは1つの問題の1回の発生を表します。

SQLインシデントはSQL関連の問題です。問題(クリティカル・エラー)が複数回発生したとき、それぞれの発生に対してインシデントが作成されます。インシデントには日時が記録され、自動診断リポジトリ(ADR)で追跡されます。各インシデントには、ADR内で一意である数値のインシデントIDがあります。

SQLテスト・ケース・ビルダーには、コマンドラインで常時アクセスできます。Oracle Enterprise Manager Cloud Control(Cloud Control)では、SQLテスト・ケース・ページは、SQLインシデントが見つかった場合にのみ利用できます。

関連項目:

22.2.2 SQLテスト・ケース・ビルダーで取得される情報

SQLテスト・ケース・ビルダーは、SQL問合せおよびその環境に関する永続的な情報を取得します。

この情報には、実行中の問合せ、表と索引の定義(実際のデータではありません)、PL/SQLパッケージおよびプログラム・ユニット、オプティマイザ統計、SQL計画ベースライン、初期化パラメータの設定などがあります。Oracle Database 12cから、文の実行の一部としてのみ使用できる情報など、一時情報の取得や再現もSQLテスト・ケース・ビルダーで行われるようになりました。

SQLテスト・ケース・ビルダーでは、次のものがサポートされています。

  • 適応計画

    SQLテスト・ケース・ビルダーは、適応計画に関して行われた決定への入力を取得し、各決定の時点でそれらを再現します。適応計画の場合、最終プランの決定には、各バッファ統計コレクタの最終統計値で十分です。

  • 自動メモリー管理

    データベースは、各SQL操作で要求されたメモリーを自動的に処理します。ソートなどのアクションは、パフォーマンスに重大な影響を及ぼす可能性があります。SQLテスト・ケース・ビルダーでは、データベースで割り当てられたメモリーの場所とその割当て量などのメモリー・アクティビティが記録されています。

  • 動的統計

    異なるデータベース上の動的統計の再収集では、必ずしも同じ結果(データの消失時間など)が生成されるわけではありません。問題を再現するには、SQLテスト・ケース・ビルダーでソース・データベースから動的統計の結果をエクスポートします。テスト・データベースでは、SQLテスト・ケース・ビルダーによって、動的統計を再収集するのではなくソース・データベースから取得した同じ値を再利用します。

  • 複数の実行のサポート

    SQLテスト・ケース・ビルダーでは、問合せの複数の実行の間に累積された動的情報を取得できます。この機能は自動再最適化において重要です。

  • コンパイル環境およびバインド値の再現

    コンパイル環境設定は、問合せ最適化コンテキストの重要な一部です。ソース・データベースで問題の問合せが実行された際には、ユーザーが変更したデフォルトではない設定がSQLテスト・ケース・ビルダーで取得されます。デフォルトではないパラメータ値が使用されている場合、SQLテスト・ケース・ビルダーは、問合せを実行する前に、その同じ値を再構築します。

  • オブジェクトの統計履歴

    オブジェクトの統計履歴は、統計値の変更によって計画に変更が生じたかどうかを確認する場合に役に立ちます。DBMS_STATSは、履歴をデータ・ディクショナリ内に格納します。SQLテスト・ケース・ビルダーは、エクスポートの間にこの統計データをステージング表に格納します。インポートの間には、SQLテスト・ケース・ビルダーによって、統計履歴のデータがステージング表からターゲット・データベースに自動的にリロードされます。

  • 文の履歴

    文の履歴は、適応カーソル共有、静的フィードバックおよびカーソル共有の不具合に関する問題の診断の際に重要です。この履歴には、実行計画とコンパイル統計および実行統計が含まれます。

22.2.3 SQLテスト・ケース・ビルダーの出力

SQLテスト・ケース・ビルダーの出力は、環境と必要なすべてのオブジェクトの再作成に必要なコマンドが格納された一連のファイルです。

デフォルトでは、SQLテスト・ケース・ビルダーで次の場所にファイルを格納します。ここでのincnumはインシデント番号を指し、runnumは実行番号を指します。

$ADR_HOME/incident/incdir_incnum/SQLTCB_runnum

たとえば、有効な出力ファイル名は次のようになります。

$ORACLE_HOME/log/diag/rdbms/dbsa/dbsa/incident/incdir_2657/SQLTCB_1

デフォルトではない場所を指定するには、次の例のように、Oracleディレクトリを作成してDBMS_SQLDIAG.EXPORT_SQL_TESTCASEを呼び出します。

CREATE OR REPLACE DIRECTORY my_tcb_dir_exp '/tmp';
 
BEGIN 
  DBMS_SQLDIAG.EXPORT_SQL_TESTCASE (
    directory => 'my_tcb_dir_exp'
,   sql_text  => 'SELECT COUNT(*) FROM sales'
,   testcase  => tco
);
END;

関連項目:

ADRリポジトリの構造について学習するには、Oracle Database管理者ガイドを参照してください

22.3 SQLテスト・ケース・ビルダーのユーザー・インタフェース

SQLテスト・ケース・ビルダーにアクセスするには、Cloud Controlを使用するか、コマンドラインでPL/SQLを使用します。

この項では、次の項目について説明します。

22.3.1 SQLテスト・ケース・ビルダーのグラフィカル・インタフェース

Cloud Control内では、インシデント・マネージャ・ページまたはサポート・ワークベンチ・ページからSQLテスト・ケース・ビルダーにアクセスできます。

この項では、次の項目について説明します。

22.3.1.1 インシデント・マネージャへのアクセス

データベース・ホーム・ページの「インシデントと問題」セクションから、インシデント・マネージャに移動できます。

インシデント・マネージャにアクセスするには:

  1. 適切な資格証明を使用してCloud Controlにログインします。

  2. 「ターゲット」メニューの下で、「データベース」を選択します。

  3. データベース・ターゲットのリストで、管理対象のOracle Databaseインスタンスのターゲットを選択します。

  4. データベースの資格証明の入力を求められた場合は、実行するタスクに必要な最小限の資格証明を入力します。

  5. インシデントと問題セクションで、調査するSQLインシデントを特定します。

    次の例のように、ORA 600エラーはSQLインシデントです。

  6. インシデントの概要をクリックします。

    「インシデント・マネージャ」の「問題の詳細」ページが表示されます。

    表にリストされたインシデントを含む「サポート・ワークベンチ」ページが表示されます。

関連項目:

  • Cloud Controlのサポート・ワークベンチを使用して問題を表示する方法を学習するには、『Oracle Database管理者ガイド』を参照してください。

  • Cloud Controlのオンライン・ヘルプを参照してください。

22.3.1.2 サポート・ワークベンチへのアクセス

「Oracleデータベース」メニューから、サポート・ワークベンチに移動できます。

サポート・ワークベンチにアクセスするには:

  1. 適切な資格証明を使用してCloud Controlにログインします。

  2. 「ターゲット」メニューの下で、「データベース」を選択します。

  3. データベース・ターゲットのリストで、管理対象のOracle Databaseインスタンスのターゲットを選択します。

  4. データベースの資格証明の入力を求められた場合は、実行するタスクに必要な最小限の資格証明を入力します。

  5. 「Oracle Database」メニューから、「診断」「サポート・ワークベンチ」を選択します。

    表にリストされたインシデントを含む「サポート・ワークベンチ」ページが表示されます。

関連項目:

Cloud Controlのオンライン・ヘルプを参照してください。

22.3.2 SQLテスト・ケース・ビルダーのコマンドライン・インタフェース

DBMS_SQLDIAGパッケージは、SQLテスト・ケース・ビルダーに関連するタスクを実行します。

このパッケージは、SQLテスト・ケース・ビルダー用の様々なサブプログラムで構成されます。次の表にその一部を示します。

表22-1 DBMS_SQLDIAGのSQLテスト・ケース・ファンクション

プロシージャ 説明

EXPORT_SQL_TESTCASE

SQLテスト・ケースをユーザー指定のディレクトリにエクスポートします。

EXPORT_SQL_TESTCASE_DIR_BY_INC

引数として渡されたインシデントIDに対応するSQLテスト・ケースをエクスポートします。

EXPORT_SQL_TESTCASE_DIR_BY_TXT

引数として渡されたSQLテキストに対応するSQLテスト・ケースをエクスポートします。

IMPORT_SQL_TESTCASE

SQLテスト・ケースをスキーマにインポートします。

関連項目:

DBMS_SQLDIAGパッケージについてさらに学習するには、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください

22.4 SQLテスト・ケース・ビルダーの実行

Cloud Controlを使用してSQLテスト・ケース・ビルダーを実行できます。

前提条件

このチュートリアルでは、次のことが前提となっています。

  • 内部エラーが発生する次のEXPLAIN PLAN文をユーザーshとして実行します。

    EXPLAIN PLAN FOR
      SELECT unit_cost, sold
      FROM   costs c,
             ( SELECT /*+ merge */ p.prod_id, SUM(quantity_sold) AS sold
               FROM   products p, sales s
               WHERE  p.prod_id = s.prod_id
               GROUP BY p.prod_id ) v
      WHERE  c.prod_id = v.prod_id;
    
  • データベース・ホーム・ページのインシデントと問題セクションに、内部エラーによって生成されるSQLインシデントが表示されます。

  • 「インシデント・マネージャへのアクセス」の説明に従って、「インシデントの詳細」ページにアクセスします。

SQLテスト・ケース・ビルダーを実行するには:

  1. 「インシデント」タブをクリックします。

    問題の詳細ページが表示されます。

  2. インシデントの概要をクリックします。

    インシデントの詳細ページが表示されます。

  3. 「ガイドされた解決」で、「診断データの表示」をクリックします。

    「インシデントの詳細: incident_number」ページが表示されます。

  4. 「アプリケーション情報」セクションで、「追加の診断」をクリックします。

    「追加の診断」サブページが表示されます。

  5. 「SQLテスト・ケース・ビルダー」を選択して、「実行」をクリックします。

    「ユーザー処理を実行」ページが表示されます。

  6. サンプリング割合を選択し(オプション)、「送信」をクリックします。

    処理が完了すると、「確認」ページが表示されます。

  7. 「SQLテスト・ケース・ビルダーの出力」に説明されている場所にあるSQLテスト・ケース・ファイルにアクセスします。

関連項目:

Cloud Controlのオンライン・ヘルプを参照してください。