首页 > 数据库 > > Sql_Monitor的触发条件、使用方法和注意事项
Sql_Monitor
开启实时SQL监控的条件
1 parallel语句
2 消耗超过5秒的CPU或者I/O时间
3 使用hint monitor
还需要如下三个条件
监控的数据放入两个视图V$SQL_MONITOR and V$SQL_PLAN_MONITOR,一个放SQL信息,一个放执行计划信息
收集的统计信息每秒刷新一次数据。
抓取SQL的执行信息不会立即清除,该SQL执行完毕后至少保留1分钟
DBMS_SQLTUNE.REPORT_SQL_MONITOR
The REPORT_SQL_MONITOR function is used to return a SQL monitoring report for a specific SQL statement. The SQL statement can be identified using a variety of parameters.
The function accepts some optional parameters, the most common ones are:
使用步骤:
1 获得sql_id.
SET LINESIZE 300
COLUMN sql_text FORMAT A100
SELECT sql_id, status, sql_text FROM v$sql_monitor;
2 通过调用DBMS_SQLTUNE.report_sql_monitor生成html格式的报告
SET LONG 1000000
SET FEEDBACK OFF
spool monitor_sql.html
SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id =>'fnj7fdyravrrt',type=> 'HTML')
AS report FROM dual;
spool of
报告生成才当前目录下
3 生成text版本信息
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => '0tqfh0cggfg0v', type => 'TEXT')
AS report FROM dual;
其他注意事项
1 受到内存和执行计划行数的限制
_sqlmon_max_planlines 默认300
_sqlmon_max_plan 默认20*CPU数
SELECT ksppinm, ksppstvl, ksppdesc
FROM x$ksppi x, x$ksppcv y
WHERE x.indx = y.indx AND ksppinm ='_sqlmon_max_planlines'; <<<<300
SELECT ksppinm, ksppstvl, ksppdesc
FROM x$ksppi x, x$ksppcv y
WHERE x.indx = y.indx AND ksppinm ='_sqlmon_max_plan'; <<<<40
2 如果SQL执行时间少于5秒不被记录,此时可以通过使用hint实现 /*+ monitor */
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31540773/viewspace-3156738/ ,如需转载,请注明出处,否则将追究法律责任。