

# データベース負荷
<a name="USER_PerfInsights.Overview.ActiveSessions"></a>

*データベース負荷 (DB 負荷)* は、データベース内のセッションアクティビティのレベルを測定します。`DBLoad` は Performance Insights の主要なメトリクスで、Performance Insights は 1 秒ごとに DB 負荷を収集します。

**Topics**
+ [

## アクティブなセッション
](#USER_PerfInsights.Overview.ActiveSessions.active-sessions)
+ [

## 平均アクティブセッション
](#USER_PerfInsights.Overview.ActiveSessions.AAS)
+ [

## 平均アクティブ実行
](#USER_PerfInsights.Overview.ActiveSessions.AAE)
+ [

## ディメンション
](#USER_PerfInsights.Overview.ActiveSessions.dimensions)

## アクティブなセッション
<a name="USER_PerfInsights.Overview.ActiveSessions.active-sessions"></a>

*データベースセッション*は、リレーショナルデータベースとのアプリケーションのダイアログを表します。アクティブなセッションとは、DB エンジンに作業を送信し、レスポンスを待っている接続です。

セッションは、CPU での動作中、またはリソースが使用可能になるのを待っているときにアクティブになります。例えば、アクティブなセッションでは、ページ (またはブロック) がメモリに読み込まれるのを待機し、ページからデータを読み取る間に CPU を消費することがあります。

## 平均アクティブセッション
<a name="USER_PerfInsights.Overview.ActiveSessions.AAS"></a>

*平均アクティブセッション (AAS)*は`DBLoad`Performance Insights のメトリクスの単位です。データベース上で同時にアクティブなセッション数を測定します。

毎秒、Performance Insights は、クエリを同時に実行するセッションの数をサンプリングします。Performance Insights は、アクティブなセッションごとに以下のデータを収集します。
+ SQL ステートメント
+ セッション状態 (CPU で実行中または待機中)
+ ホスト
+ SQL を実行しているユーザー

Performance Insights は、特定期間の総セッション数を総サンプル数で割って AAS を計算します。たとえば、次の表は、1 秒間隔で実行中のクエリの連続する 5 つのサンプルを示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)

前述の例では、時間間隔の DB ロードは 2 AAS でした。この測定は、5 つのサンプルを採取した期間に、平均して 2 つのセッションがある時点でアクティブであったことを意味します。

## 平均アクティブ実行
<a name="USER_PerfInsights.Overview.ActiveSessions.AAE"></a>

1 秒あたりの平均アクティブ実行 (AAE) は AAS に関連しています。AAE を計算するために、Performance Insightsでは、クエリの合計実行時間を時間間隔で割ります。次の表に、前述の表の同じクエリに対する AAE 計算を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)

ほとんどの場合、クエリの AAS と AAE はほぼ同じです。ただし、計算への入力は異なるデータソースであるため、計算はわずかに異なります。

## ディメンション
<a name="USER_PerfInsights.Overview.ActiveSessions.dimensions"></a>

この `db.load` メトリクスは、ディメンションと呼ばれるサブコンポーネントに分割できるため、他の時系列メトリクスとは異なります。ディメンションは、`DBLoad` メトリクスのさまざまな特性のカテゴリにより「スライス化されている」と考えることができます。

パフォーマンスの問題を診断する場合、多くの場合、以下のディメンションが最も役立ちます。

**Topics**
+ [

### 待機イベント
](#USER_PerfInsights.Overview.ActiveSessions.waits)
+ [

### 上位の SQL
](#USER_PerfInsights.Overview.ActiveSessions.top-sql)
+ [

### プラン
](#USER_PerfInsights.Overview.ActiveSessions.plans)

のディメンションの詳細なリストについては、Amazon RDSエンジン、「[ディメンションでスライスされた DB の負荷](USER_PerfInsights.UsingDashboard.Components.md#USER_PerfInsights.UsingDashboard.Components.AvgActiveSessions.dims)」を参照してください。

### 待機イベント
<a name="USER_PerfInsights.Overview.ActiveSessions.waits"></a>

*待機イベント*を指定すると、SQL ステートメントは、特定のイベントが発生するまで待機してから、実行を継続できます。待機イベントは、作業が妨げられる場所を示すため、DB ロードの重要なディメンションまたはカテゴリになります。

すべてのアクティブなセッションはCPU 上で実行されているか、待っています。例えば、セッションがメモリでバッファを検索したり、計算を実行したり、プロシージャコードを実行したりするときに CPU を消費します。セッションが CPU を消費していないときは、メモリバッファが空くのを待っているか、データファイルの読み取りやログの書き込みを待っている可能性があります。セッションのリソース待機時間が長くなると、CPU 上で動作する時間は短くなります。

データベースのチューニングのとき、セッションが待っているリソースを見つけようとすることがよくあります。例えば、2 つまたは 3 つの待機イベントが DBロードの 90% を占めることがあります。これは、平均して、アクティブなセッションが少数のリソースを待機するためにほとんどの時間を費やしていることを意味します。これらの待機の原因がわかれば、解決策を試すことができます。

待機イベントは、DB エンジンごとに異なります。
+ MariaDB および MySQL のすべての待機イベントの詳細については、MySQL ドキュメントの「[イベント待機サマリーテーブル](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-wait-summary-tables.html)」を参照してください。
+ すべての PostgreSQL 待機イベントの詳細については、PostgreSQL ドキュメントの「[統計コレクター > 待機イベントテーブル](https://www.postgresql.org/docs/current/monitoring-stats.html#WAIT-EVENT-TABLE)」を参照してください。
+ すべての Oracle 待機イベントについては、Oracle ドキュメントの「[待機リストの説明](https://docs.oracle.com/database/121/REFRN/GUID-2FDDFAA4-24D0-4B80-A157-A907AF5C68E2.htm#REFRN-GUID-2FDDFAA4-24D0-4B80-A157-A907AF5C68E2)」を参照してください。
+ SQL Server のすべての待機イベントについては、SQL Server ドキュメントの「[待機の種類](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-os-wait-stats-transact-sql?view=sql-server-2017#WaitTypes)」を参照してください。

**注記**  
Oracle では、関連付けられた SQL ステートメントがなくてもバックグラウンドプロセスが実行されることがあります。このような場合、Performance Insights はバックグラウンドプロセスのタイプとそのバックグラウンドプロセスに関連付けられた待機クラスをコロンで連結してレポートします。バックグラウンドプロセスのタイプには、`LGWR`、`ARC0`、`PMON`などが含まれます。  
例えば、アーカイブ処理で I/O を実行しているとき、Performance Insights によるレポートは `ARC1:System I/O` のようになります。バックグラウンドプロセスタイプが欠落していて、Performance Insights が `:System I/O` のように待機クラスだけをレポートする場合もあります。

### 上位の SQL
<a name="USER_PerfInsights.Overview.ActiveSessions.top-sql"></a>

待機イベントはボトルネックを示しますが、上位の SQL は、どのクエリが DB ロードの最も大きな原因になっているかを示します。例えば、多くのクエリが現在データベースで実行されている可能性がありますが、1 つのクエリが DB ロードの 99% を占めている可能性もあります。この場合、負荷が高いと、クエリに問題がある可能性があります。

デフォルトでは、Performance Insights コンソールには、データベース負荷の原因となっている上位の SQL クエリが表示されます。コンソールには、各ステートメントに関連する統計情報も表示されます。特定のステートメントのパフォーマンスの問題を診断するには、その実行プランを調べます。

### プラン
<a name="USER_PerfInsights.Overview.ActiveSessions.plans"></a>

*実行プラン* (あるいはシンプルに*プラン*とも呼ばれるもの) は、データにアクセスする際の一連のステップのことです。例えば、テーブル `t1` と `t2` を統合するプランでは、`t1` 内のすべての行をループしながら、その各行を `t2` 内の行と比較します。リレーショナルデータベースでの*オプティマイザ*とは組み込みのコードのことで、これは SQL クエリのための最も効率的なプランを決定します。

DB インスタンスの場合、Performance Insights が実行プランを自動的に収集します。SQL のパフォーマンスに関する問題を診断するには、リソースの使用量が高い SQL クエリに関して取得したプランを検証します。プランから、データベースがどのようにクエリを解析して実行したかがわかります。

プランを使用して DB 負荷を分析する方法については、以下を参照してください。
+ Oracle: [Amazon RDS の Performance Insights ダッシュボードを使用した Oracle 実行プランの分析](USER_PerfInsights.UsingDashboard.AccessPlans.md)
+ SQL Server: [Amazon RDS の Performance Insights ダッシュボードを使用した SQL Server 実行プランの分析](USER_PerfInsights.UsingDashboard.AccessPlansSqlServer.md)

#### プランキャプチャ
<a name="USER_PerfInsights.Overview.ActiveSessions.plans.capture"></a>

Performance Insights は、5 分ごとに、リソースを最も多く消費しているクエリを特定し、対応するプランをキャプチャします。したがって、膨大な数のプランを手動で収集して管理する必要はありません。ユーザーは、**[Top SQL]** (上位の SQL) タブを通じて、最も問題のあるクエリのプランに対処することができます。

**注記**  
Performance Insights では、含まれるテキストが収集可能な最大数を超えるクエリのプランはキャプチャされません。詳しくは、「[Performance Insights ダッシュボードでより多くの SQL テキストにアクセスする](USER_PerfInsights.UsingDashboard.SQLTextSize.md)」を参照してください。

実行プランの保持期間は、Performance Insights のデータの保持期間と同じです。無料利用枠の保持設定は「**デフォルト (7 日)**」です。パフォーマンスデータをさらに長期間保持するには、1～24 か月を指定します。保持期間の詳細については、「[Performance Insights の料金とデータ保持](USER_PerfInsights.Overview.cost.md)」を参照してください。

#### ダイジェストクエリ
<a name="USER_PerfInsights.Overview.ActiveSessions.plans.digest"></a>

**[Top SQL]** (上位の SQL) タブには、デフォルトでダイジェストクエリが表示されます。ダイジェストクエリ自体にはプランはありませんが、リテラル値を使用するすべてのクエリにはプランがあります。例えば、ダイジェストクエリにテキスト`WHERE `email`=?`が含まれる場合があります。このダイジェストの中には、テキスト `WHERE email=user1@example.com` を含むクエリと、`WHERE email=user2@example.com` を含むクエリの 2 つがあります。これらのリテラルクエリには、それぞれ複数のプランが含まれる可能性があります。

ダイジェストクエリを選択すると、選択したダイジェストの子ステートメントのすべてのプランがコンソールに表示されます。したがって、プランを見つけるために、子ステートメント全体を確認する必要はありません。表示されているプランの中に、上位 10 の子ステートメントのリストにないものが含まれる場合があります。コンソールには、クエリが上位 10 であるかどうかにかかわらず、プランが収集されたすべての子クエリのプランが表示されます。