="t18">
在诊断数据库系统性能
![](/icons/94733de.gif)
过程中
![](/icons/94733dou.gif)
总会涉及到跟踪效率低下
![](/icons/94733de.gif)
SQL语句
![](/icons/94733dou.gif)
现在就如何跟踪SQL语句来做
![](/icons/94733yi.gif)
个简单
![](/icons/94733de.gif)
整理总结
![](/icons/94733dou2.gif)
假如我们可以修改应用系统
![](/icons/94733de.gif)
源代码
![](/icons/94733dou.gif)
则可以直接在
![](/icons/94733chengxu.gif)
中加入如下
![](/icons/94733de.gif)
语句:
1)alter session
![](/icons/94733set.gif)
timed_statistics=true;
/*适用于Oracle 7.3以后
![](/icons/94733de.gif)
版本*/
2)alter session
![](/icons/94733set.gif)
max_dump_file_size=unlimited ;
/*适用于Oracle 7.3以后
![](/icons/94733de.gif)
版本*/
3)alter session
![](/icons/94733set.gif)
tracefile_ident
![](/icons/94733if.gif)
ier='POX20031031a';
/*适用于Oracle 8.1.7以后
![](/icons/94733de.gif)
版本*/
4)alter session
![](/icons/94733set.gif)
events '10046 trace name context forever
![](/icons/94733dou.gif)
level 8';
/*在这里编写应用
![](/icons/94733chengxu.gif)
![](/icons/94733de.gif)
代码*/
小虫网络技术http://www.chinaccna.com
5)alter session
![](/icons/94733set.gif)
events '10046 trace name context off';
在上述语句中
![](/icons/94733dou.gif)
语句1)是把该会话
![](/icons/94733de.gif)
时间统计打开
![](/icons/94733dou.gif)
该参数默认为false.在Oracle 7.3的前
![](/icons/94733de.gif)
版本中
![](/icons/94733dou.gif)
不能在会话级设置该参数
![](/icons/94733dou.gif)
只能修改
![](/icons/94733chushi.gif)
化文件然后重新启动数据库
![](/icons/94733dou.gif)
这样将在例子级打开时间统计
![](/icons/94733dou2.gif)
语句2)是把跟踪文件
![](/icons/94733de.gif)
大小设置成操作系统所答应
![](/icons/94733de.gif)
最大尺寸
![](/icons/94733dou.gif)
这样可以防止跟踪文件在完成所需要
![](/icons/94733de.gif)
跟踪的前被填布满
![](/icons/94733dou.gif)
此外需要注重
![](/icons/94733de.gif)
是确保存放跟踪文件
![](/icons/94733de.gif)
目录要有足够
![](/icons/94733de.gif)
空间
![](/icons/94733dou.gif)
否则将会收到“文件系统已满”
![](/icons/94733cuowu.gif)
![](/icons/94733dou2.gif)
语句3)
![](/icons/94733de.gif)
作用是使生成
![](/icons/94733de.gif)
跟踪文件名称中包含'POX20031031a'
![](/icons/94733zifu.gif)
串
![](/icons/94733dou.gif)
这样可以使你很轻易
![](/icons/94733de.gif)
找到所需
![](/icons/94733de.gif)
跟踪文件
![](/icons/94733dou.gif)
该参数在Oracle 8.1.7的后可用
![](/icons/94733dou2.gif)
语句4)和语句5)
![](/icons/94733de.gif)
作用分别是打开和关闭跟sql跟踪
![](/icons/94733dou.gif)
你可以在这两个语句的间写入应用
![](/icons/94733chengxu.gif)
![](/icons/94733de.gif)
代码
![](/icons/94733dou.gif)
这些代码
![](/icons/94733de.gif)
执行情况都将被跟踪
![](/icons/94733dou2.gif)
需要注重
![](/icons/94733de.gif)
是语句4)
![](/icons/94733de.gif)
level要害字
![](/icons/94733dou.gif)
它用来指定跟踪级别
![](/icons/94733dou.gif)
![](/icons/94733yi.gif)
共有0
![](/icons/94733dou.gif)
1
![](/icons/94733dou.gif)
2
![](/icons/94733dou.gif)
4
![](/icons/94733dou.gif)
8
![](/icons/94733dou.gif)
12 6个级别可以设置
![](/icons/94733dou.gif)
0相当于关闭跟踪;1是输出
![](/icons/94733yi.gif)
般
![](/icons/94733de.gif)
跟踪信息
![](/icons/94733dou.gif)
不包括绑定变量和等待信息;2和1相同;4是在级别1
![](/icons/94733de.gif)
基础上增加绑定变量信息;8是在级别1
![](/icons/94733de.gif)
基础上增加等待信息;级别12是输出包含级别1
![](/icons/94733dou.gif)
4
![](/icons/94733dou.gif)
8
![](/icons/94733de.gif)
所有信息
![](/icons/94733dou2.gif)
假如应用
![](/icons/94733chengxu.gif)
![](/icons/94733de.gif)
代码无法修改或者是不想去修改
![](/icons/94733dou.gif)
则可以在其他会话中打开对特定会话
![](/icons/94733de.gif)
跟踪
![](/icons/94733dou.gif)
思路方法如下:
1)sys.dbms_system.
![](/icons/94733set.gif)
_bool_param_in_session
(:sid
![](/icons/94733dou.gif)
:serial
![](/icons/94733dou.gif)
'timed_statistics'
![](/icons/94733dou.gif)
true);
2)sys.dbms_system.
![](/icons/94733set.gif)
_
![](/icons/94733int.gif)
_param_in_session
( :sid
![](/icons/94733dou.gif)
:serial
![](/icons/94733dou.gif)
'max_dump_file_size'
![](/icons/94733dou.gif)
2147483647);
打开和关闭跟踪
![](/icons/94733de.gif)
第
![](/icons/94733yi.gif)
种思路方法(Oracle推荐):
3.1)sys.dbms_support.start_trace_in_session
(:sid
![](/icons/94733dou.gif)
:serial
![](/icons/94733dou.gif)
waits=>true
![](/icons/94733dou.gif)
binds=>false);
/* 在此期间运行要跟踪
![](/icons/94733de.gif)
应用
![](/icons/94733chengxu.gif)
*/
4.1)sys.dbms_support.stop_trace_in_session
(:sid
![](/icons/94733dou.gif)
:serial);
打开和关闭跟踪
![](/icons/94733de.gif)
第 2种思路方法:
3.2)sys.dbms_system.
![](/icons/94733set.gif)
_ev
(:sid
![](/icons/94733dou.gif)
:serial
![](/icons/94733dou.gif)
10046
![](/icons/94733dou.gif)
8
![](/icons/94733dou.gif)
'');
/*在此期间运行要跟踪
![](/icons/94733de.gif)
应用
![](/icons/94733chengxu.gif)
*/
3.2)sys.dbms_system.
![](/icons/94733set.gif)
_ev
(:sid
![](/icons/94733dou.gif)
:serial
![](/icons/94733dou.gif)
10046
![](/icons/94733dou.gif)
0
![](/icons/94733dou.gif)
'');
以上语句中
![](/icons/94733de.gif)
:sid和:serial分别代表所要跟踪
![](/icons/94733de.gif)
会话
![](/icons/94733de.gif)
ID和序列号
![](/icons/94733dou.gif)
这些信息可以从V$SESSION视图
![](/icons/94733de.gif)
SID和SERIAL#列获得
![](/icons/94733dou2.gif)
打开关闭跟踪中第
![](/icons/94733yi.gif)
种思路方法
![](/icons/94733de.gif)
好处是你不用自己写10046这个事件号
![](/icons/94733dou.gif)
这样可以减少
![](/icons/94733cuowu.gif)
![](/icons/94733dou.gif)
但是dbms_support
![](/icons/94733chengxu.gif)
包在你
![](/icons/94733de.gif)
数据库中可能会不存在
![](/icons/94733dou.gif)
这样就只有用第 2种思路方法了
![](/icons/94733dou2.gif)
到现在为止
![](/icons/94733dou.gif)
我们已经生成了所需要
![](/icons/94733de.gif)
跟踪文件
![](/icons/94733dou.gif)
然后我们需要找到该文件来进行分析
![](/icons/94733dou2.gif)
跟踪文件
![](/icons/94733de.gif)
存放位置只有两种可能
![](/icons/94733dou.gif)
Oracle参数USER_DUMP_DEST 或者BACKGROUND_DUMP_DEST指定
![](/icons/94733de.gif)
目录;文件名称根据区别
![](/icons/94733de.gif)
平台会有所区别
![](/icons/94733dou.gif)
但是在文件名中都会包含会话所对应
![](/icons/94733de.gif)
操作系统进程(线程)号
![](/icons/94733dou.gif)
也就是V$PROCESS
![](/icons/94733de.gif)
SPID列(V$PROCESS.SPID)
![](/icons/94733dou.gif)
该信息可以通过 v$process.addr和v$session.paddr做表连接查询得到
![](/icons/94733dou2.gif)
例如:select spid from v$process p
![](/icons/94733dou.gif)
v$session s where p.addr=s.paddr and s.sid=:sid and s.serial#=:serial.
本文只对Oracle在使用专用服务器进程(Dedicated Server)模式做了整理总结
![](/icons/94733dou.gif)
至于
![](/icons/94733de.gif)
共享服务器(Shared Server)模式和在应用级使用连接池
![](/icons/94733de.gif)
情况下
![](/icons/94733dou.gif)
收集SQL跟踪信息
![](/icons/94733de.gif)
思路方法会比较复杂
![](/icons/94733dou.gif)
希望有相关经验
![](/icons/94733de.gif)
高手来整理总结