

# Performance Insights のトップ SQL タブを使用したクエリの分析
<a name="USER_PerfInsights.UsingDashboard.AnalyzeDBLoad.AdditionalMetrics"></a>

Amazon RDS Performance Insights ダッシュボードでは、実行中のクエリや最近のクエリに関する情報を **[Top dimensions]** (上位ディメンション) テーブルの**[Top SQL]** (上位の SQL) タブで見ることができます。この情報を使用して、クエリをチューニングできます。

**Topics**
+ [[トップ SQL] タブの概要](#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL)
+ [Performance Insights ダッシュボードでより多くの SQL テキストにアクセスする](USER_PerfInsights.UsingDashboard.SQLTextSize.md)
+ [Performance Insights ダッシュボードでの SQL 統計の表示](USER_PerfInsights.UsingDashboard.AnalyzeDBLoad.AdditionalMetrics.AnalyzingSQLLevel.md)

## [トップ SQL] タブの概要
<a name="USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL"></a>

デフォルトでは、[**Top SQL**] (上位の SQL) タブはデータベースロードに最も貢献している 25 クエリを表示します。クエリをチューニングするために、クエリテキスト、SQL 統計などの情報を分析できます。また、[**トップ SQL**] タブに表示する統計を選択することもできます。

**Topics**
+ [SQL テキスト](#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.text)
+ [SQL 統計](#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.statistics)
+ [待機によるロード (AAS)](#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.Load-by-waits)
+ [SQL 情報の表示](#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.SQL-information)
+ [統計設定を選択する](#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.Preferences)

### SQL テキスト
<a name="USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.text"></a>

デフォルトでは、[**Top SQL**] (上位の SQL) テーブルの各行にはステートメントごとに 500 バイトのテキストが表示されます。

![\[SQL テキスト\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql-text-oracle.png)


デフォルトの 500 バイト以上の SQL テキストを表示する方法については、「[Performance Insights ダッシュボードでより多くの SQL テキストにアクセスする](USER_PerfInsights.UsingDashboard.SQLTextSize.md)」を参照してください。

*SQL ダイジェスト*は、構造的には類似しているが、異なるリテラル値を含む可能性の高い、複数の実際のクエリの複合体です。ダイジェストは、ハードコードされた値を疑問符に置き換えます。例えば、ダイジェストは`SELECT * FROM emp WHERE lname= ?`のことがあります。このダイジェストには、次の子クエリが含まれます。

```
SELECT * FROM emp WHERE lname = 'Sanchez'
SELECT * FROM emp WHERE lname = 'Olagappan'
SELECT * FROM emp WHERE lname = 'Wu'
```

ダイジェスト内でリテラル SQL ステートメントを表示するには、クエリを選択してからプラス記号 (\$1) を選択します。以下の例では、選択されたクエリはダイジェストです。

![\[選択された SQL ダイジェスト\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_4b.png)


**注記**  
SQL ダイジェストでは、類似した SQL ステートメントがグループ化されますが、機密情報は編集されません。

Performance Insights では、Oracle SQL テキストが **[Unknown]** (不明) と表示される可能性があります。次のような状況では、テキストはこの状態になります。
+ `SYS` 以外の Oracle データベースユーザーはアクティブですが、現在 SQL を実行していません。例えば、並列クエリが完了すると、クエリコーディネータはヘルパープロセスがセッション統計を送信するのを待ちます。待機中は、クエリテキストに **[Unknown]** (不明) と表示されます。
+ Standard Edition 2 の RDS for Oracle インスタンスの場合、リソースマネージャは並列スレッドの数を制限します。この作業を行うバックグラウンドプロセスにより、クエリテキストに [**不明**] と表示されます。

### SQL 統計
<a name="USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.statistics"></a>

*SQL 統計*は、SQL クエリに関するパフォーマンス関連のメトリックです。例えば、Performance Insights には 1 秒あたりの実行数や 1 秒あたりの処理行数が表示されることがあります。Performance Insights は、最も一般的なクエリのみの統計を収集します。通常、これらは Performance Insights ダッシュボードに負荷別に表示される上位のクエリと一致します。

[**トップ SQL**] テーブル内の各行は、次の例のように、SQL ステートメントまたはダイジェストに関連する統計を示します。

![\[上位の SQL\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_4.png)


Performance Insights は、SQL 統計で `0.00` および `-` (不明) をレポートする可能性があります。この状況は、以下の条件で発生します。
+ サンプルが 1 つだけ存在する。例えば、Performance Insights は、`pg_stat_statements` ビューからの複数のサンプルに基づいて、RDS PostgreSQL クエリの変更率を計算します。ワークロードが短時間実行されると、Performance Insights ではサンプルが 1 つしか収集されない場合があります。つまり、変更率を計算できません。不明な値はダッシュ (`-`) で表されます。
+ 2 つのサンプルが同じ値を持っている。Performance Insights は、変更が発生していないため、変更率を計算することができず、変化率を `0.00` と報告します。
+ RDS PostgreSQL ステートメントに有効な識別子がない。PostgreSQL は、構文解析と分析の後にのみ、ステートメントの識別子を作成します。したがって、PostgreSQL の内部インメモリ構造に、識別子なしでステートメントが存在する可能性があります。Performance Insights は内部メモリ内構造を 1 秒に 1 回サンプリングするため、低レイテンシーのクエリは 1 つのサンプルに対してのみ表示されることがあります。このサンプルでクエリ識別子を使用できない場合、Performance Insights はこのステートメントを統計に関連付けることはできません。不明な値はダッシュ (`-`) で表されます。

Amazon RDS エンジンの SQL 統計の説明については、「[Performance Insights の SQL 統計](sql-statistics.md)」を参照してください。

### 待機によるロード (AAS)
<a name="USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.Load-by-waits"></a>

[**トップ SQL**] の [**待機別の負荷 (AAS)**] 列は、上位の各ロード項目に関連付けられているデータベースロードの割合を示しています。この列には、**DB 負荷グラフ**で現在選択されているグループ化に応じて、その項目に対する負荷が反映されます。平均アクティブセッション（AAS）の詳細については、[平均アクティブセッション](USER_PerfInsights.Overview.ActiveSessions.md#USER_PerfInsights.Overview.ActiveSessions.AAS) を参照してください。

例えば、**DB 負荷グラフ**を待機状態別にグループ化できます。上位負荷項目のテーブルで SQL クエリを調べます。この場合は、[**待機別の DB 負荷**] バーは、クエリが貢献している待機状態の量を示すために、サイズ、セグメント、および色で分けられています。また、選択したクエリに影響を与えている待機状態も示されます。

![\[待機別の DB 負荷\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_6.png)


### SQL 情報の表示
<a name="USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.SQL-information"></a>

[**トップ SQL**] テーブルで、ステートメントを開いてその情報を表示できます。下部のペインに情報が表示されます。

![\[リテラルクエリが選択された上位の SQL テーブル\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf-insights-sql-ids-open.png)


SQL ステートメントに関連付けられているタイプの識別子 (ID) は以下のとおりです。
+ **Support SQL ID** - SQL ID のハッシュ値。この値は、AWS サポートを利用しているときに SQL ID を参照するためだけのものです。AWS サポートが実際の SQL ID や SQL テキストにアクセスすることはできません。
+ **ダイジェスト ID のサポート** - Digest ID のハッシュ値。この値は、AWS サポートを利用しているときにダイジェスト ID を参照するためだけのものです。AWSサポートが実際のダイジェスト ID や SQL テキストにアクセスすることはできません。

### 統計設定を選択する
<a name="USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.TopLoadItemsTable.TopSQL.Preferences"></a>

「**設定**」 アイコンを選択すると、[**トップ SQL**] タブに表示される統計を制御できます。

![\[統計設定\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf-insights-sql-ids-preferences-icon.png)


[**設定**] アイコンを選択すると、[**設定**] ウィンドウが開きます。次のスクリーンショットは、**[Preferences]** (環境設定) ウィンドウの例です。

![\[設定ウィンドウ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf-insights-sql-ids-preferences.png)


[**トップ SQL**] タブに表示させたい統計を有効にするには、マウスを使用してウィンドウの下部までスクロールし、[**続行**] を選択します。

Amazon RDS エンジンの秒単位または呼び出し単位の統計の詳細については、[Performance Insights の SQL 統計](sql-statistics.md) の「エンジン固有の SQL 統計」セクションを参照してください。

# Performance Insights ダッシュボードでより多くの SQL テキストにアクセスする
<a name="USER_PerfInsights.UsingDashboard.SQLTextSize"></a>

デフォルトでは、[**トップ SQL**] テーブルの各行には SQL ステートメントごとに 500 バイトの SQL テキストが表示されます。

![\[500 バイトの SQL\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf-insights-top-sql-bytes.png)


SQL ステートメントのサイズが 500 バイトを超える場合、**[Top SQL]** (トップ SQL) テーブルの **[SQL text]** (SQL テキスト) セクションでテキストの表示量を増やすことができます。この場合、**[SQL text]** (SQL テキスト) に表示されるテキストの最大長は 4 KB です。コンソールで導入されるこの制限には、データベースエンジンによって設定された制限が適用されます。**[SQL text]** (SQL テキスト) に表示されているテキストを保存するには、**[Download]** (ダウンロード) を選択します。

**Topics**
+ [Amazon RDS エンジン のテキストサイズの制限](#sql-text-engine-limits)
+ [Amazon RDS for PostgreSQL DB インスタンスの SQL テキスト制限の設定](USER_PerfInsights.UsingDashboard.SQLTextLimit.md)
+ [Performance Insights ダッシュボードでの SQL テキストの表示とダウンロード](view-download-text.md)

## Amazon RDS エンジン のテキストサイズの制限
<a name="sql-text-engine-limits"></a>

SQL テキストをダウンロードするときに、データベースエンジンがテキストの最大長を決定します。エンジンごとのダウンロードできる SQL テキストの上限は次のとおりです。


| DB エンジン | ダウンロードされるテキストの最大長 | 
| --- | --- | 
| Amazon RDS for MySQL および MariaDB | Performance Schema が有効になっている場合、長さは 4,096 バイトに固定されます。Performance Schema が有効になっていない場合、長さは 65,535 バイトに固定されます。 | 
| Amazon RDS for Microsoft SQL Server | 4,096 文字 | 
| 「Amazon RDS for Oracle」 | 1,000 バイト | 

Performance Insights コンソールの **[SQL text]** (SQL テキスト) では、エンジンが返すテキストが最大値まで表示できます。例えば、 MySQL は、Performance Insights に対して最大 1 KB を返します。元のクエリが大きい場合でも、収集して表示できるのは 1 KB のみです。したがって、**[SQL text]** (SQL テキスト) でクエリを表示するか、ダウンロードすると、Performance Insights は同じバイト数を返します。

AWS CLI または API を使用する場合、Performance Insights には、コンソールで適用される 4 KB の制限がありません。`DescribeDimensionKeys` と `GetResourceMetrics` は、最大で 500 バイトを返します。

**注記**  
`GetDimensionKeyDetails` はクエリ全体を返しますが、サイズにはエンジンの制限が適用されます。

# Amazon RDS for PostgreSQL DB インスタンスの SQL テキスト制限の設定
<a name="USER_PerfInsights.UsingDashboard.SQLTextLimit"></a>

Amazon RDS for PostgreSQL は、テキストを異なる方法で処理します。DB インスタンスパラメータ `track_activity_query_size` を使用して、テキストサイズの制限を設定できます。このパラメータには次の特徴があります。

デフォルトのテキストサイズ  
Amazon RDS for PostgreSQL バージョン 9.6 では、`track_activity_query_size` パラメータのデフォルト設定は 1,024 バイトです。Amazon RDS for PostgreSQL バージョン 10 以降では、デフォルトは 4,096 バイトです。

最大テキストサイズ  
Amazon RDS for PostgreSQL バージョン 12 以前の場合、`track_activity_query_size` の制限は 102,400 バイトです。バージョン 13 以降の場合、最大値は 1 MB です。  
エンジンが Performance Insights に対して 1 MB を返す場合、コンソールでは最初の 4 KB のみが表示されます。クエリをダウンロードする場合、1 MB すべてを取得できます。この場合、表示する場合とダウンロードする場合では異なるバイト数が返されます。`track_activity_query_size` DB インスタンスパラメータの詳細については、PostgreSQL ドキュメントで「[ランタイム統計](https://www.postgresql.org/docs/current/runtime-config-statistics.html)」を参照してください。

SQL テキストのサイズを大きくするには、`track_activity_query_size` の制限を引き上げます。パラメータを変更するには、Amazon RDS for PostgreSQL DB インスタンスに関連付けられているパラメータグループのパラメータ設定を変更します。

**インスタンスでデフォルトのパラメータグループが使用される際に設定を変更するには**

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

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

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

DB インスタンスパラメータの設定の詳細については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

# Performance Insights ダッシュボードでの SQL テキストの表示とダウンロード
<a name="view-download-text"></a>

Performance Insights ダッシュボードで、SQL テキストを表示およびダウンロードできます。

**Performance Insights ダッシュボードで SQL テキストの表示量を増やすには**

1. Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**Performance Insights**] を選択します。

1. DB インスタンスを選択します。

1. Performance Insights ダッシュボードの **[トップ SQL]** タブまでスクロールします。

1. プラス記号を選択して SQL ダイジェストを展開し、ダイジェストの子クエリのいずれかを選択します。

   500 バイトを超える SQL ステートメントは、次のイメージのように表示されます。  
![\[テキストサイズが大きい SQL ステートメント\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf-insights-large-text-1.png)

1. 下部にある [**SQL テキスト**] タブまでスクロールします。  
![\[SQL 情報セクションに SQL テキストがさらに表示される\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf-insights-large-text-2.png)

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

1. (オプション) [**コピー**] を選択して、表示された SQL ステートメントをコピーするか、[**ダウンロード**] を選択して、DB エンジンに応じた最大サイズの SQL ステートメントをダウンロードします。
**注記**  
SQL ステートメントをコピーまたはダウンロードするには、ポップアップブロッカーを無効にします。

# Performance Insights ダッシュボードでの SQL 統計の表示
<a name="USER_PerfInsights.UsingDashboard.AnalyzeDBLoad.AdditionalMetrics.AnalyzingSQLLevel"></a>

Performance Insights ダッシュボードでは、SQL 統計を [**データベース負荷**] グラフの [**トップ SQL**] タブで見ることができます。

**SQL 統計を表示するには**

1. Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[Performance Insights]** を選択します。

1. ページの上部で、SQL 統計を表示するデータベースを選択します。

1. ページの下部までスクロールし、[**トップ SQL**] タブを選択します。

1. 個々のステートメント またはダイジェストクエリを選択します。  
![\[クエリを実行するためのメトリクスの表示\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_per_sql_sql.png)

1. グラフの右上にある歯車のアイコンを選択して、表示する統計を選択します。Amazon RDS エンジンの SQL 統計の説明については、「[Performance Insights の SQL 統計](sql-statistics.md)」を参照してください。

   次の例は、Oracle DB インスタンスの統計設定を示しています。  
![\[Oracle DB インスタンスのクエリを実行するためのメトリクス\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_per_sql_pref_oracle.png)

   次の例は、MariaDB および MySQL DB インスタンスの設定を示しています。  
![\[MariaDB および MySQL DB インスタンスのクエリを実行するためのメトリクスの設定。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_per_sql_pref_ams.png)

1. 設定を保存するには [保存] を選択します。

   [**トップ SQL**] テーブルが更新されます。

   次の例は、Oracle SQL クエリの統計を示しています。  
![\[SQL クエリの統計\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/perf_insights_per_sql_stats_oracle.png)