パフォーマンスインサイトダッシュボードを使用する - Amazon Relational Database Service

パフォーマンスインサイトダッシュボードを使用する

パフォーマンスインサイトダッシュボードには、パフォーマンスの問題を分析し、解決するのに役立つ、データベースのパフォーマンス情報が含まれます。ダッシュボードのメインページで、データベース負荷に関する情報を確認できます。特定の待機状態、SQL クエリ、ホスト、またはユーザーを詳細に調べることもできます。

パフォーマンスインサイトダッシュボードを開く

パフォーマンスインサイトダッシュボードを表示するには、以下の手順を使用します。

AWS マネジメントコンソールでパフォーマンスインサイトダッシュボードを表示するには

  1. https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。

  2. ナビゲーションペインで、[パフォーマンスインサイト] を選択します。

  3. DB インスタンスを選択します。この DB インスタンスにパフォーマンスインサイトダッシュボードが表示されます。

    パフォーマンスインサイトを有効にした DB インスタンスでは、DB インスタンスのリストで [Sessions (セッション)] 項目を選択してダッシュボードにアクセスすることもできます。[Current activity] の [Sessions] 項目には、直近 5 分間におけるアクティブなセッションの平均データベース負荷が表示されます。負荷はバーでグラフィカルに示されます。バーが空の場合、DB インスタンスはアイドル状態です。負荷が増加すると、バーが青色で塗りつぶされます。負荷が DB インスタンスクラスのおける仮想 CPU (vCPU) の数を超えると、バーが赤色になり、ボトルネックとなる可能性があることが示されます。

    
							メトリクスのフィルタリング

    DB インスタンスのダッシュボードを以下のスクリーンショットに示します。

    
							メトリクスのフィルタリング

デフォルトでは、パフォーマンスインサイトダッシュボードは過去 60 分間のデータを示します。過去 5 分、60 分、5 時間、24 時間、または 1 週間のデータを表示するように変更できます。また、利用可能なデータもすべて表示されます。

パフォーマンスインサイトダッシュボードが自動的に新しいデータで更新されます。更新の頻度は、表示されるデータの量によって異なります。

  • 「5 分」は 5 秒ごとに更新されます。

  • 「1 時間」と「5 時間」はどちらも 1 分ごとに更新されます。

  • 「24 時間」は 5 分ごとに更新されます。

  • 「1 週間」は 1 時間ごとに更新されます。


					メトリクスのフィルタリング

パフォーマンスインサイトダッシュボードコンポーネント

このダッシュボードは次の 3 つのパートに分かれています。

  1. カウンターメトリクスグラフ – 特定のパフォーマンスカウンターメトリクスのデータを表示します。

  2. Average Active Sessions グラフ最大 CPU ラインで示されているように、データベースロードと DB インスタンスの容量の比較を示します。

  3. 上位の負荷項目テーブル – データベースロードに貢献している上位項目を表示します。

カウンターメトリクスグラフ

カウンターメトリクスグラフはパフォーマンスカウンターのデータを表示します。デフォルトで表示されるメトリクスは、blks_read.avg および xact_commit.avg です。グラフの右上にある歯車のアイコンを選択して、表示するパフォーマンスカウンターを選択します。


						メトリクスのフィルタリング

詳細については、「パフォーマンスインサイトのカウンター」を参照してください。

Average Active Sessions グラフ

Average Active Sessions グラフは、最大 CPU ラインで示されているように、データベースロードと DB インスタンスの容量を比較する方法を示します。デフォルトでは、ロードは待機状態ごとにグループ化されたアクティブなセッションとして表示されます。ロードを SQL クエリ、ホスト、またはユーザーごとにグループ化されたアクティブなセッションとして表示するように選択することもできます。


						メトリクスのフィルタリング

[Average Active Sessions] グラフ上の項目の上にマウスを移動して、凡例の指定期間に対するその項目の詳細を表示することができます。


						メトリクスのフィルタリング

上位の負荷項目テーブル

上位の負荷項目テーブルには、データベースロードに貢献している上位項目が表示されます。デフォルトでは、データベースロードに貢献している上位の SQL クエリを表示します。クエリは、複数の実際のクエリ (構造は似ていてもパラメータが異なる可能性がある) のダイジェストとして表示されています。代わりに、上位の待機状態、ホスト、またはユーザーを表示するように選択できます。


						メトリクスのフィルタリング

上位の各ロード項目に関連付けられるデータベースロードの割合 (%) は [DB Load by Waits] 列に示されます。この列は、[Average Active Sessions] グラフで現在選択されているグループ化によって、その項目に対する負荷が反映されます。たとえば、Average Active Sessions のグラフがホスト別にグループ化されており、上位の負荷アイテムテーブルの SQL クエリを参照しているとします。この場合、[DB Load by Waits] クエリが関連のホストにかける負荷がバーに反映されます。ここで、Average Active Sessions グラフに表示されるホストの色に合わせてバーは色分けされています。

もう 1 つ例を挙げると、Average Active Sessions のグラフが待機状態別にグループ化されており、上位の負荷アイテムテーブルの SQL クエリを参照していると想定します。この場合は、[DB Load by Waits] バーは、クエリが貢献している待機状態の量を示すために、サイズ、セグメント、および色で分けられています。また、どの待ち状態がそのクエリに影響を与えているかを示します。


						メトリクスのフィルタリング

[Top Load Items (上位の負荷項目)] テーブルでは、SQL ステートメントに関連した以下のタイプの識別子 (ID) を表示できます。

  • SQL ID – データベースが SQL ステートメントを一意に識別するために使用する ID。

    Oracle および SQL Server DB インスタンスの場合、SQL ID を使用して特定の SQL ステートメントを見つけることができます。

  • Support SQL ID – SQL ID のハッシュ値。この値は、AWS サポートを利用しているときに SQL ID を参照するためだけのものです。AWS サポートが実際の SQL ID や SQL テキストにアクセスすることはできません。

  • Digest ID – データベースが SQL ダイジェストを一意に識別するために使用する ID。SQL ダイジェストには、リテラルを削除し、空白を標準化した 1 つ以上の SQL ステートメントを含めることができます。リテラルは疑問符 (?) に置き換えられます。

    Amazon RDS for MariaDB、MySQL、および PostgreSQL DB インスタンスの場合は、ダイジェスト ID を使用して特定の SQL ダイジェストを見つけることができます。

    Oracle および SQL Server DB インスタンスの場合、ダイジェスト ID は SQL ID と同じです。[Top Load Items (上位の負荷項目)] テーブルの先頭行は、実際の SQL ステートメント (リテラルを含む) です。

  • ダイジェスト ID のサポート – Digest ID のハッシュ値。この値は、AWS サポートを利用しているときにダイジェスト ID を参照するためだけのものです。AWS サポートが実際のダイジェスト ID や SQL テキストにアクセスすることはできません。

[Top Load Items (上位の負荷項目)] テーブルで、トップステートメントを開いてその ID を表示できます。次のスクリーンショットは、トップステートメントを開いた状態を示しています。


						SQL ID

[設定] アイコンを選択して、[Top Load Items (上位の負荷項目)] テーブルに表示される ID を管理できます。


						SQL ID

[設定] アイコンを選択すると、[設定] ウィンドウが開きます。


						SQL ID

[Top Load Items (上位の負荷項目)] テーブルに表示する ID を有効にして、[保存] を選択します。

パフォーマンスインサイトダッシュボードを使用してデータベースロードを分析する

Average Active Sessions のグラフにボトルネックが表示される場合、負荷の発生源を確認できます。そのためには、Average Active Sessions のグラフ下にある上位負荷項目テーブルを参照してください。SQL クエリやユーザーのような特定の項目を選択すると、その項目をドリルダウンして詳細を表示できます。

待機および上位 SQL クエリによってグループ分けされた DB 負荷は、パフォーマンスインサイトダッシュボードのデフォルトビューです。通常、この組み合わせは、パフォーマンス問題に関する最も正しい情報を提供します。待機でグループ化された DB 負荷は、データベースにリソースまたは同時のボトルネックがあるかどうかを示します。この場合、上位負荷項目のテーブルの SQL タブには、どのクエリがその負荷をかけているかが表示されます。

パフォーマンスの問題を診断するための一般的なワークフローは次のとおりです。

  1. [Average Active Sessions] グラフを確認し、最大 CPU ラインを超えているデータベースロードのインシデントがあるかどうかを確認します。

  2. ある場合は、[Average Active Sessions] グラフを確認して、どの待機状態 (複数) が主に原因であるかを特定します。

  3. 上位の負荷項目テーブルの SQL タブが待機状態に最も影響しているクエリを確認することによって、ロードを引き起こすダイジェストクエリを特定します。これらは [DB Load by Wait] 列で識別できます。

  4. [SQL] タブでこれらのダイジェストクエリの 1 つを選択して展開し、構成されている子クエリを確認します。

たとえば、次のダッシュボードで、[IO: XactSync] の待機は頻繁に発生する問題です。[CPU] の待機はそれ以下ですが、まだ負荷に影響しています。

上位ロード項目テーブルの SQL タブの最初の 4 つのロールアップクエリは、最初の状態に強く相関します。したがって、これらの項目について、子クエリを詳細に調査するとよいでしょう。調査は、パフォーマンスの問題にどのように影響しているかを判断するために行います。

最後の 3 つのロールアップクエリは、CPU 負荷の主な要因です。これらは CPU 負荷が問題であるかどうかを調べるためのクエリです。


					メトリクスのフィルタリング

クエリの実行の統計を分析する

Amazon RDS Performance Insights では、[Top Load Items (上位の負荷項目)] セクションで実行中のクエリに関する統計を見つけることができます。これらの統計を表示するには、上位の SQL を表示します。Performance Insights は、最も一般的なクエリの統計のみを収集します。これらは通常、パフォーマンスインサイトダッシュボードに表示される負荷によって上位のクエリと一致します。

MariaDB および MySQL の統計情報

Performance Insightsは、events_statements_summary_by_digest テーブルから SQL ダイジェスト統計を収集します。このテーブルはデータベースによって管理され、削除ポリシーはありません。テーブルがいっぱいになると、新しい SQL クエリは追跡されません。この問題に対処するため、Performance Insights はテーブルがいっぱいになるとテーブルを自動的に切り捨てます。

Performance Insights は、パラメータグループに performance_schema パラメータの値が明示的に設定されていない場合にのみ、テーブルを自動的に切り捨てます。performance_schema パラメータを調べ、ソースの値が user である場合は、値を設定します。Performance Insights でテーブルを自動的に切り捨てる場合は、performance_schema パラメータの値をリセットします。パラメータ値のソースを確認するには、AWS マネジメントコンソール でパラメータを表示するか、AWS CLI の describe-db-parameters コマンドを実行します。テーブルがいっぱいになると、AWS マネジメントコンソール に次のメッセージが表示されます。

Performance Insights is unable to collect SQL Digest statistics on new queries because the table events_statements_summary_by_digest is full. Please truncate events_statements_summary_by_digest table to clear the issue. Check the User Guide for more details.

次の SQL 統計は、MariaDB および MySQL DB インスタンスで使用できます。

メトリクス Unit
db.sql_tokenized.stats.count_star_per_sec 1 秒あたりの呼び出し数
db.sql_tokenized.stats.sum_timer_wait_per_sec 1 秒あたりの平均アクティブ実行 (AAE)
db.sql_tokenized.stats.sum_select_full_join_per_sec 1 秒ごとに完全結合を選択
db.sql_tokenized.stats.sum_select_range_check_per_sec 1 秒ごとに範囲チェックを選択
db.sql_tokenized.stats.sum_select_scan_per_sec 1 秒ごとにスキャンを選択
db.sql_tokenized.stats.sum_sort_merge_passes_per_sec 1 秒ごとにマージパスを並べ替え
db.sql_tokenized.stats.sum_sort_scan_per_sec 1 秒あたりの並べ替えスキャン数
db.sql_tokenized.stats.sum_sort_range_per_sec 1 秒ごとの並べ替え範囲
db.sql_tokenized.stats.sum_sort_rows_per_sec 1 秒あたりの行の並べ替え
db.sql_tokenized.stats.sum_rows_affected_per_sec 1 秒あたりの影響を受ける行数
db.sql_tokenized.stats.sum_rows_examined_per_sec 1 秒あたりの検査される行数
db.sql_tokenized.stats.sum_rows_sent_per_sec 1 秒あたりに送信される行数
db.sql_tokenized.stats.sum_created_tmp_disk_tables_per_sec 1 秒ごとに作成される一時ディスクテーブル
db.sql_tokenized.stats.sum_created_tmp_tables_per_sec 1 秒ごとに作成される一時テーブル
db.sql_tokenized.stats.sum_lock_time_per_sec 1 秒あたりのロック時間(ミリ秒)

以下のメトリクスは、SQL ステートメントの呼び出しごとの統計を提供します。

メトリクス Unit
db.sql_tokenized.stats.sum_timer_wait_per_call 呼び出しごとの平均レイテンシー(ミリ秒)
db.sql_tokenized.stats.sum_select_full_join_per_call コールごとに完全結合を選択
db.sql_tokenized.stats.sum_select_range_check_per_call コールごとに範囲チェックを選択
db.sql_tokenized.stats.sum_select_scan_per_call コールごとにスキャンを選択
db.sql_tokenized.stats.sum_sort_merge_passes_per_call コールごとにマージパスを並べ替え
db.sql_tokenized.stats.sum_sort_scan_per_call コールごとに並べ替えスキャン
db.sql_tokenized.stats.sum_sort_range_per_call コールごとの並べ替え範囲
db.sql_tokenized.stats.sum_sort_rows_per_call 呼び出しごとの行の並べ替え
db.sql_tokenized.stats.sum_rows_affected_per_call コールごとに影響を受ける行数
db.sql_tokenized.stats.sum_rows_examined_per_call コールごとに検査される行数
db.sql_tokenized.stats.sum_rows_sent_per_call コールごとに送信される行数
db.sql_tokenized.stats.sum_created_tmp_disk_tables_per_call コールごとに作成された一時ディスクテーブル数
db.sql_tokenized.stats.sum_created_tmp_tables_per_call コールごとに作成された一時テーブル数
db.sql_tokenized.stats.sum_lock_time_per_call 呼び出しごとのロック時間(ミリ秒)

実行中の SQL ステートメントの MariaDB および MySQL メトリクスの分析

AWS マネジメントコンソール を使用すると、[SQL] タブを選択してクエリを展開することにより、実行中の SQL クエリのメトリクスを表示できます。


							クエリを実行するためのメトリクスの表示。

グラフの右上にある歯車のアイコンを選択して、表示する統計を選択します。

次のスクリーンショットは、MariaDB および MySQL DB インスタンスの設定を示しています。


							MariaDB および MySQL DB インスタンスのクエリを実行するためのメトリクスの設定。

Amazon RDS for Oracle の統計

Oracle DB インスタンスでは、次の SQL 統計を使用できます。

メトリクス Unit
db.sql.stats.executions_per_sec 1 秒あたりの実行回数
db.sql.stats.elapsed_time_per_sec 平均アクティブ実行 (AAE)
db.sql.stats.rows_processed_per_sec 1 秒あたりに処理される行
db.sql.stats.buffer_gets_per_sec 1 秒あたりのバッファ取得数
db.sql.stats.physical_read_requests_per_sec 1 秒あたりの物理的な読み取り数
db.sql.stats.physical_write_requests_per_sec 1 秒あたりの物理的な書き込み数
db.sql.stats.total_sharable_mem_per_sec 1 秒あたりの共有可能なメモリの合計数(バイト単位)
db.sql.stats.cpu_time_per_sec 1 秒あたりの CPU 時間(ミリ秒)

以下のメトリクスは、SQL ステートメントの呼び出しごとの統計を提供します。

メトリクス Unit
db.sql.stats.elapsed_time_per_exec 実行ごとの経過時間(ミリ秒)
db.sql.stats.rows_processed_per_exec 実行ごとに処理される行
db.sql.stats.buffer_gets_per_exec 実行ごとのバッファ取得数
db.sql.stats.physical_read_requests_per_exec 実行ごとの物理的読み取り数
db.sql.stats.physical_write_requests_per_exec 実行ごとの物理的書き込み数
db.sql.stats.total_sharable_mem_per_exec 実行ごとの共有可能なメモリの合計(バイト単位)
db.sql.stats.cpu_time_per_exec 実行ごとの CPU 時間(ミリ秒)

実行中の SQL ステートメントの Oracle メトリクスの分析

AWS マネジメントコンソール を使用すると、[SQL] タブを選択してクエリを展開することにより、実行中の SQL クエリのメトリクスを表示できます。


							クエリを実行するためのメトリクスの表示。

グラフの右上にある歯車のアイコンを選択して、表示する統計を選択します。

次のスクリーンショットは、Oracle DB インスタンスの設定を示しています。


							Oracle DB インスタンスのクエリを実行するためのメトリクス。

パフォーマンスインサイトダッシュボードで SQL テキストの表示量を増やす

デフォルトでは、[Top Load Items (上位の負荷項目)] テーブルの各行には SQL ステートメントごとに 500 バイトの SQL テキストが表示されます。SQL ステートメントのサイズが 500 バイトを超える場合、この SQL ステートメントをパフォーマンスインサイトダッシュボードで開くことで、ステートメントの表示量を増やすことができます。パフォーマンスインサイトダッシュボードは、最大 4,096 バイトまでの SQL ステートメントを表示できます。表示されている SQL ステートメントはコピーすることができます。4,096 バイトを超えて表示するには、[完全な SQL のダウンロード] を選択して、最大 DB エンジンの制限の SQL テキストを表示します。

SQL テキストの制限は、DB エンジンによって異なります。以下の制限が適用されます。

  • Amazon RDS for Microsoft SQL Server – 4,096 文字

  • Amazon RDS for MySQL および MariaDB – 1,024 バイト

  • Amazon RDS for Oracle – 1,000 バイト

  • Amazon RDS for PostgreSQLtrack_activity_query_size DB インスタンスパラメータで設定

Amazon RDS for PostgreSQL DB インスタンスの場合は、track_activity_query_size DB インスタンスパラメータを設定することで、SQL テキストサイズの上限を最大 102,400 バイトに制御できます。AWS マネジメントコンソール を使用して、このパラメータで設定した制限まで SQL テキストをダウンロードできます。詳細については、「Amazon RDS for PostgreSQL DB インスタンスの SQL テキスト制限の設定」を参照してください。

重要

現時点では、AWS マネジメントコンソール でのみ、表示およびダウンロードする SQL テキストの量を増やすことができます。AWS パフォーマンスインサイト CLI および API は、最大 500 バイトのテキストを返すことができます。

パフォーマンスインサイトダッシュボードで SQL テキストの表示量を増やすには

  1. https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。

  2. ナビゲーションペインで、[パフォーマンスインサイト] を選択します。

  3. DB インスタンスを選択します。この DB インスタンスにパフォーマンスインサイトダッシュボードが表示されます。

    500 バイトを超える SQL ステートメントは、次のイメージのように表示されます。

    
							テキストサイズが大きい SQL ステートメント
  4. SQL ステートメントを開いてより多くの SQL テキストを表示します。

    
							SQL テキストの表示量を増やす

    パフォーマンスインサイトダッシュボードは、各 SQL ステートメントの最大 4,096 バイトまでを表示できます。

  5. (オプション) [Copy snippet (スニペットのコピー)] を選択して、表示された SQL ステートメントをコピーするか、[完全な SQL のダウンロード] を選択して、最大 DB エンジンの制限の SQL ステートメントをダウンロードします。

    注記

    SQL ステートメントをコピーまたはダウンロードするには、ポップアップブロッカーを無効にします。

Amazon RDS for PostgreSQL DB インスタンスの SQL テキスト制限の設定

Amazon RDS for PostgreSQL DB インスタンスでは、Performance Insights ダッシュボードに表示できる SQL テキストの制限を管理できます。

これを行うには、track_activity_query_size DB インスタンスパラメータを変更します。track_activity_query_size パラメータのデフォルト設定は 1,024 バイトです。

バイト数を増やすことで、パフォーマンスインサイトダッシュボードに表示される SQL テキストサイズを増大できます。パラメータの上限は 102,400 バイトです。track_activity_query_size DB インスタンスパラメータの詳細については、PostgreSQL ドキュメントで「ランタイム統計」を参照してください。

パラメータを変更するには、Amazon RDS for PostgreSQL DB インスタンスに関連付けられているパラメータグループのパラメータ設定を変更します。

Amazon RDS for PostgreSQL DB インスタンスでデフォルトのパラメータグループを使用している場合は、以下のステップを実行します。

  1. 該当する DB エンジンおよび DB エンジンバージョンの新しい DB インスタンスパラメータグループを作成します。

  2. 新しいパラメータグループにパラメータを設定します。

  3. 新しいパラメータグループを DB インスタンスに関連付けます。

DB インスタンスパラメータの設定の詳細については、「DB パラメータグループのパラメータの変更」を参照してください。