Oracle数据库中跟踪sql语句介绍

寂寞碣石僧人

寂寞碣石僧人

2016-02-19 18:30

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Oracle数据库中跟踪sql语句介绍吧。

  在诊断数据库系统性能的过程中,总会涉及到跟踪效率低下的sql语句,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或模块名称之类的条件,有选择地从大量跟踪文件中抽取出跟踪数据,并将它们保存到一个文件中。该实用程序在共享服务器配置中特别有用,因为调度程序可能把每一个用户请求传递给不同的共享服务器进程,从而为任何给定的会话产生多个跟踪文件。与通过大量跟踪文件发掘信息不同,Oracle数据库10g的trcsess可以让您获得关于单一用户会话的整合后的跟踪信息。现在就如何跟踪sql语句来做一个简单的总结。权做抛砖引玉之用。

  如果我们可以修改应用系统的源代码,则可以直接在程序中加入如下的语句:

  1)alter session set timed_statistics=true; /*适用于Oracle 8.1.7以后的版本*/

  2)alter session set max_dump_file_size=unlimited ; /*适用于Oracle 9i以后的版本*/

  3)alter session set tracefile_identifier='POX20031031a'; /*适用于Oracle 9i以后的版本*/

  4)alter session set events '10046 trace name context forever, level 8';

  /*在这里编写应用程序的代码*/

  5)alter session set events '10046 trace name context off';

  在上述语句中,语句1)是把该会话的时间统计打开,该参数默认为false.在Oracle 9i之前的版本中,不能在会话级设置该参数,只能修改初始化文件然后重新启动数据库,这样将在实例级打开时间统计。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  语句2)是把跟踪文件的大小设置成操作系统所允许的最大尺寸,这样可以防止跟踪文件在完成所需要的跟踪之前被填充满,此外需要注意的是确保存放跟踪文件的目录要有足够的空间,否则将会收到“文件系统已满”错误。

  语句3)的作用是使生成的跟踪文件名称中包含'POX20031031a'字符串,这样可以使你很容易的找到所需的跟踪文件,该参数在Oracle 9i之后可用。

  语句4)和语句5)的作用分别是打开和关闭跟sql跟踪,你可以在这两个语句之间写入应用程序的代码,这些代码的执行情况都将被跟踪。需要注意的是语句4)的level关键字,它用来指定跟踪级别,一共有0,1,2,4,8,12六个级别可以设置,0相当于关闭跟踪;1是输出一般的跟踪信息,不包括绑定变量和等待信息;2和1相同;4是在级别1的基础上增加绑定变量信息;8是在级别1的基础上增加等待信息;级别12是输出包含级别1,4,8的所有信息。

  如果应用程序的代码无法修改或者是不想去修改,则可以在其他会话中打开对特定会话的跟踪,方法如下:

  1)sys.dbms_system.set_bool_param_in_session(:sid, :serial,'timed_statistics', true);

  2)sys.dbms_system.set_int_param_in_session( :sid, :serial,'max_dump_file_size', 2147483647);

  打开和关闭跟踪的第一种方法(oracle推荐):

  3.1)sys.dbms_support.start_trace_in_session(:sid, :serial,waits=true, binds=false);

  /* 在此期间运行要跟踪的应用程序*/

  4.1)sys.dbms_support.stop_trace_in_session(:sid, :serial);

  打开和关闭跟踪的第二种方法:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  3.2)sys.dbms_system.set_ev(:sid, :serial, 10046, 8, '');

  /*在此期间运行要跟踪的应用程序*/

  3.2)sys.dbms_system.set_ev(:sid, :serial, 10046, 0, '');

  以上语句中的:sid和:serial分别代表所要跟踪的会话的ID和序列号,这些信息可以从V$SESSION视图的SID和SERIAL#列获得。打开关闭跟踪中第一种方法的好处是你不用自己写10046这个事件号,这样可以减少错误,但是dbms_support程序包在你的数据库中可能会不存在,这样就只有用第二种方法了。

  到现在为止,我们已经生成了所需要的跟踪文件,然后我们需要找到该文件来进行分析。跟踪文件的存放位置只有两种可能,Oracle参数USER_DUMP_DEST 或者BACKGROUND_DUMP_DEST指定的目录;文件名称根据不同的平台会有所不同,但是在文件名中都会包含会话所对应的操作系统进程(线程)号,也就是V$PROCESS的SPID列(V$PROCESS.SPID) ,该信息可以通过 v$process.addr和v$session.paddr做表连接查询得到。例如:select spid from v$process p,v$session s where p.addr=s.paddr and s.sid=:sid and s.serial#=:serial.

  本文只对Oracle在使用专用服务器进程(Dedicated Server)模式做了总结,至于的共享服务器(Shared Server)模式和在应用级使用连接池的情况下,收集sql跟踪信息的方法会比较复杂,希望有相关经验的高手来总结。

展开更多 50%)
分享

猜你喜欢

Oracle数据库中跟踪sql语句介绍

编程语言 网络编程
Oracle数据库中跟踪sql语句介绍

在Oracle数据库10g中跟踪SQL

编程语言 网络编程
在Oracle数据库10g中跟踪SQL

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server数据库的修复SQL语句

编程语言 网络编程
SQL Server数据库的修复SQL语句

通过SQL语句来备份,还原数据库

编程语言 网络编程
通过SQL语句来备份,还原数据库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

操作数据库结构Sql语句

SQLServer
操作数据库结构Sql语句

ACCESS:跨数据库查询的SQL语句

编程语言 网络编程
ACCESS:跨数据库查询的SQL语句

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

使用CSS选择器创建带图标链接样式

使用CSS选择器创建带图标链接样式

Win8系统怎么开启802.1x网络认证?

Win8系统怎么开启802.1x网络认证?
下拉加载更多内容 ↓