一个对用户响应时间要求并不高的 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) |