1 Sql Monitor介绍
这是Oracle 11G新特性,提供实时SQL监控。默认情况是自动启动的。当SQL并行执行时,会立即被实时监控到,或者当SQL单进程运行时,如果消耗超过5秒的CPU或I/O时间,它也会被监控到,当然也可以通过hint强行监控指定的SQL。
监控的信息包括:执行时间,CPU时间,读写,I/O等待时间和其他一些等待时间。这些数据几乎是实时刷新的。这些数据都存储在V$SQL_MONITOR/V$SQL_PLAN_MONITOR视图中,保存时间长短由空间大小来决定,数但是至少保存一分钟。
2 启用Sql Monitor
默认Sql Monitor是开启的。
2.1 启用条件:
STATISTICS_LEVEL设置为TYPICAL或者ALL,两者没有区别。
CONTROL_MANAGEMENT_PACK_ACCESS参数设置为’DIAGNOSTIC+TUNING’ 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_S ----------------- ---------------- ---------------- ------------------ --------- SQL Monitoring ENABLED ENABLED TYPICAL YES
SQL > show parameter control_manage NAME TYPE VALUE ------------------------------------ ------------ ---------------------- control_management_pack_access string DIAGNOSTIC+TUNING
3 HINT强行监控SQL
强制对某个SQL使用实时监控可以如下改写SQL:
select /*+ monitor */ count(*) from scott.emp where sal > 5000;
指定不执行实时监控:
select /*+ no_monitor */ count(*) from scott.emp where sal > 5000;
4 查看监控信息
4.1 常用的传入参数:
SQL_ID: 如果是NULL,则监控最近一条SQL。可以通过视图来查看V$sql_monitor
REPORT_LEVEL:选项有 'NONE', 'BASIC', 'TYPICAL' or 'ALL',
TYPE:可以指定生成:TEXT、HTML、XML、ACTIVE 模式的报告。ACTIVE是对好的选择对于并行查询,需要联网
SESSION_ID : 可以通过SYS_CONTEXT('USERENV','SID') from dual来查看当前会话的ID
具体参数:
DBMS_SQLTUNE.REPORT_SQL_MONITOR( sql_id IN VARCHAR2 DEFAULT NULL, dbop_name IN VARCHAR2 DEFAULT NULL, dbop_exec_id IN NUMBER DEFAULT NULL, session_id IN NUMBER DEFAULT NULL, session_serial IN NUMBER DEFAULT NULL, sql_exec_start IN DATE DEFAULT NULL, sql_exec_id IN NUMBER DEFAULT NULL, inst_id IN NUMBER DEFAULT NULL, start_time_filter IN DATE DEFAULT NULL, end_time_filter IN DATE DEFAULT NULL, instance_id_filter IN NUMBER DEFAULT NULL, parallel_filter IN VARCHAR2 DEFAULT NULL, plan_line_filter IN NUMBER DEFAULT NULL, event_detail IN VARCHAR2 DEFAULT 'YES', bucket_max_count IN NUMBER DEFAULT 128, bucket_interval IN NUMBER DEFAULT NULL, base_path IN VARCHAR2 DEFAULT NULL, last_refresh_time IN DATE DEFAULT NULL, report_level IN VARCHAR2 DEFAULT 'TYPICAL', type IN VARCHAR2 DEFAULT 'TEXT', sql_plan_hash_value IN NUMBER DEFAULT NULL) RETURN CLOB;
如果什么参数都不指定,那就默认监控显示最近一条被监控的SQL.
4.2 TEXT模式
SQL>SET LONG 1000000 SQL>SET LONGCHUNKSIZE 1000000 SQL>SET LINESIZE 1000 SQL>SET PAGESIZE 0 SQL>SET TRIM ON SQL>SET TRIMSPOOL ON SQL>SET ECHO OFF SQL>SET FEEDBACK OFF SQL> SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => ' bn963duckk02p', type => 'TEXT') AS report FROM dual; REPORT_SQL_MONITOR -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL Monitoring Report SQL Text ------------------------------ select /*+ monitor */ count(*) from scott.emp where sal > 5000 Global Information ------------------------------ Status : DONE (ALL ROWS) Instance ID : 1 Session : SYS (51:11) REPORT_SQL_MONITOR -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL ID : bn963duckk02p SQL Execution ID : 16777216 Execution Started : 08/23/2016 18:07:35 First Refresh Time : 08/23/2016 18:07:35 Last Refresh Time : 08/23/2016 18:07:35 Duration : .003751s Module/Action : sqlplus@rac1 (TNS V1-V3)/- Service : SYS$USERS Program : sqlplus@rac1 (TNS V1-V3) Fetch Calls : 1 REPORT_SQL_MONITOR -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Global Stats ================================================================= | Elapsed | IO | Other | Fetch | Buffer | Read | Read | | Time(s) | Waits(s) | Waits(s) | Calls | Gets | Reqs | Bytes | ================================================================= | 0.00 | 0.00 | 0.00 | 1 | 6 | 2 | 49152 | ================================================================= SQL Plan Monitoring Details (Plan Hash Value=2083865914) ========================================================================================================================================= | Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Read | Read | Activity | Activity Detail | REPORT_SQL_MONITOR -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | | (Estim) | | Active(s) | Active | | (Actual) | Reqs | Bytes | (%) | (# samples) | ========================================================================================================================================= | 0 | SELECT STATEMENT | | | | 1 | +0 | 1 | 1 | | | | | | 1 | SORT AGGREGATE | | 1 | | 1 | +0 | 1 | 1 | | | | | | 2 | TABLE ACCESS FULL | EMP | 1 | 3 | | | 1 | | 2 | 49152 | | |
4.3 ACTIVE模式:
最容易阅读的模式
SQL>SET LONG 1000000 SQL>SET FEEDBACK OFF SQL>spool monitor_sql.html SQL> SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => '49z1nngjfdp9j',type=> ACTIVE) AS report FROM dual; SQL>spool off
4.4 生成所有SQL的概要
所有存储在V$SQL_MONITOR中的sql都会显示出来。
SQL> SET LONG 1000000 SQL> SET LONGCHUNKSIZE 1000000 SQL> SET LINESIZE 1000 SQL> SET PAGESIZE 0 SQL> SET TRIM ON SQL> SET TRIMSPOOL ON SQL> SET ECHO OFF SQL> SET FEEDBACK OFF SQL> SELECT DBMS_SQLTUNE.report_sql_monitor_list(type =>'TEXT',report_level => 'ALL') AS report FROM dual;
版权声明:本文为博主原创文章,未经博主允许不得转载。
sql monitor
- 上一篇:12C 用户管理与赋权
- 下一篇:DBA_FREE_SPACE查询慢的原因及解决方法