【发布时间】:2011-04-28 13:56:45
【问题描述】:
我必须记录慢查询,比如说运行时间超过 3 毫秒的查询 应该被记录 大多数情况下,这些查询是 SELECT 如何将它们登录到 Oracle 中?
【问题讨论】:
-
3 毫秒?哇,我会记录我所有的查询!
标签: performance oracle10g
我必须记录慢查询,比如说运行时间超过 3 毫秒的查询 应该被记录 大多数情况下,这些查询是 SELECT 如何将它们登录到 Oracle 中?
【问题讨论】:
标签: performance oracle10g
如果您使用AWR,这将从 ASH 记录下来,您只需使用 OEM 或手写 SQL 将其挖掘出来。
3ms 确实很快,5-20ms 的响应时间在现代硬件上的 Oracle 中很好,考虑到所有因素。
【讨论】:
在应用程序代码中,您可以执行以下操作:
v_start_time := dbms_utility.get_time();
-- Your query here
-- ...
v_end_time := dbms_utility.get_time();
if v_end_time - v_start_time > v_max_time then
insert into log_table ...;
end if;
dbms_utility.get_time 以 1/100 秒为单位返回时间 - 因此您不能将其用于 3ms 精度。您也许可以改用 SYSTIMESTAMP。
实际上,我不会记录任何花费不到半秒的查询,您会记录几乎所有内容。
【讨论】:
如果您想记录慢速查询,那么 Tony 给出的解决方案是一个不错的解决方案。 但是如果你不能修改你的应用程序的源代码,你可以考虑安装一个 sql spy。我从来没有做过,但很容易做到。请注意,这会降低您的应用程序的速度:如果您正在对生产服务器进行故障排除,那么这不是一个好的解决方案。
恕我直言,最好的解决方案不是记录慢速查询,而是找到它们(区别很细微...... :))。 Oracle 提供了大量工具来查找此类信息:
【讨论】: