首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL_ID、CBO、Optimizer_Mode和计划变更历史

SQL_ID、CBO、Optimizer_Mode和计划变更历史
EN

Stack Overflow用户
提问于 2013-09-16 00:54:20
回答 1查看 978关注 0票数 0

这是一个由四个部分组成的问题

  1. SQL_ID背后的逻辑是什么?。随着时间的推移,同一SQL的值是否会改变?它是否在DB重新启动之间持续存在?还是每一次改变计划都会带来一个新的SQL_ID?
  2. 如何检查特定查询的计划更改历史记录?考虑到SQL_ID,我尝试查询dba_hist_sqlstat表,但它没有给出更改计划的时间和其他细节,以便能够与v$sql_plan表匹配。
  3. 参数optimizer_mode设置为FIRST_ROWS。即使在查看表dba_hist_sqlstat时,它也表示某些SQL_IDs的ALL_ROWS。。。甲骨文可以忽略实例级参数来使用它认为最合适的吗?
  4. 在下午8点到下午2点之间,查询执行得很糟糕。它的执行需要6秒。下午3点之后,查询在<1秒内开始响应。我有显示这一细节的期间的AWR报告。在这两个阶段,DB上的负载没有差别。我怎么能找到这件事的根源?我试图找到的历史计划变化,但感谢更多的反馈,以最好地分析这样的问题。

DB版本是在AIX5.3 64b上运行的Oracle 10.1.0.4

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-10 06:03:00

1.- SQLID是使用基于实际SQL文本的散列函数计算的,它不应随着重新启动或数据库之间的更改而更改--至少相同版本,不同的oracle版本可能具有不同的散列函数,对吗?因此,只要不更改sql文本(这包括空格、逗号和所有内容),SQLID将保持不变。

2.-使用阿瓦尔显示SQL_ID:select * from table(dbms_xplan.display_awr(sql_id => '[your SQL_ID]'));的所有计划

3.- Oracle只有在查询中有OPTIMIZER目标提示时才会这样做。

4.首先,我要看一下这两段时间的前五大时间事件。如果它们是相似的,那么我将对语句的计划历史进行调查,看看它在期间是否发生了变化,以及数据在期间的表现如何。这三个中的一个应该会给你答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18819047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档