You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取指定时间段内Oracle数据库运行查询的所有执行计划

问题解答

执行alter session set statistics_level = 'all'无法实现获取某一时间段内Oracle数据库上运行的所有查询的全部执行计划的需求,核心原因如下:

  • 该参数是会话级配置,仅对执行该语句的当前会话生效,其他会话运行的SQL完全不受该配置影响,无法捕获跨会话的执行计划。
  • 即使是当前会话,该配置的作用仅为让Oracle在SQL执行时收集更详细的运行时统计数据(如实际返回行数、逻辑读、物理读等),本身不会自动持久化存储所有执行过的SQL的执行计划,仍需手动查询单条SQL的执行计划,无法实现全量自动捕获。
  • 你给出的语句本身存在语法错误:单引号包含了结尾的分号,正确的语法应为alter session set statistics_level = 'all';,原语句执行会直接报错。

若要实现捕获指定时间段全库所有查询的执行计划,可采用以下两种成熟方案:

  • 开启Oracle AWR(自动工作量仓库),调整快照采集间隔与保留周期,在目标时间段结束后,可从DBA_HIST_SQL_PLAN视图查询该快照区间内捕获的SQL执行计划。如果需要捕获全部SQL而非默认的Top负载SQL,需额外调整AWR的捕获策略。
  • 临时统计场景下,也可结合V$SQL和V$SQL_PLAN视图查询共享池中未被刷出的SQL执行计划,若要避免数据丢失,可在目标时间段开启数据库级SQL追踪或配置SQL执行审计。

内容的提问来源于stack exchange,提问作者Ed Heal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 13:36:10