监控某个Session各SQL语句的执行时间
【IT168 技术文档】对数据库调优,想对每条SQL语句的执行时间作个统计,请问有什么方法可以看到?如果你也有类似这样的问题,那就参考下本文吧
1、设时间统计为true,设置max_dump_file_size为unlimited
a、如果是你自己的session
SQL> alter session set timed_statistics=true;
SQL> alter session set max_dump_file_size=unlimited;
b、如果是其它session,则你首先要找出其sid及serial#,然后
SQL>execute dbms_system.SET_BOOL_PARAM_IN_SESSION(sid,serial#,'timed_statistics',true);
SQL>execute dbms_system.SET_INT_PARAM_IN_SESSION(sid,serial#,'max_dump_file_size',2147483647);
2、设置sql_trace为true,打开跟踪
a、如果是你自己的session
SQL> alter session set sql_trace=true;
Session altered.
b、如果是其它session,则你首先要找出其sid及serial#,然后
SQL>execute dbms_system.SET_SQL_TRACE_IN_SESSION(sid,serial#,true); 或
SQL>execute dbms_system.SET_EV(sid,serial#,10046,1'');
3、随便执行一些sql
SQL> select * from ee;
![]()
SDFSDFSDF
----------
aaaaa
bbbbb
![]()
SQL> select * from tab;
![]()
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
COUNTRIES TABLE
DEPARTMENTS TABLE
EE TABLE
EMPLOYEES TABLE
EMP_DETAILS_VIEW VIEW
JOBS TABLE
JOB_HISTORY TABLE
LOCATIONS TABLE
NEW_EMP TABLE
NEW_EMP1 TABLE
REGIONS TABLE
![]()
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SSDFSDF TABLE
S_DEPT TABLE
![]()
13 rows selected.
4、关闭sql_trace
a、自己的session
SQL> alter session set sql_trace=false;
Session altered.
b、其它session
SQL>execute dbms_system.SET_SQL_TRACE_IN_SESSION(sid,serial#,false); 或
SQL>execute dbms_system.SET_EV(sid,serial#,0,0,'');
5、查找生成的trace文件
SQL> show user
USER is "SYS"
SQL> select sid,paddr from v$session where username='HR'
SQL> /
SID PADDR
---------- --------
9 51A00BD8
![]()
SQL> select spid from v$process where addr='51A00BD8';
SPID
------------
6321
![]()
SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
![]()
oracleyang:/opt/oracle/admin/ocm1/udump> ls -l *6321*
-rw-r----- 1 oracle dba 7521 2006-03-17 13:27 ocm1_ora_6321.trc
6、用tkprof解析一下,sys=no是关掉系统视图查找的显示
oracle@yang:/opt/oracle/admin/ocm1/udump> tkprof ocm1_ora_6321.trc 1.txt sys=no
![]()
TKPROF: Release 9.2.0.4.0 - Production on Fri Mar 17 13:32:31 2006
![]()
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
7、查看结果
oracle@yang:/opt/oracle/admin/ocm1/udump>vi 1.txt
截取部分输入,通过elapsed列可以看到在parse、execute、fetch及commit、rollback各部分各自花费了多少时间。
select * from ee
![]()
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.02 0.01 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 0 4 0 2
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.02 0.01 0 4 0 2
注:10046的level 1相当于sql_trace置为True。
0
相关文章
