監視とトラブルシューティング - パート 2
この演習では、クエリダッシュボードの確認、高コストクエリの詳細の確認、および高コストクエリのトラブルシューティングを行います。
クエリダッシュボードの確認 #
Queries ウィンドウには、データベースで最も多くの時間を消費している SQL 文とストアドプロシージャが表示されます。クエリの重みを SQL 待機時間などの他のメトリクスと比較して、チューニングが必要な SQL を特定できます。
- Queries タブ: クエリウィンドウを表示します。
- Top Queries ドロップダウン: 上位 5、10、100、または 200 のクエリを表示します。
- Filter by Wait States: 待機状態を選択してクエリリストをフィルタリングできます。
- Group Similar: 同じ構文のクエリをグループ化します。
- 最も大きい Weight (%) を示すクエリをクリックします。
- View Query Details: クエリの詳細にドリルダウンします。

高コストクエリの詳細の確認 #
Database Queries ウィンドウでデータベース内で最も多くの時間を費やしている文を特定したら、それらの SQL 文のチューニングに役立つ詳細情報をさらに深く掘り下げることができます。データベースインスタンスの Query Details ウィンドウには、Database Queries ウィンドウで選択したクエリの詳細が表示されます。
- Resource consumption over time: クエリがリソースを使用してデータベースで費やした時間、実行回数、および消費された CPU 時間を表示します。
- Wait states: 選択した SQL 文をデータベースが処理するのにかかる時間に寄与するアクティビティです。最も多くの時間を消費している待機状態は、パフォーマンスのボトルネックを示している可能性があります。
- Components Executing Similar Queries: このクエリと類似のクエリを実行しているノードを表示します。
- Business Transactions Executing Similar Queries: このクエリと類似のクエリを実行している Java ビジネストランザクションを表示します。

- 右側の外側のスクロールバーを使用して下にスクロールします。
- Clients: 選択した SQL 文を実行したマシンと、各マシンが文の実行に要した合計時間の割合を表示します。
- Sessions: 各データベースインスタンス使用のセッションです。
- Query Active in Database: この SQL がアクセスしたスキーマを表示します。
- Users: このクエリを実行したユーザーを表示します。
- Query Hashcode: データベースサーバーがキャッシュ内でこの SQL 文をより迅速に見つけるための一意の ID を表示します。
- Query: 選択した SQL 文の完全な構文を表示します。Query カードの右上隅にある鉛筆アイコンをクリックして、識別しやすいようにクエリ名を編集できます。
- Execution Plan: クエリ実行計画ウィンドウを表示します。

高コストクエリのトラブルシューティング #
Database Query Execution Plan ウィンドウは、クエリに対して最も効率的な実行計画を決定するのに役立ちます。潜在的に問題のあるクエリを発見したら、EXPLAIN PLAN 文を実行して、データベースが作成した実行計画を確認できます。
クエリの実行計画は、クエリがインデックスの使用を最適化し、効率的に実行されているかどうかを明らかにします。この情報は、実行速度が遅いクエリのトラブルシューティングに役立ちます。
- Execution Plan タブをクリックします。
- Type 列の結合タイプが各テーブルで ALL になっていることに注目してください。
- 結合タイプの 1 つにカーソルを合わせて、結合タイプの説明を確認します。
- Extras 列のエントリを確認します。
- 各エントリにカーソルを合わせて、エントリの説明を確認します。

次に、Object Browser を使用してテーブルのインデックスを調べましょう。
- Object Browser オプションをクリックして、テーブルのスキーマの詳細を表示します。
- Database オプションをクリックします。
- supercars スキーマをクリックして、テーブルのリストを展開します。
- CARS テーブルをクリックして、テーブルの詳細を確認します。
- CAR_ID 列がプライマリキーとして定義されていることが確認できます。

- 外側のスクロールバーを使用してページを下にスクロールします。
- テーブルに定義されているプライマリキーインデックスに注目してください。

- MANUFACTURER テーブルをクリックして詳細を表示します。
- MANUFACTURER_ID 列がプライマリキーとして定義されていないことに注目してください。
- ページを下にスクロールして、テーブルにインデックスが定義されていないことを確認します。

MANUFACTURER_ID 列には、テーブルに対するクエリのパフォーマンスを向上させるためにインデックスを作成する必要があります。異なるクエリを分析した場合、根本的な問題は異なる可能性がありますが、このラボで示される最も一般的な問題は、クエリが MANUFACTURER テーブルとの結合を実行しているか、そのテーブルを直接クエリしていることに起因しています。
