Oracle 11g实时SQL监控 v$sql_monitor

Oracle 11g实时SQL监控:

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

在Oracle 11g之前的版本,长时间运行的SQL可以通过监控v$session_longops来观察,当某个操作执行时间超过6秒,
就会被记录在v$session_longops 中,通常可以监控到全表扫描、全索引扫描、哈希联接、并行查询等操作;

而在Oracle 11g中,当SQL并行执行时,会立即被实时监控到,或者当SQL单进程运行时,如果消耗超过5秒的CPU或I/O时间,它也会被监控到。
监控数据被记录在v$sql_monitor视图中,当然也可以通过Oracle 11g新增的 package DBMS_MONITOR 来主动对SQL执行监控部署。

来看一下主要视图v$sql_monitor的结构:

Name                      Type           Nullable Default Comments
------------------------- -------------- -------- ------- --------
KEY                       NUMBER         Y
STATUS                    VARCHAR2(19)   Y
USER#                     NUMBER         Y
USERNAME                  VARCHAR2(30)   Y
MODULE                    VARCHAR2(64)   Y
ACTION                    VARCHAR2(64)   Y
SERVICE_NAME              VARCHAR2(64)   Y
CLIENT_IDENTIFIER         VARCHAR2(64)   Y
CLIENT_INFO               VARCHAR2(64)   Y
PROGRAM                   VARCHAR2(48)   Y
PLSQL_ENTRY_OBJECT_ID     NUMBER         Y
PLSQL_ENTRY_SUBPROGRAM_ID NUMBER         Y
PLSQL_OBJECT_ID           NUMBER         Y
PLSQL_SUBPROGRAM_ID       NUMBER         Y
FIRST_REFRESH_TIME        DATE           Y
LAST_REFRESH_TIME         DATE           Y
REFRESH_COUNT             NUMBER         Y
SID                       NUMBER         Y
PROCESS_NAME              VARCHAR2(5)    Y
SQL_ID                    VARCHAR2(13)   Y
SQL_TEXT                  VARCHAR2(2000) Y
IS_FULL_SQLTEXT           VARCHAR2(1)    Y
SQL_EXEC_START            DATE           Y
SQL_EXEC_ID               NUMBER         Y
SQL_PLAN_HASH_VALUE       NUMBER         Y
EXACT_MATCHING_SIGNATURE  NUMBER         Y
FORCE_MATCHING_SIGNATURE  NUMBER         Y
SQL_CHILD_ADDRESS         RAW(8)         Y
SESSION_SERIAL#           NUMBER         Y
PX_IS_CROSS_INSTANCE      VARCHAR2(1)    Y
PX_MAXDOP                 NUMBER         Y
PX_MAXDOP_INSTANCES       NUMBER         Y
PX_SERVERS_REQUESTED      NUMBER         Y
PX_SERVERS_ALLOCATED      NUMBER         Y
PX_SERVER#                NUMBER         Y
PX_SERVER_GROUP           NUMBER         Y
PX_SERVER_SET             NUMBER         Y
PX_QCINST_ID              NUMBER         Y
PX_QCSID                  NUMBER         Y
ERROR_NUMBER              VARCHAR2(40)   Y
ERROR_FACILITY            VARCHAR2(4)    Y
ERROR_MESSAGE             VARCHAR2(256)  Y
BINDS_XML                 CLOB           Y
OTHER_XML                 CLOB           Y
ELAPSED_TIME              NUMBER         Y
QUEUING_TIME              NUMBER         Y
CPU_TIME                  NUMBER         Y
FETCHES                   NUMBER         Y
BUFFER_GETS               NUMBER         Y
DISK_READS                NUMBER         Y
DIRECT_WRITES             NUMBER         Y
IO_INTERCONNECT_BYTES     NUMBER         Y
PHYSICAL_READ_REQUESTS    NUMBER         Y
PHYSICAL_READ_BYTES       NUMBER         Y
PHYSICAL_WRITE_REQUESTS   NUMBER         Y
PHYSICAL_WRITE_BYTES      NUMBER         Y
APPLICATION_WAIT_TIME     NUMBER         Y
CONCURRENCY_WAIT_TIME     NUMBER         Y
CLUSTER_WAIT_TIME         NUMBER         Y
USER_IO_WAIT_TIME         NUMBER         Y
PLSQL_EXEC_TIME           NUMBER         Y
JAVA_EXEC_TIME            NUMBER         Y
RM_LAST_ACTION            VARCHAR2(48)   Y
RM_LAST_ACTION_REASON     VARCHAR2(30)   Y
RM_LAST_ACTION_TIME       DATE           Y
RM_CONSUMER_GROUP         VARCHAR2(30)   Y                         

SQL> 

注意这里的SQL_EXEC_ID就是v$session视图中新增字段的来源。这个视图还记录了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:
SQL> show parameter statistics_level

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      TYPICAL

SQL> select statistics_name,session_status,system_status,activation_level,session_settable
  2    from v$statistics_level
  3   where statistics_name = ‘SQL Monitoring‘;

STATISTICS_NAME                                                  SESSION_STATUS SYSTEM_STATUS ACTIVATION_LEVEL SESSION_SETTABLE
---------------------------------------------------------------- -------------- ------------- ---------------- ----------------
SQL Monitoring                                                   ENABLED        ENABLED       TYPICAL          YES

同时CONTROL_MANAGEMENT_PACK_ACCESS参数必须是DIAGNOSTIC+TUNING(这是缺省设置):

SQL>  show parameter control_manage

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_management_pack_access       string      DIAGNOSTIC+TUNING

在如上设置下,数据库会启动自动的实时SQL监控,Oracle还提供Hints可以强制制定对SQL执行监控或者不允许监控,这两个Hints是monitor与no_monitor。

强制对某个SQL使用实时监控可以如下改写SQL:
select /*+ monitor */ count(*) from emp where sal > 5000;
指定不执行实时监控:
select /*+ no_monitor */ count(*) from emp where sal > 5000

查看数据库中已经生成的监控信息可以使用DBMS_SQLTUNE包来实现:

SQL>  set long 10000000
SQL> set longchunksize 10000000
SQL>  set linesize 200
SQL> select dbms_sqltune.report_sql_monitor from dual;

REPORT_SQL_MONITOR
-------------------------------------------------------------------------------------
SQL Monitoring Report

SQL Text
------------------------------
select /*+ monitor */ count(*) from emp where sal > 5000

Global Information
------------------------------
 Status              :  DONE (ALL ROWS)
 Instance ID         :  1
 Session             :  SCOTT (142:43)
 SQL ID              :  2bhgjhbypqw17
 SQL Execution ID    :  16777216
 Execution Started   :  10/29/2018 23:46:53
 First Refresh Time  :  10/29/2018 23:46:53
 Last Refresh Time   :  10/29/2018 23:46:53
 Duration            :  .001s
 Module/Action       :  SQL*Plus/-
 Service             :  SYS$USERS
 Program             :  sqlplus@prod (TNS V1-V3)
 Fetch Calls         :  1

Global Stats
======================================
| Elapsed |   Cpu   | Fetch | Buffer |
| Time(s) | Time(s) | Calls |  Gets  |
======================================
|    0.00 |    0.00 |     1 |      7 |
======================================

SQL Plan Monitoring Details (Plan Hash Value=2083865914)
==========================================================================================================================
| Id |      Operation       | Name |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Activity | Activity Detail |
|    |                      |      | (Estim) |      | Active(s) | Active |       | (Actual) |   (%)    |   (# samples)   |
==========================================================================================================================
|  0 | SELECT STATEMENT     |      |         |      |         1 |     +0 |     1 |        1 |          |                 |
|  1 |   SORT AGGREGATE     |      |       1 |      |         1 |     +0 |     1 |        1 |          |                 |
|  2 |    TABLE ACCESS FULL | EMP  |       1 |    3 |           |        |     1 |          |          |                 |
==========================================================================================================================

原文地址:https://www.cnblogs.com/chendian0/p/10527285.html

时间: 2024-10-04 19:05:52

Oracle 11g实时SQL监控 v$sql_monitor的相关文章

【SQL Performance】实时SQL监控功能(Real-Time SQL Monitoring)

概述 使用条件 监视对象 查看实时SQL监控结果的方法 DBMS_SQLTUNE包的以下子程序包 动态视图 Enterprise ManagerEM 相关参数 各版本变化 实时SQL监控使用的例子 参考 概述 实时SQL监控功能(Real-Time SQL Monitoring)是Oracle11g推出的功能,通过这个功能可以实时地监视执行中的SQL性能. 使用条件 要想使用实时SQL监控功能(Real-Time SQL Monitoring),必须满足以下几个条件 ?EE版本,购买了Diagn

SQL*PLUS下使用AUTOTRACE、sql顾问、实时sql监控

高级SQL优化(三) 常用优化工具 ——<12年资深DBA教你Oracle开发与优化—— 高级SQL优化(一) ——<12年资深DBA教你Oracle开发与优化——性能优化部分 1 autotrace set autotrace on 2 使用SQL调优顾问 删除掉bigtab和smalltab上的所有索引: declare my_task_name varchar2(30); my_sqltext clob; begin my_sqltext := 'select count(*) from

Oracle 11G CRUD操作监控单个表

前言:    线上oracle数据库有张表的数据有些乱,依据应用db的log和应用的log也没有检查出来谁改动了.所以决定把这张单表做个具体的insert.update.delete监控.一:使用数据库自带的审计功能1,查看审计功能是否启动SQL> show parameter audit NAME     TYPE VALUE------------------------------------ ----------- ------------------------------audit_

ORACLE 11G 禁用 SQL TUNING ADVISOR

生产上有一套11g数据库alert.log报错ORA-16957: SQL Analyze time limit interrupt. 查询MOS相关文档Troubleshooting: ORA-16957: "SQL Analyze time limit interrupt" Errors (文档 ID 1275248.1) The ORA-16957 error is an internal error code used to indicate that SQL Tuning T

ORACLE 11G SPM(SQL PLAN manager)浅析

11g推出的SPM是一种主动的稳定执行计划的手段,能够保证只有被验证过的执行计划才会被启用.SPM既能够主动的稳定执行计划,又保留了继续使用新的执行效率更高的执行计划的机会. 启用SPM后,每一个SQL都会存在对应的SQL PLAN Baseline,存储在DBA_SQL_PLAN_BASELINES视图. 该视图的enable和accept列均为YES的SQL PLAN Baseline所对应的执行计划才会被执行.如果有超过1个以上的均为YES,那么oracle会选择其中cost值最小的为执行

Oracle 11g 禁用 SQL Tuning Advisor 与 auto space advisor

生产上有一套11g数据库alert.log报错ORA-16957: SQL Analyze time limit interrupt.  查询MOS相关文档Troubleshooting: ORA-16957: "SQL Analyze time limit interrupt" Errors (文档 ID 1275248.1)    The ORA-16957 error is an internal error code used to indicate that SQL Tuni

In Oracle 11g, how to change the order of the results of a sql without “order by”?(转)

oracle 11g 当sql语句中不加order by的时候,好像是按rowid的顺序返回结果的.我也看过一些相关的文档,oracle的官方意思就是不加order by,就不保证输出的顺序. 那么,问题来了:如果现在我select XXX,一组结果出来,顺序是.......A....B.....那么接下来我做什么操作,再做同样一句select,怎么才能让结果变成....B...A.....Notice1: 操作中请勿修改表的主键,不要用DDL,只用select * from A;得到结果Not

Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置

之前我们讨论过<Linux Oracle 11g dataguard物理standby 配置过程>, 但是在实际过程中会遇到不同的问题,首先我们讨论下ORACLE DATAGUARD的三种模式, 保护最大化:这种模式的配置可以保证主库和备库的同步,任何情况下主库的损毁都不会导致已提交数据的丢失.如果主库和备库之间的网络出现问题,或者备库本身出现问题,都会导致主库停止数据处理. 可用最大化:这种模式和上面一种类似,也是会保证主库和备库的同步,区别在于,当网络或备库不可用时,主库仍然可以继续处理.

使用instantclient_11_2 和PL/SQL Developer工具包连接oracle 11g远程数据库

本文转自CSDN博客,http://blog.csdn.net/helifengwell/archive/2010/08/18/5820434.aspx 1,先到Oracle站点下载Instant Client : http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html 依据你的操作系统选择不同的Instant Client版本号 下载回是一个压缩文件,解压之后的文件夹叫:D:/i