oracle中v$sql

60次阅读
没有评论

共计 2496 个字符,预计需要花费 7 分钟才能阅读完成。

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

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

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 语句的统计信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计2496字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)