oracle 执行计划(一) 如何查看执行计划(二)

2014-11-24 17:08:36 · 作者: · 浏览: 1
e=true;
alter session set sql_trace=false;

当前实例的sql trace
alter system set sql_trace=true;
alter system set sql_trace=flase;

(2)dbms_session包
当前会话的sql trace
exec dbms_session.set_sql_trace(true);
exec dbms_session.set_sql_trace(false);

(3)dbms_system and dbms_monitor包
在10R2以前,oracle数据库使用dbms_system来实现对其他session的sql trace,该包功有很多功能,但也存在着很多缺陷。在10GR2以后,数据库默认没有dbms_system包,dbms_system 包也从官方文档中消失了。取而代之的是dbms_monitor,oracle极力推荐使用dbms_monitor包。

使用dbms_system指定会话的sql trace
exec dbms_system.set_sql_trace_in_session(sid,serial#,true);

我们主要介绍下dbms_monitor包:

统计信息收集
1. 以客户端标识符,收集统计信息

EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_ENABLE(client_id => 'OE.OE');--client_id in the CLIENT_IDENTIFIER column in V$SESSION.
EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_DISABLE(client_id => 'OE.OE');

2.收集服务,模块,行为统计信息

EXECUTE DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(service_name => 'ACCTG', module_name => 'PAYROLL');
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_STAT_DISABLE(service_name => 'ACCTG', module_name => 'GLEDGER', action_name => 'INSERT ITEM');

3.查看收集的统计信息
The accumulated global statistics for the currently enabled statistics can be displayed with the DBA_ENABLED_AGGREGATIONS view.
The accumulated statistics for a specified client identifier can be displayed in the V$CLIENT_STATS view.
The accumulated statistics for a specified service can be displayed in V$SERVICE_STATS view.
The accumulated statistics for a combination of specified service, module, and action can be displayed in the V$SERV_MOD_ACT_STATS view.
The accumulated statistics for elapsed time of database calls and for CPU use can be displayed in the V$SERVICEMETRIC view.

端到端的sql trace
1.客户端标识符级trace
DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE
DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE

2.服务,模块,acitve级trace
DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE
DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE

例:
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => 'ACCTG', module_name => 'PAYROLL', waits => TRUE,binds => FALSE,instance_name => 'inst1');

3.会话级trace
DBMS_MONITOR.SESSION_TRACE_ENABLE(
session_id IN BINARY_INTEGER DEFAULT NULL,
serial_num IN BINARY_INTEGER DEFAULT NULL,
waits IN BOOLEAN DEFAULT TRUE,
binds IN BOOLEAN DEFAULT FALSE,
plan_stat IN VARCHAR2 DEFAULT NULL);

DBMS_MONITOR.SESSION_TRACE_DISABLE(
session_id IN BINARY_INTEGER DEFAULT NULL,
serial_num IN BINARY_INTEGER DEFAULT NULL);

例:
EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 27, serial_num => 60,waits => TRUE, binds => FALSE);

4.实例,数据库级trace
DBMS_MONITOR.DATABASE_TRACE_ENABLE(
waits IN BOOLEAN DEFAULT TRUE,
binds IN BOOLEAN DEFAULT FALSE,
instance_name IN VARCHAR2 DEFAULT NULL,
plan_stat IN VARCHAR2 DEFAULT NULL);

DBMS_MONITOR.DATABASE_TRACE_DISABLE(
instance_name IN VARCHAR2 DEFAULT NULL);

例:
EXECUTE DBMS_MONITOR.DATABASE_TRACE_ENABLE(waits => TRUE, binds => FALSE, instance_name => 'inst1');