LoginSignup
3
1

More than 5 years have passed since last update.

AWRに格納された過去のSQL監視結果をレポートする

Posted at

SQL MonitorはSQL性能を分析するのに欠かせない機能で、SQLが流れたそばから、なんなら流れている最中からでも待機イベントやカーディナリティ、パラレルクエリの処理の偏り具合などがわかる超便利機能ですが、監視データがメモリ上の循環バッファにあるため一定数以上たまると古いものから消えてしまい、DB再起動ですべて消えてしまうのがOracle Database 11gの頃の難点でした。

Oracle Database 12cでは、意外と知られていないようなのですが、SQL Monitorの監視データもAWRに格納されるようになっています。つまり履歴がディスクに残ります。すべての結果が必ずしも残るわけではありませんが、過去のSQL性能トラブルを分析する際にとても便利で、筆者自身もある障害対応で、「とあるSQL文が過去数日間のあいだ、どれくらいの頻度で実行されていたか」を特定するのに成功しました。

以下は、調べたいSQLのSQL_IDがわかってる場合の例

SQL> select report_id, GENERATION_TIME, key1 from dba_hist_reports where component_name='sqlmonitor' and key1='5j5wp4d5s9pqz';


 REPORT_ID GENERATION_TIME     KEY1
---------- ------------------- --------------------
       382 2015-07-01 02:51:59 5j5wp4d5s9pqz
       531 2015-07-01 10:51:33 5j5wp4d5s9pqz


SQL> select dbms_auto_report.report_repository_detail(382, 'TEXT') report from dual;

REPORT
------------------------------------------------------------------------------------------------------------------------------------------------------
SQL Monitoring Report



なお、SQL MonitorはTuning Packの機能です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1