Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1703212
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-05-22 14:58:38

一个对用户响应时间要求并不高的 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=
   AND s.sid = w.sid
   AND s.SQL_ADDRESS = a.ADDRESS;
 
优化完毕这个大 SQL,然后再微调系统。这时候使用 sql_trace 或 statspack 报告是一个不错的方法。
 
最近做几个模块的优化,很容易找到出问题的 SQL。做 Oracle 开发,不能想当然地写 SQL,虽然它逻辑上正确。在 1w 条数据的表中执行,和在 100w 条数据的表中执行,是不一样的。
 
道理很简单,可惜编码的时候,就可能忽略这点。
阅读(1739) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~