算法分析:Oracle 11g 中基于哈希算法对唯一值数(NDV)的估算
作者简介
资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价。
个人网站 www.HelloDBA.com
为什么引入新 NDV 算法
字段的统计数据是 CBO 优化器估算执行计划代价的重要依据。而字段的统计数据可以分为两类:
1. 概要统计数据:如 NDV 字段平均长度 ACL 最大、最小值等
2. 柱状图数据:也叫直方图(histograms)记录 NDV 和它们出现的频率
NDV 也叫做唯一值数,是对表的字段唯一值个数的统计,对于第一类数据,实际上可以通过一次扫描表获取所有字段的统计数据。
但是,对于大型表的分析,为减少资源消耗,需要通过采样分析。由于采样具有随机性,对于一些数据分布不均匀的字段,通过采样数据获取统计数据可能会导致获取到的数据与实际数据产生较大差异。
尤其对于一些海量数据表,通常采样比较低,因而每次分析对象获取到的数据的精度会存在较大的不确定性。这种不确定性可能会对系统的整体性能造成重大影响。
举个例子
一个字段的里面的数据如下:
[0,1,1,1...(100*1)...1,2,3,4,5,6,7,8,9]
其实际的 NDV 是10,通过采样(假设采样比为10%)获取 NDV 时,由于采样的随机性,可能就会出现以下情况:
[1...(10*1)...,2,6]
得到的 NDV 是3,和实际值存在很大的出入(如果除以采样比的话,NDV 为3/10×100=30)。而如果优化器采样了这样数据进行执行计划代价估算的话,就很有可能获取不到最优的执行计划。
而降低这种不确定性的手段就是提高采样比例。但是,对于大型表来说,提高采样比又会带来更多的资源消耗,尤其是获取 NDV 数值时。
由于获取 NDV 数值需要消除重复值(通过 count (distinct col) 方式获取),Oracle 是通过排序的方法将已经读取的唯一值保持在 PGA 当中,以便消除后续的重复值。因此,当取样比增加时,PGA 的消耗也会线性增加。
对于大型表,PGA 可能不足以容纳全部数据,从而会导致临时磁盘空间的读写,导致重大的性能问题。
新 NDV 算法介绍
在11g中,采用了一种新的算法消除 NDV 计算时,数据量与 PGA 消耗之间的线性关系,从而使得通过完全扫描表获得精确统计数据成为可能。因此,在 11g,自动采样模式下不再进行快速取样,而是直接进行全表扫描获取统计数据。这一新算法称为唯一值数估计(Approximate NDV)。
默认情况下,在进行自动采样时,也就是 AUTO _SAMPLE_SIZE 时,就采样该算法。
这个新特性也可以通过隐含参数 "APPROXIMATE _NDV" 来关闭。
SQL 代码:
HELLODBA.COM>exec dbms_stats.set_param('APPROXIMATE_NDV','FALSE');
PL/SQL procedure successfully completed.
注意:11g 中,对分区表全局统计数据的增量(INCREMENTAL)计算方式,也是利用了该算法。
新NDV算法过程
该算法充分利用了哈希算法的分布均衡特性。其基本算法过程如下:
它将每个扫描到的数值通过哈希算法转换为一个二进制数值,并放入一个数据结构中,我们称该数据结构为一个纲要(synopsis);
扫描下一个数值,获取到其哈希二进制数值,将其与纲要中已有哈希值比较,如果已经存在相同值,则丢弃该值,否则就插入纲要中;
纲要是有大小限制的,当新插入哈希值时,纲要已经达到大小限制,则按照一定规则分裂该纲要、并丢弃其中一份数据(例如,将首位为0的数值丢弃掉),此时,纲要级别也相应增加(起始为0,分裂一次加1);
获取到新的哈希数值时,如果其符合被丢弃数据的规则,则不再插入纲要中;
再次分裂时,按照递进的规则(如将前2为都为0的数值分裂)丢弃数据,并以此类推,直到扫描完所有数据;
我们称纲要中最终剩下数值数成为集数 (S) ,纲要分裂次数称为级数 (I)
而 NDV 的估算公式是:NDV = S*2^I
在这种算法下,由于每个字段在 PGA 中仅保存一个纲要数据结构,因此,它不会随着读取的数据量的增加而导致 PGA 消耗的增加。
资源下载
关注公众号:数据和云(OraNews)回复关键字获取
‘2017DTC’,2017 DTC 大会 PPT
‘DBALIFE’,“DBA 的一天”海报
‘DBA04’,DBA 手记4 经典篇章电子书
‘RACV1’, RAC 系列课程视频及 PPT
‘122ARCH’,Oracle 12.2 体系结构图
‘2017OOW’,Oracle OpenWorld 资料
‘PRELECTION’,大讲堂讲师课程资料
算法分析:Oracle 11g 中基于哈希算法对唯一值数(NDV)的估算相关推荐
- 分布式系统中一致性哈希算法-简介
分布式系统中一致性哈希算法 业务场景 近年来B2C.O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来.分布式系统相对于单系统,解决了流量大.系统高可用和高容错等问题.功能强大也意味着实现 ...
- ORACLE 11G中的ADR介绍:
直到今天,我才开始接触oracle 11g,先了解其新特性,以下这些是我的新特性读书笔记: 第一部分:(Automatic Diagnostic Repository)ADR 在oracle 11g中 ...
- 盘点 Oracle 11g 中新特性带来的10大性能影响
盘点 Oracle 11g 中新特性带来的10大性能影响 原创 2017-08-02 盖国强 数据和云 Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先 ...
- oracle 11g中的自动维护任务管理
因为人员紧缺,最近又忙着去搞性能优化的事情,有时候真的是不想再搞这个事情,只是没办法,我当前的绩效几乎取决于这个项目的最终成绩,所以不管是人的事还是事的事,都得去让他顺利推进. 前段时间发生还有几台服 ...
- Oracle 11g 中告警日志的位置
Oracle 11g 中告警日志的位置 首先介绍2个新名词 Automatic Diagnostic Repository (ADR)一个存放数据库诊断日志.跟踪文件的目录,称作ADR base,对应 ...
- Oracle 11g中关于数据定义的思考
之前一直没有关注过Oracle中数据的保存方式,因为大部分使用的还是Oracle的关系型数据库存储内容的元数据.今天偶然看到一篇关于Oracle 11g的数据定义的描述,收集如下: 1.Oracle的 ...
- Oracle 11g中的IO Calibrate(IO校准)
Oracle 11g中的IO Calibrate(IO校准).sql Oracle数据库发展到今天,"IO为王"已经是一种发展方向趋势.ExtraData一体机的重要特色之一就是最 ...
- bak文件转oracle文件,如何在Oracle 11g中恢复.bak文件(How to restore .bak file in oracle 11g)...
如何在Oracle 11g中恢复.bak文件(How to restore .bak file in oracle 11g) 我有Oracle 11g备份文件(.bak文件)如何在Oracle 11g ...
- oracle永久解scott,Oracle 11g中解决被锁定的scott用户的方法
Oracle 11g中修改被锁定的用户:scott,在安装完Oracle10g和创建完oracle数据库之后,想用数据库自带的用户scott登录,看看连接是 Oracle 11g中修改被锁定的用户:s ...
最新文章
- Microsoft Visual C++ 14.0 is required
- 2017华南理工华为杯D bx回文
- js获取url的参数
- android中对sd卡的 操作文件问题 创建目录 创建文件到指定目录
- 计算机专业单元测试卷答案,银保监会考试题库:计算机类模拟试题练习(六)答案...
- kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令
- 14011.petalinux创建module
- Linux学习-Linux 主机上的用户讯息传递
- python中文视频教程-中谷教育python中文视频教程(python视频教程) 完整版
- ecshop Touch笔记
- npp夜光数据介绍 viirs_对 VIIRS/NPP 夜光数据的解读
- android sdk模拟器中文版,安卓sdk自带模拟器的使用
- matlab hist函数的使用
- TPshop电商平台购物车自动化测试
- NT151应用案例:西门子PLC S7-1200与派克ACR9000的通信(Part 3)
- STL_空间配置器allocator
- 2019年福州大学计算机专业录取分,2019年福州大学艺术类专业录取分数线
- python中fit是什么意思_Python机器学习中fit_intercept=True是什么意思?
- 一个顾客买了价值x元的商品,并将y元的钱交给售货员。售货员希望用张数最少的钱币找给顾客。 无论买商品的价值x是多大,找给他的钱最多需要以下六种币值:50,20,10,5,2,1
- 国家/地区 语言缩写代码
热门文章
- Illustrator 描边,填充,扩展
- css属性前浏览器厂商前缀
- HTML5 Canvas操作图像像素
- 视觉SLAM笔记(39) 求解 ICP
- TensorFlow笔记(11) GoolgeNet
- Java跨域请求cooking共享,关于HTML5中的sessionStorage和localStorage
- 蓝昭餐饮管理系统服务器无法连接,服务器安全加固操作指南.docx
- 东风畅行java_东风畅行载货车为何可以口碑很好吗?是配置高?或者另有原因?...
- linux oracle semopm,Linux 内核参数设置于详解 --Oracle 安装
- html 图像 ppt,用HTML设置的文本和图像.ppt