【DB笔试面试670】在Oracle中,什么是SQL实时监控?

【DB笔试面试670】在Oracle中,什么是SQL实时监控?

♣  

题目         部分

在Oracle中,什么是SQL实时监控?


     


♣  

答案部分          


在Oracle 11g中,V$SESSION视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID,这两个字段实际上代表了Oracle 11g的一个新特性:实时的SQL监控(Real Time SQL Monitoring)。

在Oracle 11g中,当SQL并行执行时,会立即被实时监控到,或者当SQL单进程运行时,若消耗超过5秒的CPU或I/O时间,则它也会被监控到。另外,若使用/*+ monitor */提示的SQL语句,则也会被强制监控到。若使用/*+ no_monitor */提示的SQL语句则不会被监控到。监控数据被记录在V$SQL_MONITOR视图中,当然也可以通过Oracle 11g新增的包DBMS_MONITOR来主动对SQL执行监控部署。

V$SQL_MONITOR这个视图还记录了SQL的CPU_TIME以及BUFFER_GETS等重要信息,对于诊断SQL性能问题具有极大的帮助。结合V$SQL_MONITOR视图与V$SQL_PLAN_MONITOR视图可以进一步查询SQL的执行计划等信息。联合一些其它视图,如V$ACTIVE_SESSION_HISTORY、V$SESSION、V$SESSION_LONGOPS、V$SQL、V$SQL_PLAN等,可以获得关于SQL的更多信息。

V$SQL_MONITOR收集的信息每秒刷新一次,接近实时。当SQL执行完毕,信息并不会立即从V$SQL_MONITOR中删除,至少会保留1分钟。V$SQL_PLAN_MONITOR视图中的执行计划信息也是每秒更新一次,当SQL执行完毕,它们同样至少被保留1分钟。

实时SQL监控需要STATISTICS_LEVEL初始化参数设置为TYPICAL或ALL。同时CONTROL_MANAGEMENT_PACK_ACCESS参数必须是DIAGNOSTIC+TUNING(默认设置)。

可以使用如下的SQL获取文本格式的SQL报告:

1SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR('6rqxj647ut9pn') FROM DUAL ;

 

在有外网的情况下,可以通过如下的脚本获取HTML格式的报告:

 1SET LONG 1000000
 2SET LONGCHUNKSIZE 1000000
 3SET LINESIZE 1000
 4SET PAGESIZE 0
 5SET TRIM ONS
 6SET TRIMSPOOL ON
 7SET ECHO OFF
 8SET FEEDBACK OFF
 9SPOOL report_sql_monitor.htm
10SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id=>'6rqxj647ut9pn',type=>'ACTIVE',report_level=>'ALL') AS REPORT FROM DUAL;
11SPOOL OFF

 

实时SQL监视通过HTML查看其监视报告时,具有更好的图形化的展示效果,它是基于Flash的展现,动态、图形画,让SQL的执行过程赏心悦目的展示出来,因此更加直观。如果监视的SQL语句发现具有全表扫描等执行计划的特征,或者CPU时间和I/O时间比较长,那么可以与SQL调优顾问接合起来,不但能获知性能瓶颈,而且能获得Oracle推荐的优化策略。


上一篇:并发编程(六)java中的monitor机制和Sychronized锁升级的过程


下一篇:【SQL监控】SQL完全监控的脚本