専用Exadataインフラストラクチャ上のAutonomous AI DatabaseでのSQLトレースの使用

Autonomous AI Database on Dedicated Exadata InfrastructureでSQLトレースを使用すると、アプリケーションの高負荷SQL文など、過剰なデータベース・ワークロードのソースを識別するのに役立ちます。

SQLトレースについて

アプリケーション操作に予想より時間がかかる場合、解析、実行およびフェッチ・フェーズでそのSQL文に費やされた時間などの詳細とともに、この操作の一部として実行されたすべてのSQL文のトレースを取得すると、パフォーマンスの問題の原因を特定して解決するのに役立ちます。これを実現するには、Autonomous AI DatabaseでSQLトレースを使用できます。

Autonomous AI Databaseでは、SQLトレースはデフォルトで無効になっています。SQLトレース・データの収集を開始するには、これを有効にする必要があります。SQL文をトレースするには、ADMINユーザーとして次のタスクを実装します。

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

Autonomous AI Database for SQLトレースを構成するには、次を実行します:

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

    SQLトレース・ファイルを保存するには、Autonomous AI Databaseがサポートする任意のクラウド・オブジェクト・ストアにバケットを配置します。たとえば、Oracle Cloud Infrastructure Object Storageにバケットを作成するには、バケットの作成を参照してください。

    ヒント: SQLトレース・ファイルは標準ストレージ層で作成されたバケットでのみサポートされるため、Oracle Cloud Infrastructure Object Storageでバケットを作成する場合は、「標準」ストレージ層として選択してください。標準オブジェクト・ストレージ層の詳細は、ストレージ層の理解を参照してください。

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

    たとえば:

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

    usernameおよびpasswordのパラメータの引数の詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。

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

    1. データベース・プロパティDEFAULT_LOGGING_BUCKETを設定して、クラウド・オブジェクト・ストレージのロギング・バケットを指定します。

      たとえば、Oracle Cloud Infrastructure (OCI) 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はOCIオブジェクト・ストレージ・ネームスペース、bucket_nameは以前に作成したバケットの名前です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

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

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

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

      たとえば:

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

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

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

ノート: 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トレースの設定時に構成したバケット内のトレース・ファイルに書き込まれます。

SQLトレースの無効化

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

  1. SQLトレース機能を無効にします。

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

    たとえば:

     ALTER DATABASE PROPERTY SET DEFAULT_LOGGING_BUCKET = '';
    

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

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

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

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

default_logging_bucket/sqltrace/clientID/moduleName/sqltrace_numID1_numID2.trc

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

たとえば、クライアント識別子を"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 19c SQLチューニング・ガイドエンドツーエンド・アプリケーションのトレースのツールまたはOracle Database 26ai SQLチューニング・ガイドを参照してください。

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

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

データベース・セッション中に、SQLトレース・データをSESSION_CLOUD_TRACEビューで表示できます。SESSION_CLOUD_TRACEビューには、ROW_NUMBERTRACEの2つの列があります。

DESC SESSION_CLOUD_TRACE

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

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

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

たとえば:

SELECT trace FROM SESSION_CLOUD_TRACE ORDERBY row_number;

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

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