如何监控 SQL语句的执行时间?

[复制链接]
查看11 | 回复6 | 2012-10-9 18:05:07 | 显示全部楼层 |阅读模式
最近在对数据库调优,想对每条SQL语句的执行时间作个统计,请问有什么方法可以看到?
回复

使用道具 举报

千问 | 2012-10-9 18:05:07 | 显示全部楼层
没人知道吗?在线等
回复

使用道具 举报

千问 | 2012-10-9 18:05:07 | 显示全部楼层
如果你在sqlplus里执行,就用set timing on
如果你要追踪应用,应该能用10046事件或者代码里插日志的方式解决吧,最好是你的应用代码能产生log,且有打开和关闭功能,这样就很方便了
回复

使用道具 举报

千问 | 2012-10-9 18:05:07 | 显示全部楼层
我也很想知道具体怎么做?
回复

使用道具 举报

千问 | 2012-10-9 18:05:07 | 显示全部楼层
最初由 ccnaide 发布
[B]最近在对数据库调优,想对每条SQL语句的执行时间作个统计,请问有什么方法可以看到? [/B]

使用10046 的level 1及sql trace都可以,其实这两者些时是相等的。
如下给出一个eg:
======================================================
1、设时间统计为true
SQL> show parameter timed_statistics
NAME
TYPE
VALUE
------------------------------------ --------------- ------------------------------
timed_statistics
boolean TRUE
2、设置sql_trace为true,打开跟踪
SQL> alter session set sql_trace=true;
Session altered.
如果想跟踪别的session,首先要找到它的sid的serial#,然后如下操作
打开:SQL>execute dbms_system.SET_SQL_TRACE_IN_SESSION(sid,serial#,true);
关闭: SQL>execute dbms_system.SET_SQL_TRACE_IN_SESSION(sid,serial#,false);

打开:SQL>execute dbms_system.SET_EV(sid,serial#,10046,1'');
关闭: SQL>execute dbms_system.SET_EV(sid,serial#,0,0,'');
3、随便执行一些sql
SQL> select * from ee;
SDFSDFSDF
----------
aaaaa
bbbbb
SQL> select * from tab;
TNAME
TABTYPECLUSTERID
------------------------------ ------- ----------
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
TABTYPECLUSTERID
------------------------------ ------- ----------
SSDFSDF
TABLE
S_DEPT
TABLE
13 rows selected.
4、关闭sql_trace
SQL> alter session set sql_trace=false;
Session altered.
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
oracle@yang:~/yang1> cd $ORACLE_HOME
oracle@yang:/opt/oracle/product/9ir2> cd $ORACLE_BASE
oracle@yang:/opt/oracle> cd admin
oracle@yang:/opt/oracle/admin/ocm1> cd udump
oracle@yang:/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
截取部分输入,可以看到在parse、execute、fetch各部分各自花费了多少时间。
select *
from
ee

call count cpuelapsed diskquerycurrentrows
------- -------------- ---------- ---------- ---------- --------------------
Parse10.02 0.01
0
0
0 0
Execute10.00 0.00
0
0
0 0
Fetch20.00 0.00
0
4
0 2
------- -------------- ---------- ---------- ---------- --------------------
total40.02 0.01
0
4
0 2
(完毕)
回复

使用道具 举报

千问 | 2012-10-9 18:05:07 | 显示全部楼层
最初由 ccnaide 发布
[B]最近在对数据库调优,想对每条SQL语句的执行时间作个统计,请问有什么方法可以看到? [/B]

优化总有目的的把,首先确认问题方向,是什么类型问题,
如果是IO 争用,那么优化物理/逻辑IO最大 的那些,
如果是sql解析,就要修改程序语句写法。
每条sql 都看有那么多精力吗?

这个语句可以得到sql的很多信息

[PHP]SELECT sql_text, username, disk_reads_per_exec, buffer_gets, disk_reads,
parse_calls, sorts, executions, rows_processed, hit_ratio,
first_load_time, sharable_mem, persistent_mem, runtime_mem, cpu_time,
elapsed_time, address, hash_value
FROM (SELECT sql_text, b.username,

ROUND ((a.disk_reads

/ DECODE (a.executions, 0, 1, a.executions)

),

2

) disk_reads_per_exec,

a.disk_reads, a.buffer_gets, a.parse_calls, a.sorts,

a.executions, a.rows_processed,

100

- ROUND (100 * a.disk_reads / GREATEST (a.buffer_gets, 1), 2)

hit_ratio,

a.first_load_time, sharable_mem, persistent_mem, runtime_mem,

cpu_time, elapsed_time, address, hash_value

FROM SYS.v_$sqlarea a, SYS.all_users b
WHERE a.parsing_user_id = b.user_id

AND b.username NOT IN ('SYS', 'SYSTEM')
ORDER BY disk_reads_per_exec DESC)
[/PHP]
回复

使用道具 举报

千问 | 2012-10-9 18:05:07 | 显示全部楼层
将SQL TRACE打开,用tkprof 分析!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行