您的位置:首页 >> 数据库 >> Oracle >> PL/SQL >> 正文
PL/SQL RSS
 

获得应用程序所执行的SQL语句

http://www.rdxx.com 05年11月18日 00:00 我要投稿

关键词: 执行 , SQL语句 , 应用程序 , SQL , 应用 , 程序 , 语句

  我们在确定应用程序性能的时候,更多地会关注其中SQL语句的执行情况。通常应用的性能瓶颈会在数据库这边,因此数据库的sql语句是我们优化的重点。
  
  要对sql语句进行优化,首先要知道应用程序执行了哪些SQL语句。下面我介绍三种方法来获得应用程序所执行的SQL语句。
  
  方法一:如果你采用的数据库是oracle的话,那么可以利用oracle本身的10046事件跟踪SQL语句。步骤如下:
  
  1、首先获得spid、sid、serial#,machine为你的机器名
  
  SQL> select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr = b.addr and a.machine='yz';
  
  SPID        SID  SERIAL# MACHINE
  
  9497         49    3406   yz
  
  2、利用10046事件开始跟踪
  
  SQL>execute sys.dbms_system.set_ev(49, 3406,10046,1,'');
  PL/SQL procedure successfully completed.
  
  3、这时候你可以运行应用程序,对于web 应用你就可以打开你认为性能比较差页面。
  
  4、如果你要查看这段时间执行了哪些sql语句,可以执行下面的语句结束跟踪
  
  SQL>execute sys.dbms_system.set_ev(49,3406,10046,0,'');
  
  PL/SQL procedure successfully completed.
  
  5、SQL trace 工具会收集这个过程中执行的SQL的性能状态数据,记录到一个跟踪文件中.这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等。
  
  6、这时候你可以通过下面的语句获得产生的跟踪文件所在的目录
  
  SQL> select value from v$parameter where name = 'user_dump_dest';
  
  VALUE
  
  --------------------------------------------------------------------------------
  
  /opt/oracle/admin/ocn/udump
  
  7、在/opt/oracle/admin/ocn/udump下找到yzoracle_ora_9497.trc。9497是你当前应用的spid。
  
  8、注意yzoracle_ora_9497.trc是不可读的,我们需要执行oracle的tkprof命令,将yzoracle_ora_9497.trc转化为我们可读的文本文件。
  
  tkprof yzoracle_ora_9497.trc yzoracle_ora_9497.sql
  
  这样你就可以在yzoracle_ora_9497.sql文件中看到所有的sql语句执行次数,CPU使用时间等数据。
  
  方法二:采用P6Spy
  
  p6spy是一个开源软件,它可以跟踪任何使用JDBC的应用产生的数据库操作。特别适合于监控EJB服务器产生的 SQL statements。
  
  官方网址:http://www.p6spy.com/
  
  目前P6Spy 适用的应用服务器包括JBoss, ATG, Orion, JOnAS, iPlanet, WebLogic, WebSphere, Resin and Tomcat.
  
  下面我介绍一下p6spy在weblogic上安装的步骤:
  
  (1)http://www.p6spy.com/download.html,下载zip包
  
  (2)解压出p6spy.jar spy.properties两个文件
  
  (3)将p6spy.jar 和spy.properties所在目录放入weblogic的classpath
  
  (4)修改spy.properties
  
  realdriver= oracle.jdbc.driver.OracleDriver 数据库驱动程序的名字
  
  (5)在weblogic控制台,修改JDBC-Connection Pool的driver class 类名为com.p6spy.engine.spy.P6SpyDriver
  
  (6)重启weblogic
  
  (7)这样在weblgoic的DOMAIN_HOME目录下的spy.log记录了数据库的访问情况。
  
  方法三:养成良好的编程习惯。在应用的数据访问层DAO的程序中,采用log4j打印出数据库操作的日志,这样你就可以在log中看到执行的sql语句了。
  
  比如:
  
  public List getContactList(String loginId) throws ImContactDAOException {
  try {
  conn = getDataSource().getConnection(

9 7 3 1 2 4 8 :


 
 
标签: 执行 , SQL语句 , 应用程序 , SQL , 应用 , 程序 , 语句 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站