zoukankan      html  css  js  c++  java
  • 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 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;

  • 相关阅读:
    JAVA的学习日记15
    JAVA的学习日记14
    CIRD主站与DOPAS构建笔记#1
    信仰之题——Codeforces Round 259(附题面完整翻译)
    平面最近点对问题
    BZOJ4552 [Tjoi2016&Heoi2016]排序
    BZOJ1001 [Beijing2006]狼抓兔子
    (二)k8s编写资源清单
    linux常用搜索工具find/whereis/locate
    解决centos7 的/etc/rc.local不会开机执行
  • 原文地址:https://www.cnblogs.com/andy6/p/7507195.html
Copyright © 2011-2022 走看看