• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
获得应用程序所执行的SQL语句
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
获得应用程序所执行的SQL语句
软件发布 获得应用程序所执行的SQL语句
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 认证考试 >> Oracle认证 >> Oracle指导 >> 获得应用程序所执行的SQL语句

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

添加时间: 2008-4-18 23:20:29  作者: Oracle指导  阅读次数:9   来源: http://www.d9soft.com

       

  我们在确定应用程序性能的时候,更多地会关注其中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();
  sql = "select a.login_id, a.contact_id,from im_contact a where a.login_id = ?";
  stmt = conn.prepareStatement(sql);
  stmt.setString(1, loginId);
  rs = stmt.executeQuery();
  log.debug("SQL: " + sql);;
  ......
  } catch (SQLException se) {
  ....
  
  } finally {
  ....
  }
  }
  
  如果你采用hibernate实现O/R Mapping的话,只需要在hibernate.cfg.xml文件中修改show_sql为true,hibernate就会打印出sql的语句。
  <property name="show_sql">true</property>
  
  很显然,三种方法各有自己的优点和适用场合。
  
  方法一,适合于oracle数据库,获得的信息丰富,不仅有sql语句,而且包括了各条sql语句执行的情况,非常方便我们调优。
  
  方法二和方法三都会打印出执行的sql语句,它与数据库平台无关,不过不能得到相关的sql性能数据。对于方法三,如果我们系统不是采用jdbc进行数据库操作的话,比如EJB的Entity Bean,日志中就不会打印出相应的sql操作。不过EJB的Entity Bean目前已经被认为是失败之举,你可以在项目的重构中可以把这块重构掉,这个体外话了。
  
  大家可以根据自己项目的情况,选择合适的方法来跟踪应用产生的SQL操作。

 

上下文章:

 

上一篇文章: 讲述电信禁止路由上网的破解方法 下一篇文章: exp导出blob, clob字段的表遭遇Bug

相关文章:

  • 城域网光缆线路设计与技术应用
  • AV杀手变种强行关闭杀度软件与下载恶意程序
  • 在MySQL中获得更好的全文搜索结果(3)
  • 在MySQL中获得更好的全文搜索结果(4)完
  • 数据库人员手边系列:ORACLE应用源码

相关软件:

  • FTP远程文件同步更新程序 1.0.0.0
  • 关闭有害木马端口程序
  • 终极程序加密器 2.98
  • UC263成人视频小电影程序
  • 民事吉日查询程序 3.4
  • 文件查重程序 search same files V1.22

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

Oracle认证分类导航

  • Oracle动态
  • Oracle指导
  • Oracle题库

本类经典文章推荐

  • Oracle中关于逻辑备份与恢复
  • Oracle开发人员JAVA存储过程
  • 为数据库的表自动生成行号
  • Oracle中的OOP概念
  • 用java从oracle取数
  • 冷备份移植到另一台Solaris机器上
  • 如何将excel数据导入oracle中
  • Oracle10.2g安装记录
  • 数据库监控工具ForOraclev1.2
  • oracle双机群集系统

Oracle指导阅读排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle常用的OCI函数上
  • Oracle企业管理器(OEM 2.1)使用...
  • Tomcat+SQLServer连接池配置
  • 如何将excel数据导入oracle中
  • 如何取出某一用户的密码 再原样改...
  • 实例:Oracle导出EXCEL文件
  • 案例学习Oracle错误:ORA-00604
  • 案例学习Oracle错误:ORA-00060

Oracle认证阅读总排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle常用的OCI函数上
  • 在ORACLE的存储过程中如何做简单的...
  • Oracle企业管理器(OEM 2.1)使用...
  • Tomcat+SQLServer连接池配置
  • 如何将excel数据导入oracle中
  • AIX下自动启动Oracle数据库与监听...
  • 如何取出某一用户的密码 再原样改...
  • 实例:Oracle导出EXCEL文件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有