近期在用12c EM做实时监控(sql Monitor)时发现执行时间小于3秒的sql语句均未出现在列表中,在各种搜索后发现Oracle确实有个隐含参数可以控制受全监控sql是否被捕捉,即_sqlmon_threshold
1._sqlMON_THRESHOLD 默认值
该参数的出现其实是针对Oracle数据库就慢查询监控出现的特性即11g有个新特性,Real Time sql Monitor.
国外原文链接:http://kerryosborne.oracle-guy.com/2008/10/oracle-11g-real-time-sql-monitoring/,其中这个功能对运行时间比较长的sql进行监控和记录。
为了启用这个特性,需要确保一下参数设置正确:
STATISTICS_LEVEL需要设置为typical(默认)或着all
CONTROL_MANAGEMENT_PACK_ACCESS需要设置为DIAGNOSTIC+TUNING(默认)
然而不是所有的sql都会被监控到,它默认只对以下两种情况的sql进行监控和记录:
sql运行时间超过5秒。通过隐含参数_sqlmon_threshold(单位为s)去控制,默认是5秒。此参数可以在session 和 system级别进行改变。默认情况下,该值如下:
sql>SELECT ksppinm,ksppstvl,ksppdescFROM x$ksppi x,x$ksppcv yWHERE x.indx = y.indx AND ksppinm = '_sqlmon_threshold'
sql> /
KSPPINM SPPSTVLKSPPDESC ------------------------- ---------------------- -------------------------------------------------------------------------------- _sqlmon_threshold 5 cpu/IO time threshold before a statement is monitored. 0 is disabled