博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

CLEANER

如果你的工作,机器也可以做。那总有一天,你也要变成机器。
   yuechaotian.cublog.cn
关于作者  
name:yuechaotian
employment:coder
age:25
from:NEU
about me:a retardate
email:yuechaotian(at)gmail.com
msn:yuechaotian(at)hotmail.com

我的分类  




关于 SQL 优化
一个对用户响应时间要求并不高的 MIS 系统(基于 Oracle),仍会存在响应缓慢的模块,而且会是相当的慢。10 分钟?半小时?1小时?还是更长时间?
 
查找执行缓慢的 SQL 的方法很多:sql_trace 参数、dbms_system.set_sql_trace_in_session 包、statspack报告、v$session_wait.event 事件……
 
如果一个模块执行太慢,那么最简单的方法就是查询 v$session_wait.event 事件,然后抓取到这个 SQL,以及它所处于的等待事件:
 
SELECT w.EVENT, a.SQL_TEXT
  FROM v$session s, v$session_wait w, v$sqlarea a
 WHERE s.sid=<sid>
   AND s.sid = w.sid
   AND s.SQL_ADDRESS = a.ADDRESS;
 
优化完毕这个大 SQL,然后再微调系统。这时候使用 sql_trace 或 statspack 报告是一个不错的方法。
 
最近做几个模块的优化,很容易找到出问题的 SQL。做 Oracle 开发,不能想当然地写 SQL,虽然它逻辑上正确。在 1w 条数据的表中执行,和在 100w 条数据的表中执行,是不一样的。
 
道理很简单,可惜编码的时候,就可能忽略这点。

 发表于: 2008-05-22,修改于: 2008-05-22 14:58 已浏览417次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:15.29041

京ICP证041476号