Autonomous DatabaseでのSQLトレースの実行

SQLトレースを使用すると、アプリケーション内の負荷の高いSQL文など、過剰なデータベース・ワークロードのソースを識別しやすくなります。

Autonomous DatabaseでのSQLトレースの構成

Autonomous DatabaseでSQLトレースを構成するステップを示します。

ノート

SQLトレースを有効にすると、トレース収集が有効になっている間にセッションのアプリケーション・パフォーマンスが低下する可能性があります。トレース・データの収集および保存のオーバーヘッドにより、この悪影響が予想されます。

SQLトレース用にデータベースを構成するには、次の手順を実行します。

  1. トレース・ファイルをクラウド・オブジェクト・ストレージに格納するバケットを作成します。

    SQLトレース・ファイルを保存するために、バケットをAutonomous Databaseでサポートされている任意のクラウド・オブジェクト・ストアに配置できます。

    たとえば、Oracle Cloud Infrastructure Object Storageでバケットを作成するには、次を実行します

    1. Oracle Cloud Infrastructure Consoleを開きます。
    2. メニューから「記憶域」を選択します。
    3. 「ストレージ」で、「オブジェクト・ストレージおよびアーカイブ・ストレージ」を選択します。
    4. 「バケットの作成」をクリックします。
    5. 「バケットの作成」ページで、「バケット名」を入力し、「作成」をクリックします。

    Oracle Cloud Infrastructure Object Storageを使用している場合、SQLトレース・ファイルは、標準ストレージ層で作成されたバケットでのみサポートされていることに注意してください。バケットの作成時に、ストレージ層として「標準」を選択してください。標準オブジェクト・ストレージ層については、オブジェクト・ストレージの概要を参照してください

  2. DBMS_CLOUD.CREATE_CREDENTIALを使用して、クラウド・オブジェクト・ストレージ・アカウントの資格証明を作成します。

    たとえば:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com', 
        password => 'password'
    );
    END;
    /

    Oracle Cloud Infrastructureの場合、usernameはOracle Cloud Infrastructureのユーザー名です。passwordはOracle Cloud Infrastructureの認証トークンです。詳細は、認証トークンの操作を参照してください。

    クラウド・オブジェクト・ストレージに応じたパラメータとその値の詳細は、CREATE_CREDENTIALプロシージャを参照してください。

  3. 初期化パラメータを設定して、SQLトレース・ファイルのバケットのクラウド・オブジェクト・ストレージURLを指定し、クラウド・オブジェクト・ストレージにアクセスするための資格証明を指定します。
    1. データベース・プロパティDEFAULT_LOGGING_BUCKETを設定して、クラウド・オブジェクト・ストレージのロギング・バケットを指定します。

      たとえば、Oracle Cloud Infrastructure Object Storageを使用してバケットを作成する場合、次のようにします。

      SET DEFINE OFF;
      ALTER DATABASE PROPERTY SET 
         DEFAULT_LOGGING_BUCKET = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucket_name/o/';

      namespace-stringはOracle Cloud Infrastructure Object Storageネームスペースで、bucket_nameは以前に作成したバケットの名前です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

      リージョンのリストは、「リージョンおよび可用性ドメイン」を参照してください。

      SQLトレース・ファイルに使用するクラウド・オブジェクト・ストアは、Autonomous Databaseでサポートされている任意のクラウド・オブジェクト・ストアにできます。

    2. データベース・プロパティDEFAULT_CREDENTIALを、ステップ2で作成した資格証明に設定します。

      資格証明にスキーマ名を含める必要があります。この例では、スキーマは"ADMIN"です。

      たとえば:

      ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.DEF_CRED_NAME';

Autonomous DatabaseでのSQLトレースの有効化

データベース・セッションのSQLトレースを有効にするステップを示します。

ノート

SQLトレースを有効にすると、トレース収集が有効になっている間にセッションのアプリケーション・パフォーマンスが低下する可能性があります。トレース・データの収集および保存のオーバーヘッドにより、この悪影響が予想されます。

SQLトレースを有効にする前に、SQLトレース・ファイルを保存するようにデータベースを構成する必要があります。詳細は、Autonomous DatabaseでのSQLトレースの構成を参照してください。

SQLトレースを有効にするには、次の手順を実行します。

  1. (オプション)アプリケーションのクライアント識別子を設定します。このステップは省略可能ですが、実行することをお薦めします。SQLトレースでは、トレース・ファイルがクラウド・オブジェクト・ストアに書き込まれるときに、トレース・ファイル名のコンポーネントとしてクライアント識別子が使用されます。

    たとえば:

    BEGIN
      DBMS_SESSION.SET_IDENTIFIER('sqlt_test');
    END;
    /
  2. (オプション)アプリケーションのモジュール名を設定します。このステップは省略可能ですが、実行することをお薦めします。SQLトレースでは、トレース・ファイルがクラウド・オブジェクト・ストアに書き込まれるときに、トレース・ファイル名のコンポーネントとしてモジュール名が使用されます。

    たとえば:

    BEGIN
      DBMS_APPLICATION_INFO.SET_MODULE('modname', null);
    END;
    /
  3. SQLトレース機能を有効化します。
    ALTER SESSION SET SQL_TRACE = TRUE;
  4. ワークロードを実行します。

    このステップでは、アプリケーション全体またはアプリケーションの特定の部分を実行します。データベース・セッションでワークロードを実行すると、SQLトレース・データが収集されます。

  5. SQLトレースを無効にします。

    SQLトレースを無効にすると、セッションの収集されたデータがセッション内の表と、SQLトレースの設定時に構成するバケット内のトレース・ファイルに書き込まれます。詳細は、Autonomous DatabaseでのSQLトレースの無効化を参照してください。

Autonomous DatabaseでのSQLトレースの無効化

Autonomous DatabaseでSQLトレースを無効にするステップを示します。

SQLトレースを無効にするには、次の手順を実行します。

  1. SQLトレース機能を無効にします。
    ALTER SESSION SET SQL_TRACE = FALSE;
  2. (オプション)ご使用の環境で必要に応じて、データベース・プロパティDEFAULT_LOGGING_BUCKETをリセットして、クラウド・オブジェクト・ストレージのロギング・バケットの値をクリアできます。

    たとえば:

    ALTER DATABASE PROPERTY SET DEFAULT_LOGGING_BUCKET = '';

SQLトレースを無効にすると、トレースを有効にしてセッションの実行中に収集されたトレース・データが表にコピーされ、クラウド・オブジェクト・ストアのトレース・ファイルに送信されます。トレース・データを表示するには、次の2つのオプションがあります。

Autonomous Database上のクラウド・オブジェクト・ストアに保存されたトレース・ファイルの表示

SQLトレース・ファイルの出力ファイル・ネーミングについて説明し、TKPROFを使用してトレース・ファイル・データを編成および表示するコマンドを示します。

SQLトレース・ファイル・データを使用して、Autonomous Databaseでのアプリケーション・パフォーマンスを分析します。データベース・セッションでSQLトレースを無効にすると、DEFAULT_LOGGING_BUCKETで構成されたクラウド・オブジェクト・ストア・バケットにデータが書き込まれます。

SQLトレース機能は、セッションで収集されたトレース・データを次の形式でクラウド・オブジェクト・ストアに書き込みます。

default_logging_bucket/sqltrace/clientID/moduleName/sqltrace_numID1_numID2.trc

ファイル名のコンポーネントは次のとおりです。

  • default_logging_bucket: DEFAULT_LOGGING_BUCKETデータベース・プロパティの値です。詳細は、Autonomous DatabaseでのSQLトレースの構成を参照してください。

  • clientID: クライアント識別子です。詳細は、Autonomous DatabaseでのSQLトレースの有効化を参照してください。

  • moduleName: モジュール名です。詳細は、Autonomous DatabaseでのSQLトレースの有効化を参照してください。

  • numID1_numID2: SQLトレース機能が提供する2つの識別子です。numID1およびnumID2の数値は、クラウド・オブジェクト・ストレージ内の同じバケットにトレース・ファイルを作成してトレース・ファイルを作成することで、各トレース・ファイル名を他のセッションと一意に区別します。

    データベース・サービスがパラレル化をサポートし、セッションがパラレル問合せを実行する場合、SQLトレース機能は、異なるnumID1およびnumID2値を持つ複数のトレース・ファイルを生成できます。

ノート

SQLトレースを同じセッション内で複数回有効化および無効化すると、各トレース反復によってクラウド・オブジェクト・ストアに個別のトレース・ファイルが生成されます。セッションで生成された以前のトレースの上書きを回避するために、その後生成されたファイルは同じ命名規則に従い、トレース・ファイル名に数値の接尾辞を追加します。この数値の接尾辞は番号1で始まり、その後のトレースの反復ごとに1ずつ増分されます。

たとえば、クライアント識別子を"sql_test"に設定し、モジュール名を"modname"に設定すると、生成されたトレース・ファイル名の例を次に示します。

sqltrace/sqlt_test/modname/sqltrace_5415_56432.trc

TKPROFを実行して、トレース・ファイルを読取り可能な出力ファイルに変換できます。

  1. トレース・ファイルをオブジェクト・ストアからローカル・システムにコピーします。
  2. トレース・ファイルの保存先ディレクトリに移動します。
  3. 次の構文を使用して、オペレーティング・システムのプロンプトからTKPROFユーティリティを実行します。
    tkprof filename1 filename2 [waits=yes|no] [sort=option] [print=n]
        [aggregate=yes|no] [insert=filename3] [sys=yes|no] [table=schema.table]
        [explain=user/password] [record=filename4] [width=n]
    

    必要な引数は、入力ファイルと出力ファイルのみです。

  4. オンライン・ヘルプを表示するには、引数なしでTKPROFを起動します。

TKPROFユーティリティの使用の詳細は、Oracle Database SQLチューニング・ガイドの「エンドツーエンド・アプリケーションのトレースのためのツール」を参照してください。

Autonomous DatabaseでのSESSION_CLOUD_TRACEビューのトレース・データの表示

SQLトレースを有効にすると、トレースが有効なセッションのSESSION_CLOUD_TRACEビューで、クラウド・オブジェクト・ストア上のトレース・ファイルに保存されたものと同じトレース情報を使用できます。

データベース・セッションにいる間は、SESSION_CLOUD_TRACEビューでSQLトレース・データを表示できます。SESSION_CLOUD_TRACEビューには、ROW_NUMBERTRACEの2つの列が含まれています。

DESC SESSION_CLOUD_TRACE

Name       Null? Type
---------- ----- ------------------------------
ROW_NUMBER       NUMBER
TRACE            VARCHAR2(32767)

ROW_NUMBERは、TRACE列にあるトレース・データの順序を指定します。トレース・ファイルに書き込まれたトレース出力の各行は、表内の1行になり、TRACE列で使用できます。

セッションのSQLトレースを無効にした後、SESSION_CLOUD_TRACEビューで問合せを実行できます。

たとえば:

SELECT trace FROM SESSION_CLOUD_TRACE ORDER BY row_number;

SESSION_CLOUD_TRACEのデータは、セッションの間保持されます。ログアウトまたはセッションを閉じると、データは使用できなくなります。

SQLトレースが同一セッション内で複数回有効化および無効化されている場合、SESSION_CLOUD_TRACEはすべての反復のトレース・データを累積的に表示します。したがって、以前にトレースを無効にした後、セッションでトレースを再度有効にしても、以前の反復によって生成されたトレース・データは削除されません。