Oracle Autonomous DatabaseでのSQLモニタリング (2024/10/26)
Oracle Autonomous DatabaseでのSQLモニタリング (2024/10/26)
https://medium.com/oracledevs/sql-monitoring-in-oracle-autonomous-database-ae3e65a8a0ad
投稿者:Andrea Dal Zoppo
SQLモニタリングは、SQL問合せ実行のリアルタイム追跡において、特に長時間実行またはリソース集中型の問合せにおいて重要な役割を果たします。詳細なインサイトを提供し、データベース管理者と開発者は、パフォーマンスのボトルネックを迅速に特定し、クエリの効率を分析して、パフォーマンスを向上させることができます。SQLモニタリングは、高パフォーマンスを維持し、本番環境で問合せを効率的に実行するために不可欠です。
Oracle Databaseバージョン11gリリース2以降、SQLモニタリングのレポート機能がアクティブ・レポート機能で拡張されました。
アクティブ・レポートは、オフライン分析に使用できる対話型シートです。Enterprise Managerのライブ画面と同じレベルの対話性を提供し、様々なレベルの詳細にドリルダウンできます。
Oracle Autonomous Databaseのお客様から、組み込みのSQLモニタリング・ツールとSQLモニター・アクティブ・レポート、特にSQLクエリのパフォーマンスに関するリアルタイムのインサイトを提供する機能について、多くの素晴らしいフィードバックを得ました。これにより、低速なクエリとその最適化方法を迅速に特定できるため、データベース全体のパフォーマンスが向上します。複雑な問合せの診断を簡素化する、特に複雑なワークロードでの問合せ実行とリソース使用量の視覚的な表現が気に入っています。
このブログでは、Autonomous Databaseを使用してSQLモニターのアクティブ・レポートを取得するための主な方法について簡単に説明します。
- SQLモニター・アクティブ・レポートのクイック・ファクト
- ADBコンソールからのアクティブ・レポートの収集
- SQL*plusからのレポートの収集
- SQL Developerからのレポートの収集
- まとめ
1.SQLモニター・アクティブ・レポートのクイック・ファクト
Autonomous Database SQLモニタリングからアクティブ・レポートを生成すると、特定のSQL問合せがどのように実行されたかを包括的に把握できます。アクティブ・レポートに期待できる内容は次のとおりです。
- 問合せ実行計画および追加情報: ステップは、関連するリソース割当て(メモリー、CPU、ディスクから読み取られたデータ...)とともにリストされます。情報の中で、アウトラインのヒントがあります
- 待機イベント: SQL文の実行中に費やされた時間を視覚化できます。
- リソース使用率の問合せ: メモリーやCPUなどのリソース使用率のグラフィカル・ビュー
- パラレル実行: 関連する並列度およびパラレル実行サーバーの詳細。
- エラーと警告: たとえば、使用されていないヒントや潜在的な問題に関するノートなどです。
監視対象のSQL文が次の条件の少なくとも1つを満たす場合、通常、アクティブ・レポートは自動的に生成されます。
- パラレル実行
- 5秒以上のI/OまたはCPU時間のリソース消費
- 特殊文ヒントMONITORの使用(例: select /*+ MONITOR */ ... from ...)
オンプレミスOracle Databaseでは、レポートを取得するには、Diagnostics and TUNING Packsが必要であり、有効にする必要があります(つまり、CONTROL_MANAGEMENT_PACK_ACCESS = DIAGNOSTIC+TUNINGおよびSTATISTICS_LEVEL = TYPICAL)。Autonomous Databaseでは、すでに含まれており、実行する準備ができています。
2.ADBコンソールからのアクティブ・レポートの収集
ADBのOCIコンソール・ページに移動し、「パフォーマンス・ハブ」を選択します:
次のページで、中央のペインの「SQLモニタリング」をクリックします。
ページの右上にあるタイム・スロット・カーソルを目的の時間枠に調整します。時間間隔は1か月前までのデータを表示できますが、画面には最大7日間を表示できます。したがって、このケースでは、履歴文レポートの最大保存期間は1か月です。
調査するSQL_IDの問合せのリストを検索するだけです。
SQL文が見つかったら、そのSQL_IDをクリックすると、その文に関するSQLモニタリング・アクティブが表示されます(次の例を参照)。右上隅にある「レポートの保存」をクリックしてHTMLコピーを取得し、さらに調査できる同僚や専門家と共有できるようになりました。
3.SQL*plusからのアクティブ・レポートの収集
パッケージDBMS_SQLTUNE.REPORT_SQL_MONITORを使用して、SQL*plusコマンドラインから特定の文のアクティブ・レポートを直接取得できます。
調査する問合せSQL_IDがわかっている場合は、すぐにレポートを取得できます。SQL_IDを追跡する必要がある場合は、いくつかの予備的なステップがあります。
このリンクには、ユーザーが直面する可能性のあるシナリオに応じてレポートを取得するための詳細ビューが含まれ、そこから次のパスの一部が推定されます。
もちろん、次のステップは、Autonomous Databaseにすでに統合されているSQL Developer Webコンソールからも使用できます。
SQL_IDは、v$SQLおよびV$SQL_MONITORを使用して、データベース・データ・ディクショナリから検索できます。
SELECT distinct s.sql_text, m.sql_id, m.cpu_time
FROM v$sql_monitor m
INNER JOIN v$sql s ON s.sql_id=m.sql_id
ORDER BY m.cpu_time;
または、SQL_TEXTの一部を知っている同じビューから取得できます。
SELECT sql_id, plan_hash_value, substr(sql_text,1,40) sql_text
FROM v$sql
WHERE sql_text like 'SELECT /* TARGET SQL */%';
ディクショナリ表ビューのカーソルで文が使用できなくなった場合は、SQL_TEXTの一部がわかっているAWR履歴ビューDBA_HIST_SQLTEXTおよびDBA_HIST_SQLSTATで文を検索できます。
SELECT s.sql_id,s.plan_hash_value, t.sql_text, s.snap_id
FROM dba_hist_sqlstat s, dba_hist_sqltext t
WHERE s.dbid = t.dbid
AND s.sql_id = t.sql_id
AND sql_text LIKE 'SELECT /* TARGET SQL */%'
ORDER BY s.sql_id;
SQL_IDが見つかったら、アクティブなレポートをHTML形式で生成できます。
spool /tmp/report_sql_monitor.htm
select dbms_sqltune.report_sql_monitor(
sql_id => '<SQL_ID>',
type => 'ACTIVE',
report_level => 'ALL') as report
from dual;
spool off
Where:
- 必要なHTMLレイアウトの準備に使用する初期書式設定パラメータ(ここで省略)を挿入できます。
- SPOOLは、ADBに接続されているクライアントのファイル・システム内にファイルを生成するために使用されます。
- TYPE— 値ACTIVEは強制的に作成し、SQLモニターのアクティブ・レポートを作成します
- REPORT_LEVEL— 値ALLは、可能なすべての情報を含めることを示します。
残念ながら、リアルタイムではなく、しばらく前に実行されたアクティブな問合せレポートを作成する場合があります。Oracle Database 12c以降、SQLモニター・レポートはデータ・ディクショナリ表DBA_HIST_REPORTSに保持されます。デフォルトでは、OracleはAWR保存ポリシーであるため、SQLモニター・レポートを8日間保持します。SQLモニターの保存ポリシーは、AWRポリシーによって制御されます。実際、DBA_HIST_REPORTS表に格納されている各SQLモニター・レポートは、AWR SNAP_IDに関連付けられています。
履歴またはアーカイブ済のSQLモニター・レポートは、Enterprise Manager (EM)、EM Database Expressまたはコマンドラインから確認できます。
1つのSQL文の永続SQLモニター・レポートを手動で生成するには、まずDBA_HIST_REPORTSビューを問い合せるREPORT_IDを見つけ、次にPL/SQLファンクションDBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAILを使用してレポートを抽出する必要があります。
SQL_ID=55u1dp05aakmdの文のアクティブ・レポートを取得する例の下
SELECT report_id,
EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_id') sql_id,
EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_exec_id') sql_exec_id,
EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_exec_start') sql_exec_start
FROM dba_hist_reports
WHERE
component_name = 'sqlmonitor'
AND key1 = '55u1dp05aakmd';
REPORT_ID SQL_ID SQL_EXEC_ID SQL_EXEC_START
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6756002 55u1dp05aakmd 33554432 09/21/2023 23:38:01
7068743 55u1dp05aakmd 33554432 10/09/2023 12:41:55
7193456 55u1dp05aakmd 33554432 10/16/2023 14:07:45
結果のREPORT_IDは、文の特定の過去の実行ごとに異なります。実行する分析に対して正しい分析を選択します。
REPORT_IDを取得したら、次に示すように、PL/SQLファンクションDBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAILを使用してSQLモニター・レポートを生成できます。
SPOOL &report_name.html
SELECT DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL(RID => <REPORT_ID>, TYPE => 'active') FROM dual;
SPOOL OFF
Where:
- TYPE—HTML形式を取得するには"active"を、テキスト形式を取得するには"text"を、
4.SQL Developerからのアクティブ・レポートの収集
顧客がアクティブ・レポートをすぐに抽出できる、広く普及しているもう1つの多目的ツールは、Oracle SQL Developerです。
「SQL Developer」メニューから「ツール」を選択し、「リアルタイムSQLモニター」をクリックします。
問合せ文のリアルタイム・モニターが表示されます(第1章で説明したルールに従って)。対象のSQL_IDを強調表示して調査する問合せを選択し、「保存」ボタンをクリックします。次に、アクティブになっているリアルタイムモニターをHTMLとして保存します。
一貫したレポートを作成することが重要です。問合せの実行が終了してレポートが抽出されるのを待つこと、およびすべての行がフェッチされ、左側に緑色のフラグが表示されていることを確認します。
5. まとめ
全体として、SQLモニターのアクティブ・レポートは強力なツールであり、SQLパフォーマンスモニタリングの大幅な進歩を表しています。これまでの多くのツールの能力を上回る詳細でリアルタイムかつ使いやすいインサイトを提供します。このガイドは、Autonomous Databaseの使用時に、目的のSQL文のアクティブ・レポートを取得するのに役立ちます。
コメント
コメントを投稿