拡張イベントを使用してデータベースのパフォーマンスを分析する

このページでは、インスタンスで拡張イベント(XEvents)を使用する方法について説明します。

Cloud SQL は、XEvents を使用してデータベースのパフォーマンスのモニタリング、特定、トラブルシューティングをサポートしています。これを行うには、XEvent セッションを作成し、XEvent 出力ファイルを読み取ります。XEvent 出力ファイルを読み取るには、インスタンスで読み取るか、Cloud Storage バケットから XEvent ファイルをダウンロードします。

始める前に

XEvent ファイルを Cloud Storage バケットにアップロードする場合は、Google Cloud アカウントでバケットを作成します。

ベスト プラクティス

  • 大きなファイルをリージョン間で転送しないようにするには、次のいずれかを行うことをおすすめします。
    • マルチリージョン Cloud Storage バケットを作成する
    • インスタンスと同じリージョンに宛先の Cloud Storage バケットを設定する
  • XEvents を使用する前に、ストレージの自動増量を有効にします。XEvent 出力ファイルのサイズと保持期間によっては、膨大なディスク容量が必要になる場合があります。
  • 過剰な数の XEvent ファイルが長期間保持されないように、Cloud Storage バケットにデータ保持ポリシーを設定してください。
  • SSMS UI を使用して XEvent セッションを作成しても、入力値のボックスが表示されない場合は、[Create XEvent Session] ウィンドウのサイズを変更します。

XEvent セッションを作成する方法

XEvents は、インスタンスで自動的に有効になります。

新しい XEvent セッションを定義するには、CREATE EVENT SESSION コマンドを使用します。SQL Server Management Studio(SSMS)のユーザー インターフェースで XEvent セッションを作成することもできます。

Cloud SQL は、すべての XEvent セッションに次のパラメータを適用します。

パラメータ 説明 使用できる値
FILENAME XEvents セッション データを格納するファイル名とパスを指定します。 /var/opt/mssql/xevents/ で始まるパス
MAX_FILE_SIZE 新しいファイルが作成されるまでの各出力ファイルの最大サイズを指定します。 最小 10 MB
最大 1 GB
MAX_MEMORY イベント バッファリング用にセッションに割り当てるメモリの最大量を指定します。 最小 4 MB
最大 8 MB
MAX_DISPATCH_LATENCY イベントがターゲットに送信される前にイベント ディスパッチ キューに残しておくことができる最大時間を秒単位で指定します。 最小 1 秒
最大 30 秒
MAX_EVENT_SIZE 各イベントの最大サイズをバイト単位で設定します。 最小 4 MB
最大 8 MB

XEvent セッション構成パラメータ

XEvent セッションは、次のパラメータをカスタムフラグとして使用して構成できます。

パラメータ 説明
cloud sql xe bucket name XEvent セッション出力をアップロードする Cloud Storage バケットを指定します。指定しないと、Cloud SQL は XEvent セッション出力データを Cloud Storage にアップロードしません。
cloud sql xe output total disk size (mb) すべての XEvent セッションの出力用に予約するディスク容量を指定します。指定しない場合、Cloud SQL はデフォルトのディスク容量(512 MB)を使用します。XEvent 出力ファイルが cloud sql xe output total disk size (mb) の値を超えるディスク容量を使用する場合、Cloud SQL はこれらのファイルをディスクから削除します。
cloud sql xe file retention (mins) XEvent セッションのファイル ターゲットによって生成されたファイルのインスタンスでの保持時間を分単位で指定します。省略した場合、Cloud SQL は 7 日間のデフォルト値を使用します。
cloud sql xe upload interval (mins) Cloud Storage にアップロードされる XEvent ファイルのアップロード間隔を指定します。指定しない場合、Cloud SQL はデフォルト値の 10 分を使用します。

これらのフラグの設定方法については、データベース フラグを構成するをご覧ください。

XEvent セッションの出力ファイルを読み取る方法

XEvent セッション出力ファイルは、Cloud SQL インスタンスまたは Cloud Storage バケットから読み取ることができます。

インスタンスから XEvent 出力ファイルを読み取る

XEvent セッションが作成した XEvent ファイルからデータを取得するには、sys.fn_xe_file_target_read_file 関数を使用します。

次に例を示します。

SELECT * FROM sys.fn_xe_file_target_read_file('/var/opt/mssql/xevents/filename*, NULL, NULL, NULL);

バケットから XEvent 出力ファイルを読み取る

Cloud Storage バケットから XEvent 出力ファイルを読み取るには、バケットから SQL Server インスタンスにファイルをダウンロードします。次のいずれかのインスタンスからダウンロードできます。

  • Compute Engine Windows インスタンス
  • Compute Engine Linux インスタンス
  • SQL Server を実行している別の種類のインスタンス

XEvent 出力ファイルをバケットから、インスタンスにアクセスできる場所(ローカル ディスクなど)に転送します。次に、XEvent 出力ファイルから情報を返すには、サーバーに対して VIEW SERVER STATE 権限を持つアカウントで sys.fn_xe_file_target_read_file 関数を実行します。権限について詳しくは、権限をご覧ください。

モニタリング指標

次の xevent 関連のオペレーションは、Cloud SQL 指標の一部としてモニタリングできます。これらの指標は Metrics Explorer で確認できます。

  • database/sqlserver/xevents_upload_count: xevent ファイルのアップロードの成功と失敗の合計回数を示します。この指標をチェックして、アップロードが成功したかどうかを確認します。
  • database/sqlserver/xevents_size: インスタンスに保存されている xevent ファイルによって使用されるディスク容量(バイト単位)を示します。

XEvent セッションをモニタリングする

次のオペレーションについて、xevents.log ファイルを使用して XEvent セッション関連のアクティビティをモニタリングできます。

  • Cloud Storage にアップロードされず、cloud sql xe output total disk size (mb) に関連付けられた値よりも多くのディスク容量を占有していた XEvent 出力ファイルのディスクからの削除。
  • Cloud Storage にアップロードされず、cloud sql xe file retention に関連付けられた値より古い XEvent 出力ファイルのディスクからの削除。

リードレプリカに関する考慮事項

このセクションでは、新しいリードレプリカと既存のリードレプリカの XEvent セッションについて説明します。

新しいリードレプリカの場合

  • 元のインスタンスのデータベース フラグから渡される XEvent セッション構成パラメータはすべて、新しく作成されたリードレプリカで使用できます。
  • リードレプリカの作成時に元のインスタンスに存在するすべての XEvent セッションは、リードレプリカで使用できます。リードレプリカの XEvent セッションは、自動的に開始するように構成されていない限り、手動で開始する必要があります。詳細については、XEvent セッションを作成する方法をご覧ください。
  • プライマリ インスタンスのクローンを作成すると、プライマリ インスタンスに表示されるデータベース フラグがクローン インスタンスに反映されます。また、クローンを作成したインスタンスのサービス アカウントに、Cloud Storage バケットに再度アクセスする権限を付与する必要があります。

既存のリードレプリカの場合

  • データベース フラグを通じて元のインスタンスに渡された XEvent セッション構成パラメータは、リードレプリカに反映されません。
  • 元のインスタンスで作成された XEvent セッションは、リードレプリカに伝播されません。