问题描述
嗨,汤姆,
我在项目中使用SQL Developer和特定的用户/模式进行Oracle开发工作。
在优化查询时-它在第一次尝试中完成约60秒的执行,因为在随后的运行中需要约10秒。让我们说,我添加了一些过滤条件并再次触发它,它仍然会使用旧的共享池,库缓存,因此完成n少于60秒。我的问题是-如何检查查询在第一次尝试中需要多少时间?
我可以通过-alter系统刷新buffer_cache;?但是,我没有特权。
还有其他方法可以在第一次尝试中检查查询的执行时间。
非常感谢,
Asit
我在项目中使用SQL Developer和特定的用户/模式进行Oracle开发工作。
在优化查询时-它在第一次尝试中完成约60秒的执行,因为在随后的运行中需要约10秒。让我们说,我添加了一些过滤条件并再次触发它,它仍然会使用旧的共享池,库缓存,因此完成n少于60秒。我的问题是-如何检查查询在第一次尝试中需要多少时间?
我可以通过-alter系统刷新buffer_cache;?但是,我没有特权。
还有其他方法可以在第一次尝试中检查查询的执行时间。
非常感谢,
Asit
专家解答
它不太可能是共享池,但更有可能是缓冲区缓存。
通常情况下,我不会过于关心差异,因为在实际生产使用中,您会期望响应时间介于 “无” 缓冲区缓存和 “全” 缓冲区缓存之间 (即10和60秒)。
您可以监视自动跟踪中的 “一致获取” 统计信息,以确定对查询的 * 更改 * 是否产生和改进或回归。
如果您仍然需要查看该查询运行了多长时间,则可以始终签出v $ active_session_history。它将在您的查询处于活动状态的每一秒钟获得一行,因此
应该给你一个大概的细目
通常情况下,我不会过于关心差异,因为在实际生产使用中,您会期望响应时间介于 “无” 缓冲区缓存和 “全” 缓冲区缓存之间 (即10和60秒)。
您可以监视自动跟踪中的 “一致获取” 统计信息,以确定对查询的 * 更改 * 是否产生和改进或回归。
如果您仍然需要查看该查询运行了多长时间,则可以始终签出v $ active_session_history。它将在您的查询处于活动状态的每一秒钟获得一行,因此
select sql_exec_id, count(*) from v$active_session_history where session_id = ... and session_serial# = ... and sql_id = ... group by sql_exec_id
应该给你一个大概的细目
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




