DBA 向け SQL 性能分析ツールの最新版では、運用効率を高めるための複数の機能改善が実施されました。特に、バインド変数の扱い方や実行計画の履歴分析に関するロジックが見直されています。
主な更新内容は以下の通りです。
- SQL 識別子の入力方式をバインド変数モードへ変更し、安全性と柔軟性を向上させました。
- AWR 履歴には存在するものの、現在のメモリ(v$sql)上に存在しない実行計画を表示する機能を追加しました。これにより、過去に実行されたが現在はキャッシュされていない計画の分析が可能になります。
- Oracle 11g 以降のバージョンでは、SQL MONITOR 報告書の表示パラメータをデフォルトで有効化し、設定の手間を省きました。
- 従来の positional parameter(&1)方式を廃止し、SQL ID を直接入力する方式へ移行しました。
更新されたスクリプトの主要部分は以下のようになります。変数名およびクエリ構造を最適化し、可読性を高めています。
VARIABLE v_target_sid VARCHAR2(30)
BEGIN
:v_target_sid := UPPER('&input_id');
END;
/
PROMPT
PROMPT ****************************************************************************************
PROMPT AWR HISTORY PLAN ANALYSIS
PROMPT ****************************************************************************************
SELECT p.plan_table_output
FROM dba_hist_sqlstat hist
, TABLE(DBMS_XPLAN.DISPLAY_AWR(hist.sql_id, hist.plan_hash_value)) p
WHERE hist.sql_id = :v_target_sid
AND NOT EXISTS (
SELECT NULL
FROM v$sql curr_sql
WHERE curr_sql.sql_id = hist.sql_id
);
PROMPT
PROMPT ****************************************************************************************
PROMPT SQL MONITOR REPORT
PROMPT ****************************************************************************************
SELECT DBMS_SQLTUNE.report_sql_monitor(
sql_id => :v_target_sid,
type => 'TEXT',
report_level => 'ALL'
) AS execution_report
FROM dual;
このスクリプトを実行した場合、メモリ上に存在しない過去の実行計画が AWR セクションに表示され、続いて SQL MONITOR による詳細な実行レポートが出力されます。
****************************************************************************************
AWR HISTORY PLAN ANALYSIS
****************************************************************************************
no rows selected
****************************************************************************************
SQL MONITOR REPORT
****************************************************************************************
EXECUTION_REPORT
--------------------------------------------------------------------------------
SQL Monitoring Report