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

网友投稿 521 2023-11-26

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

这篇文章将为大家详细讲解有关oracle中v$sql_monitor如何监视正在运行的SQL语句的统计信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

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 hh34: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 hh34: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;

关于“oracle中v$sql_monitor如何监视正在运行的SQL语句的统计信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PostgreSQL 数据库学习 - 0. 数据库安装
下一篇:11gR2数据库RMAN完全恢复数据库
相关文章

 发表评论

暂时没有评论,来抢沙发吧~