您的位置:首页 > 数据库 > Oracle

oracle之 v$sql_monitor 监视正在运行的SQL语句的统计信息

2017-09-11 21:24 656 查看
11g中引入了新的动态性能视图V$SQL_MONITOR,该视图用以显示Oracle监视的SQL语句信息。SQL监视会对那些并行执行或者消耗5秒以上cpu时间或I/O时间的SQL语句自动启动,同时在V$SQL_MONITOR视图中产生一条记录。当SQL语句正在执行,V$SQL_MONITOR视图中的统计信息将被实时刷新,频率为每秒1次。SQL语句执行完成后,监视信息将不会被立即删除,Oracle会保证相关记录保存一分钟(由参数_sqlmon_recycle_time所控制,默认为60s),最终这些记录都会被删除并被重用。这一新的SQL性能监视特性仅在CONTROL_MANAGEMENT_PACK_ACCESS为DIAGNOSTIC+TUNING和STATISTICS_LEVEL为ALL|TYPICAL时被启用。

v$sql_monitor视图包含当前正在运行的SQL语句,以及最近运行的SQL语句。

使用v$sql_monitor视图中所监控的SQL语句时需在满足以下条件:

1) 自动监控任何并行语句

2) 如果一个SQL语句消耗了超过5秒的CPU或I/O时间,则会自动监控

3) 监控任何在语句级启用监控的SQL语句(使用monitor或no_monitor)

提示:结合v$sql_monitor视图与v$sql_plan_monitor视图可以进一步查询SQL的执行计划等信息。联合一些其他视图,如v$active_session_history、v$session、v$session_longops、v$sql、v$sql_plan等,可以获得关于SQL的更多信息。

注意:为了进行SQL监控,初始化参数STATISTICS_LEVEL必须设置为TYPICAL或ALL,CONTROL_MANAGEMENT_PACK_ACCESS必须设置为DIAGNOSTIC+TUNING。

SQL> show parameter STATISTICS_LEVE

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

statistics_level string TYPICAL

SQL> show parameter CONTROL_MANAGEMENT_PACK_ACCESS

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_management_pack_access string DIAGNOSTIC+TUNING

1、 如查看数据库中消耗CPU资源排名前10位的查询:

select * from (

select sql_id,username,to_char(sql_exec_start,'yyyy-mm-dd hh24:mi:ss') sql_exec_start,

sql_exec_id,sum(buffer_gets) buffer_gets,

sum(disk_reads) disk_reads,round(sum(cpu_time/1000000),1) cpu_secs

from v$sql_monitor

where username not in ('SYS','SYSTEM')

group by sql_id,username,sql_exec_start,sql_exec_id

order by 7 desc)

where rownum<=10;

SQL_ID USERNAME SQL_EXEC_START SQL_EXEC_ID BUFFER_GETS DISK_READS CPU_SECS

------------- ------------------------------ ------------------- ----------- ----------- ---------- ----------

8p8ann3c68vxc SCOTT 2016-11-24 09:50:20 16777216 0 0 37.1

2、监控指定的SQL语句:

2.1、 Hint提示监控指定的SQL语句

select /*+ monitor */e.empno,e.ename,e.sal,d.dname from scott.emp e,scott.dept d where e.deptno=d.deptno;

2.2、v$sql_monitor视图中查看被监控的SQL语句消耗的资源信息:

select sql_id,username,to_char(sql_exec_start,'yyyy-mm-dd hh24:mi:ss') sql_exec_start,

sql_exec_id,sum(buffer_gets) buffer_gets,

sum(disk_reads)disk_reads,round(sum(cpu_time/1000000),1) cpu_secs

from v$sql_monitor

where sql_text like '%monitor%'

group by sql_id,username,sql_exec_start,sql_exec_id;

2.3、 然后可以使用DBMS_SQLTUNE包来查看SQL语句生成的监控信息(如执行计划等):

SQL> 

set long 10000000

set longchunksize 10000000

set linesize 200

select dbms_sqltune.report_sql_monitor from dual;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: