専用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ユーザーとして次のタスクを実装します。
-
SQLトレース・ファイルを保存するためのデータベースの構成から開始します。詳細は、Autonomous AI DatabaseでのSQLトレースの構成を参照してください。
-
次に、SQLトレースを有効にします。Autonomous AI DatabaseでのSQLトレースの有効化を参照してください。
ノート: SQLトレースを有効にすると、トレース収集が有効になっている間、セッションのアプリケーションのパフォーマンスが低下する可能性があります。トレース・データの収集および保存のオーバーヘッドにより、このパフォーマンスへの影響が予想されます。
-
SQLトレース・データの収集を停止するには、SQLトレースを無効にする必要があります。SQLトレースの無効化を参照してください。
-
SQLトレースを無効にすると、トレースを有効にしてセッションの実行中に収集されたトレース・データが、セッション内の
SESSION_CLOUD_TRACEビューおよびバケット内のトレース・ファイルに書き込まれます。このファイルは、SQLトレースの設定時に構成します。トレース・データを表示するには、次の2つのオプションがあります。-
クラウド・オブジェクト・ストアに保存されたトレース・ファイル内のSQLトレース・データを表示および分析します。詳細は、Autonomous AI Database上のクラウド・オブジェクト・ストアに保存されたトレース・ファイルの表示を参照してください。
-
ビュー
SESSION_CLOUD_TRACEに保存されたSQLトレース・データを表示および分析します。詳細は、Autonomous AI DatabaseでのSESSION_CLOUD_TRACEビューのトレース・データの表示を参照してください。
-
Autonomous AI DatabaseでのSQLトレースの構成
Autonomous AI Database for SQLトレースを構成するには、次を実行します:
-
トレース・ファイルをクラウド・オブジェクト・ストレージに格納するバケットを作成します。
SQLトレース・ファイルを保存するには、Autonomous AI Databaseがサポートする任意のクラウド・オブジェクト・ストアにバケットを配置します。たとえば、Oracle Cloud Infrastructure Object Storageにバケットを作成するには、バケットの作成を参照してください。
ヒント: SQLトレース・ファイルは標準ストレージ層で作成されたバケットでのみサポートされるため、Oracle Cloud Infrastructure Object Storageでバケットを作成する場合は、「標準」をストレージ層として選択してください。標準オブジェクト・ストレージ層の詳細は、ストレージ層の理解を参照してください。
-
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プロシージャ」を参照してください。 -
初期化パラメータを設定して、SQLトレース・ファイルのバケットのクラウド・オブジェクト・ストレージURLを指定し、クラウド・オブジェクト・ストレージにアクセスするための資格証明を指定します。
-
データベース・プロパティ
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がサポートする任意のクラウド・オブジェクト・ストアにできます。
-
データベース・プロパティ
DEFAULT_CREDENTIALを、ステップ2で作成した資格証明に設定します。たとえば:
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.DEF_CRED_NAME';資格証明にスキーマ名を含める必要があります。この例では、スキーマは
ADMINです。
-
Autonomous AI DatabaseでのSQLトレースの有効化
ノート: SQLトレースを有効にすると、トレース収集が有効になっている間、セッションのアプリケーションのパフォーマンスが低下する可能性があります。トレース・データの収集および保存のオーバーヘッドにより、このパフォーマンスへの影響が予想されます。
データベース・セッションのSQLトレースを有効にするには、次の手順を実行します。
-
オプションで、アプリケーションのクライアント識別子を設定します。このステップは省略可能ですが、実行することをお薦めします。SQLトレースでは、トレース・ファイルがクラウド・オブジェクト・ストアに書き込まれるときに、クライアント識別子がトレース・ファイル名のコンポーネントとして使用されます。
たとえば:
BEGIN DBMS_SESSION.SET_IDENTIFIER('sqlt_test'); END; / -
オプションで、アプリケーションのモジュール名を設定します。このステップは省略可能ですが、実行することをお薦めします。SQLトレースでは、トレース・ファイルがクラウド・オブジェクト・ストアに書き込まれるときに、トレース・ファイル名のコンポーネントとしてモジュール名が使用されます。
たとえば:
BEGIN DBMS_APPLICATION_INFO.SET_MODULE('modname', null); END; / -
SQLトレース機能を有効にします。
ALTER SESSION SET SQL_TRACE = TRUE; -
ワークロードを実行します。
このステップでは、アプリケーション全体またはアプリケーションの特定の部分を実行します。データベース・セッションでワークロードを実行すると、SQLトレース・データが収集されます。
-
SQLトレースを無効にします。
SQLトレースを無効にすると、セッション用に収集されたデータが、セッション内の表およびSQLトレースの設定時に構成したバケット内のトレース・ファイルに書き込まれます。
SQLトレースの無効化
SQLトレースを無効にするには、次の手順を実行します。
-
SQLトレース機能を無効にします。
ALTER SESSION SET SQL_TRACE = FALSE; -
必要に応じて、環境に応じて、データベース・プロパティ
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
ファイル名のコンポーネントは次のとおりです。
-
default_logging_bucket:
DEFAULT_LOGGING_BUCKETデータベース・プロパティの値。詳細は、Autonomous AI DatabaseでのSQLトレースの構成を参照してください。 -
clientID: クライアント識別子です。詳細は、Autonomous AI DatabaseでのSQLトレースの有効化を参照してください。 -
moduleName: モジュール名です。詳細は、Autonomous AI 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を実行して、トレース・ファイルを読取り可能な出力ファイルに変換できます。
-
トレース・ファイルをオブジェクト・ストアからローカル・システムにコピーします。
-
トレース・ファイルが保存されているディレクトリに移動します。
-
次の構文を使用して、オペレーティング・システムのプロンプトで
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]必要な引数は、入力ファイルと出力ファイルのみです。
-
オンライン・ヘルプを表示するには、引数なしで
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_NUMBERとTRACEの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はすべての反復のトレース・データを累積的に表示します。したがって、以前にトレースを無効にした後のセッションでトレースを再度有効にしても、前の反復によって生成されたトレース・データは削除されません。