

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# DB インスタンスの Performance Insights メトリクス
<a name="db-instance-performance-insights"></a>

Performance Insights では、このセクションで説明するように、さまざまなタイプのメトリクスをモニタリングできます。

## データベース負荷
<a name="dbload"></a>

データベースロード (`DBLoad`) は、データベース内のアクティビティレベルを測定する Performance Insights の主要なメトリクスであり、毎秒収集され、Amazon CloudWatch に自動的に発行されます。このメトリクスは、平均アクティブセッション (AAS) で生じている、DB インスタンスのアクティビティを表すもので、AAS とは、SQL クエリを同時実行しているセッションの数を意味します。また、`DBLoad` メトリクスは、その解釈に、待機、SQL、ホスト、ユーザー、データベースの 5 つのディメンションのいずれかを使用するという点が、他の時系列メトリクスとは異なっています。これらのディメンションは、`DBLoad` メトリクスのサブカテゴリであり、データベース負荷のさまざまな特性を表すために、*カテゴリごとにスライス*として使用できます。データベース負荷の計算方法については、Amazon RDS ドキュメントの「[データベース負荷](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)」で詳しくご覧いただけます。

次のスクリーンショットは、Performance Insights ツールを示しています。

![\[Performance Insights ツールの [データベース負荷]\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/database-load.png)


## ディメンション
<a name="dimensions"></a>
+ *待機イベント*とは、データベースセッションの処理を続行するために、リソース処理や別のオペレーションが完了するまで待機している状態を指します。`SELECT * FROM big_table` のような SQL ステートメントを実行し、そのテーブルが割り当てた InnoDB バッファプールよりもはるかに大きい場合、セッションが、`wait/io/file/innodb/innodb_data_file` 待機イベントによって待機状態になる可能性が非常に高くなります。これらのイベントはデータファイルの物理 I/O オペレーションが原因で生じます。データベースをモニタリングする場合、待機イベントは、パフォーマンスのボトルネックの可能性を示すという点で重要なディメンションとなります。このイベントは、セッション内で実行中の SQL ステートメント処理において、どのようなリソースやとオペレーションに対し、非常に長い時間待機状態になっているかを示すものです。例えば、`wait/synch/mutex/innodb/trx_sys_mutex` イベントは多数のトランザクションを持つデータベースアクティビティが多い場合に発生し、`wait/synch/mutex/innodb/buf_pool_mutex` イベントは、特定のスレッド処理において、メモリ内ページに排他的にアクセスできるよう InnoDB バッファプールがロックされている場合に発生します。MySQL と MariaDB のすべての待機イベントに関する情報については、MySQL ドキュメントの「[イベント待機サマリーテーブル](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-wait-summary-tables.html)」を参照してください。計測名の解釈方法については、MySQL ドキュメントの「[パフォーマンススキーマインストゥルメント命名規則](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-instrument-naming.html)」を参照してください。
+ *SQL* は、データベースの総ロードに最も寄与している SQL ステートメントを示しています。Amazon RDS Performance Insights の**データベース負荷**チャートにある**上位ディメンション**テーブルはインタラクティブに操作できます。**[待機別の負荷 (AAS)]** 列のバーをクリックすると、SQL ステートメントに関連付けられた待機イベントについて詳細なリストを取得できます。そのリストで SQL ステートメントを選択すると、関連する待機イベントが **[データベース負荷]** チャートに、SQL ステートメントテキストが **[SQL テキスト]** セクションに表示されます。SQL 統計は、**[上位ディメンション]** テーブルの右側に表示されます。
+ *ホスト*は、接続済みクライアントのホスト名を示しています。このディメンションにより、どのクライアントホストが非常に多くの負荷をデータベースにかけているかを特定しやすくなります。
+ *ユーザー*を使用すると、データベースにログインしているユーザーごとに DB 負荷をグループ化できます。
+ *データベース*を使用すると、クライアントが接続しているデータベースの名前で DB 負荷をグループ化できます。

## カウンターメトリクス
<a name="counter-metrics"></a>

カウンターメトリクスは、累積メトリクスであり、これによって、DB インスタンスの再起動時にのみ値を増加させたり、ゼロにリセットしたりできます。カウンターメトリクスの値を以前の値に減らすことはできません。これらのメトリクスは、単調に増加する 1 つのカウンターを表すものです。
+ [ネイティブカウンター](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL.Native)とは、Amazon RDS ではなく、データベースエンジンによって定義されるメトリクスです。例えば、次のようになります。
  + `SQL.Innodb_rows_inserted` は、InnoDB テーブルに挿入された行数を表します。
  + `SQL.Select_scan` は、最初のテーブルのフルスキャンを完了した結合の数を表します。
  + `Cache.Innodb_buffer_pool_reads` は、InnoDB エンジンがバッファプールから読み取れず、ディスクから直接読み取る必要があった論理読み取りの数を表します。
  + `Cache.Innodb_buffer_pool_read_requests` は、論理読み取りリクエストの数を表します。

  すべてのネイティブメトリックの定義については、MySQL ドキュメントの「[サーバーステータス可変](https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html)」を参照してください。
+ [非ネイティブカウンター](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL.NonNative)は、Amazon RDS によって定義されています。これらのメトリクスを取得するには、特定のクエリを使用するか、計算に 2 つ以上のネイティブメトリクスを使用します。非ネイティブカウンターメトリクスにより、レイテンシー、比率、ヒット率を表すことができます。例えば、次のようになります。
  + `Cache.innoDB_buffer_pool_hits` は、InnoDB がディスクを使用せずにバッファプールから取得できる読み取りオペレーションの数を表しています。これは、ネイティブカウンターメトリクスに基づいて、次のように計算されます。

    ```
    db.Cache.Innodb_buffer_pool_read_requests - db.Cache.Innodb_buffer_pool_reads
    ```
  + `IO.innoDB_datafile_writes_to_disk` は、InnoDB データファイルによる、ディスクへの書き込みオペレーションの数を表しています。データファイルへのオペレーションのみをキャプチャするもので、二重書き込みや REDO ログの書き込みオペレーションはキャプチャされません。これは、次のように計算されます:

    ```
    db.IO.Innodb_data_writes - db.IO.Innodb_log_writes - db.IO.Innodb_dblwr_writes
    ```

DB インスタンスメトリクスは、Performance Insights ダッシュボードで直接視覚化できます。次の図に示すように、**[メトリクスを管理]** を選択して、**[データベースメトリクス]** タブを選択し、目的のメトリクスを選択します。

![\[Performance Insights で DB インスタンスメトリクスを選択する\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/selecting-metrics.png)


**[グラフを更新]** ボタンを選択すると、次の図に示すように、選択したメトリクスが表示されます。

![\[Performance Insights で DB インスタンスメトリクスを表示する\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/selecting-metrics-results.png)


## SQL 統計
<a name="sql-stats"></a>

Performance Insights では、クエリを実行している 1 秒ごと、および SQL コールごとに、SQL クエリに関するパフォーマンス関連メトリクスを収集します。一般的には、ステートメントおよびダイジェストレベルで [SQL 統計](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.AnalyzeDBLoad.AdditionalMetrics.MySQL.html)を収集しますが、MariaDB および MySQL DB インスタンスの場合、ダイジェストレベルでのみ収集します。
+ ダイジェスト統計は、複合メトリクスであり、パターンが同じであっても最終的には異なるリテラル値を持つすべてのクエリで構成されます。ダイジェストでは、次のように、特定のリテラル値を変数に置き換えます。

  ```
  SELECT department_id, department_name FROM departments WHERE location_id = ?
  ```
+ ダイジェストした SQL ステートメントごとに *1 秒*あたりの統計を表すメトリクスも用意されています。例えば、`sql_tokenized.stats.count_star_per_sec` は、1 秒あたりの呼び出し回数 (SQL ステートメントが 1 秒あたりに実行された回数) を表します。
+ Performance Insights は、各 SQL ステートメントの*呼び出しごと*の統計情報を得られるメトリクスも備えています。例えば、`sql_tokenized.stats.sum_timer_wait_per_call` は、SQL ステートメント 1 回あたりの平均レイテンシーをミリ秒単位で示しています。

SQL 統計情報は、Performance Insights ダッシュボードの **[上位ディメンション]** テーブルにある **[上位 SQL]** タブで確認できます。

![\[SQL 統計\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/sql-stats.png)
