技术开发 频道

监控某个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
相关文章