我必须记录慢查询,让我们说运行时间超过3毫秒的查询 应该记录下来 大多数情况下,这些查询都是SELECT 如何在Oracle中记录它们?
答案 0 :(得分:2)
如果您正在使用AWR,那么将从ASH记录,您只需要使用OEM或手写SQL来挖掘它。
实际上,3ms非常快,在现代硬件上Oracle的响应时间为5-20ms,所有事情都考虑在内。答案 1 :(得分:1)
在应用程序代码中,您可以执行以下操作:
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。
实际上,我不会记录任何花费不到半秒的查询,你几乎可以记录所有内容。
答案 2 :(得分:1)
如果你想记录慢查询,那么Tony给出的解决方案是好的。 但是,如果您无法修改应用程序的源代码,则可以考虑安装sql间谍。我从来没有这样做但可以轻松完成。请注意,它会降低您的应用程序速度:如果您正在对生产服务器进行故障排除,那么这不是一个好的解决方案。
恕我直言,最好的解决方案不是记录慢查询而是找到它们(差别很微妙...... :))。 Oracle提供了大量工具来查找此类信息: