SQL Monitorレポートを取得(実行中または完了した長時間SQL)
Oracleパフォーマンスコマンド
-- List monitored SQL (longer than 5 s, parallel, or /*+ MONITOR */):
SELECT sql_id, status, username, sql_exec_id,
TO_CHAR(sql_exec_start,'YYYY-MM-DD HH24:MI:SS') AS exec_start,
ROUND(elapsed_time/1e6,1) AS elapsed_s,
ROUND(cpu_time/1e6,1) AS cpu_s,
buffer_gets, px_servers_allocated
FROM v$sql_monitor
ORDER BY sql_exec_start DESC
FETCH FIRST 20 ROWS ONLY;
-- TEXT report (actual rows, time and activity per plan line):
SET LONG 10000000 LONGCHUNKSIZE 10000000 LINESIZE 300 PAGESIZE 0 TRIMSPOOL ON
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id => '<sql_id>',
type => 'TEXT',
report_level => 'ALL') AS report
FROM dual;
-- Shareable HTML (interactive in a browser):
SPOOL /tmp/sqlmon_<sql_id>.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id => '<sql_id>', type => 'ACTIVE', report_level => 'ALL')
FROM dual;
SPOOL OFF概要
Real-Time SQL Monitoringは、長時間実行またはパラレルSQLの実行計画の各ステップについて、実際の行数、経過時間、メモリ/一時領域の使用量、ASHアクティビティを表示する。SQLの実行中に進捗を確認できる。
使用する場面
バッチ/レポートクエリが停止しているか、残りはどれくらいかを確認するとき、パラレルクエリの分散(PXスキュー)分析、推定行数(E-Rows)と実際の行数の乖離の特定に。
注意
Tuning Packライセンスが必要(Diagnostics Packが前提)。デフォルトでは、CPU/I-Oを5 s消費したSQLまたはパラレル実行のSQLのみが監視される。それ以外には/*+ MONITOR */ヒントを使用する。非常に大きな計画(_sqlmon_max_planlines、デフォルト300)は監視されない。エントリは限られた時間しかメモリに残らない。12c以降では古いレポートもDBA_HIST_REPORTSから取得できる。