动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.ORACLE 11g新特性简介.
.oracle数据库 exp/imp命令详解.
.Blockdump.
.Oracle选择Solaris10作为开发部署.
.linux下安装oracle9i.
.数据库查询结果的动态排序.
.甲骨文进行紧急升级 共发布33个补.
.Oracle AS 10g 下部署 ColdFusio.
.如何在linux环境下启动时打开num.
.Oracle 9I安装使用笔记.
.深入探讨Oracle数据库10g的Shrin.
.32bit 和 64bit 的问题.
.ORACLE 10g调度例行任务解放DBA时.
.学习:怎样才是一个真正的DBA?.
.Oracle中实现大量数据快速转移数.
.Oracle调优与深入之灌水篇.
.在异种机之间实现数据库迁移.
.Oracle817 版本 不同字符集之间的.
.TOP 20 ISSUES FOR ALL GATEWAYS.
.教你快速掌握Oracle数据库结构的.

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

发表日期:2008-2-9 |



  我们在确定应用程序性能的时候,更多地会关注其中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操作。
上一篇:一条SQL语句的优化过程 人气:655
下一篇:SQL 调试指南 人气:433
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号