暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 基数反馈与动态采样的区别

askTom 2018-02-06
250

问题描述


嗨,团队,

我想知道基数反馈和动态采样之间的区别。

另外,通过在新计划的基础上生成并在下一个执行计划中使用的精确基数估计,可以提供基数反馈。而动态采样具有与基数反馈相似的功能

基数反馈是否也会导致计划更改,如果可以,我们如何防止它并确定为什么要使用它并停止它




专家解答

动态采样
=

动态采样是数据库对您的查询执行额外的工作,以获取优化器的更好信息,超过字典中可用的统计信息。

例如,如果你有:

从订单中选择 * 其中订单日期> 日期 '2016-01'

那么order_date列的统计信息可能就足够了。

同样,如果我有:

从customer_id = 123的订单中选择 *

那么customer_dd列的统计信息可能就足够了。

但是呢:

从customer_id = 123的订单中选择 * and order_date > date '2016-01-01'

那么,我们不 (默认情况下) 存储有关customer/order_date之间的值组合的统计信息。你不能在 * 所有 * 上存储统计数据-这是你必须存储的统计数据的无限列表。

因此,我们可以选择运行您的查询的 “一点点”,即,如果我抓取行的随机样本,我可能会发现其中5% 符合条件 “customer_id = 123和order_date> 日期 '2016-01'”。所以我现在可以使用5% 作为我将回来的行总量的估计。

基数反馈
=====
即使有统计数据,甚至有动态采样,我可能 * 仍然 * 偏离我的估计。继续上面的示例,假设我想出了 (动态采样或其他方式),我对符合条件的5% 行的估计。所以如果我的表有1000行,我估计我会得到50行。我可能会选择 (说) 使用特定的索引来进行查询。

然后我继续运行它...嗯!估计是错误的-实际上400行返回符合条件。估计基数 (50) 与实际基数 (400) 不匹配。我们将 * 反馈 * 该信息,以便 * 下一个 * 执行此查询。因此,下一次执行时,我的估计将使用先前的信息,并选择更接近400而不是50的信息。

所以 ....

“基数反馈是否也会导致计划变更?”

是的。

锁定计划的推荐方法是通过SPM

http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-sql-plan-mgmt-12c-1963237.pdf

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论