深入内核丨12C 新特性之 TOP - N 频率柱状图原理和算法

简介:

在 Oracle 12c 当中,优化器的一个新特性就是提供了新类型的柱状图数据,Top - N 频率柱状图和混合柱状图。优化器利用它们可以更加高效、精确地计算执行计划代价,选择最优计划。这里将探究一下 Top - N 频率柱状图在什么情况下获得、以及它如何影响优化器的选择率的计算。
12c 在线文档描述:
Top - N 频率柱状图是频率柱状图的一个变种,它忽略了那些"非流行数据"(即出现频率低的数值)。例如,1000枚硬币中只有一枚面值1分的硬币,那在创建柱状图分组时,它就可以被忽略。Top - N 频率柱状图能产生一个更利于"流行数据"(高频率数据)的柱状图。

如何产生 Top - N 频率柱状图

首先需要了解的一个事实是,在收集统计信息数据时,如果为估算值设置了一个非默认值,则统计数据过程就类似于11G,即不会产生新类型的柱状图。因此,产生 Top - N 频率柱状图的一个必要条件就是让估算比为默认

例如:

77677cfa2db198d672e7ef461eb711488e290f29

从在线文档对 Top - N 频率柱状图的描述可知,Top - N 频率柱状图分组数量一定小于唯一值数量(Distinct Value Number)。所以,产生 Top - N 频率柱状图的另外一个必要条件是设置的分组数或者默认分组数设置(默认254)小于其唯一值数。

在进一步为字段收集统计数据之前,统计数据收集过程首先会计算近似唯一值数。这一步骤会调用 SQL 分析器(SQL Analyzer)来分析当前输入参数所产生的一条 SQL 语句。例如如下语句:

36ba7015447ec73201777ef4d96fe33d3df2a053

SQL 分析器不光会获得这条查询语句的结果,还会根据输入选项(如TOPN, NIL, NIL, ACL, RWID, U25, UU)在执行和分析过程中调用内部函数获取更多的额外信息。其中就有 TOP - N 数值信息。然而,如果 TOP - N 数值的数据总数在该字段的非空值数据总数中的比例低于一个阈值(1-1/MNB,MNB 为最大分组数,Maximum Number of Buckets,它是影响选择频率柱状图还是高平衡柱状图的重要因素,参见http://www.hellodba.com/reader.php?ID=19&lang=EN)时,TOP - N 数据会被丢弃,也就是说,不会产生Top - N频率柱状图。因而,TOP - N 数值的数据总数在该字段的非空值数据总数中的比例大于(1-1/MNB)也成为产生 Top-N 频率柱状图的一个必要条件。

而字段的最大、最小唯一值必须包含在柱状图数据当中,因此统计过程还需要检查是否需要从现有 Top - N 数据中移除数据以容纳最大、最小值:如果最大、最小值已经在 Top - N 数据当中,则不需要移除,否则将数据量最小的数值移除以腾出位置给最大最小值。相应的,要根据调整后的 Top - N 数据记录总数在非空数值记录总数中的比例再与阈值比较以决定是否采纳 Top - N 频率柱状图。
概括产生 Top - N 频率柱状图的条件:
1. 估算比为默认值;
2. 柱状图分组数小于唯一值数;
3.(调整后的 Top - N 数据记录总数)/(非空数值记录总数)>(1-(1/MNB))

演示
以下用一个例子来演示 Top-N 频率柱状图的产生。

308939f760d9a3d4b26e5c2ace99208e91fb9321

可以看到,尽管设置了分组数小于唯一值(30)的25,并采用了默认估算值,统计收集过程最终还是未给该字段收集 Top - N 频率柱状图。检查 Top - N 数据记录总数在非空数值记录总数中的比例以及阈值。

c65d490eb89e140c71ed1f7b810dce890f52982d

最初计算的 Top - N 数据记录总数在非空数值记录总数中的比例是大于阈值的。再看 Top - N 数据记录总数是否会被调整:

0ba0166734f4392618ecd81f7819134cf30ab278

最小值(1)并没有在最初的 Top - N 数值当中,它要替换 Top - N 数值当中的数据量(60)最少的数(6)。调整后计算得到的百分比为:

e48a7b0731b56867227d5472f3dbb323cec7bf5f

因此可以看到该值小于阈值(96),所以不会产生 Top - N 频率柱状图。

基于 Top - N 频率柱状图的选择率计算
基于 Top - N 频率柱状图的选择率计算并不复杂。

1. 如果判定谓词中数据位于柱状图当中,则采用柱状图数据计算选择率;
2. 如果判定谓词中数据不位于柱状图当中,则由柱状图以外的唯一值数及其数据数量来计算选择率。

举例说明:

3a3e29e60f5a0218f2487d2beaad412b87d2b9d0

。。。。。。

a2bbb32440fdfe9e447023b61af53205554d8411

注意:因为最小值(1)没有被包含在最初分析的 Top-N 值当中,它替换了里面数据量最少的唯一值(5),并且数据量设置为1。

38d8ed9a6b8add71d10488aded0fd1eb018fc2d4

唯一值20的分组数据量为 200 (1951-1751),计算所得选择率为 200/取样大小 = 200 / 4650,因此,过滤后的数据记录数为 cardinality*selectivity = 200。

ee92e0fb4cd27b8df0ccf5d244cafdc537df3e71

"2" 不是一个 Top - N 数值,这一谓词表达式的选择率为该字段的密度(Density)。然而,对于 Top - N 频率柱状图字段,优化器会根据非 Top - N 数值数据重新计算密度。本例当中,新的密度为(非空值总数 - Top - N 数值总数)/(非 Top-N 数值总数)/(非空值总数)= (4650-4501)/(30-26)/4650 = 0.008010753。因此,过滤后的数据记录为 cardinality*selectivity=trunc (4650*.008010753) = 37。

TIPS:新计算所得密度可以通过 10053 事件跟踪观察到。


原文发布时间为:2018-03-9

本文作者:黄玮

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

目录
打赏
0
0
0
0
73530
分享
相关文章
|
19天前
|
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
23 3
短视频到底如何推荐的?深度剖析视频算法推送原理详细且专业的解读-优雅草卓伊凡-【01】短视频算法推荐之数据收集
短视频到底如何推荐的?深度剖析视频算法推送原理详细且专业的解读-优雅草卓伊凡-【01】短视频算法推荐之数据收集
77 12
短视频到底如何推荐的?深度剖析视频算法推送原理详细且专业的解读-优雅草卓伊凡-【01】短视频算法推荐之数据收集
|
2月前
|
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
本文深入探讨了基于Redis实现分布式锁时遇到的细节问题及解决方案。首先,针对锁续期问题,提出了通过独立服务、获取锁进程自己续期和异步线程三种方式,并详细介绍了如何利用Lua脚本和守护线程实现自动续期。接着,解决了锁阻塞问题,引入了带超时时间的`tryLock`机制,确保在高并发场景下不会无限等待锁。最后,作为知识扩展,讲解了RedLock算法原理及其在实际业务中的局限性。文章强调,在并发量不高的场景中手写分布式锁可行,但推荐使用更成熟的Redisson框架来实现分布式锁,以保证系统的稳定性和可靠性。
70 0
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
643 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
理解CAS算法原理
CAS(Compare and Swap,比较并交换)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值是否相同来决定是否进行更新。JDK 5引入了基于CAS的乐观锁机制,替代了传统的synchronized独占锁,提升了并发性能。然而,CAS存在ABA问题、循环时间长开销大和只能保证单个共享变量原子性等缺点。为解决这些问题,可以使用版本号机制、合并多个变量或引入pause指令优化CPU执行效率。CAS广泛应用于JDK的原子类中,如AtomicInteger.incrementAndGet(),利用底层Unsafe库实现高效的无锁自增操作。
166 0
理解CAS算法原理
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
160 3
OSPF的SPF算法介绍:原理、实现与应用
OSPF的SPF算法介绍:原理、实现与应用
251 3
OSPF的路由计算算法:原理与应用
OSPF的路由计算算法:原理与应用
165 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等