技术贴 | 一文带你走进统计信息模型

news2025/1/18 6:46:56

在这里插入图片描述

一、简介

数据库中的“统计信息”是一个描述数据库中表和列信息的数据集合。优化器代价模型 (OptimizerCost Model) 依赖于查询中涉及到的表、列、谓词等对象的统计信息来选取计划,优化器可以利用统计信息来优化计划的选择,所以统计信息是代价模型中选取最优执行计划的关键。

统计信息包含表统计信息(Table Level Statistics)和列统计信息(Column Level Statistics)两种类型。各家数据库不一定会收集全部下列所列的统计信息,但会根据各家的实际情况收集进行收集。

1. 表级统计信息

  • 表的基本信息
  • 表的统计信息类型(信息级别分为 GLOBAL、PARTITION 和 SUBPARTITION)
  • 表的行数
  • 表所占用的宏块数
  • 表所占用的微块数
  • 表的平均行长
  • 表的收集统计信息时间
  • 表的统计信息是否锁定

2. 列级统计信息

  • 列的基本信息(包括 tenant_id、table_id、partition_id、column_id)
  • 列的统计信息类型(信息级别分为 GLOBAL、PARTITION 和 SUBPARTITION)
  • 列中不同的值的数量 NDV(Number of Distinct Values)
  • 列中 NULL 值的数量
  • 列的最大值和最小值
  • 列的采样数据量大小
  • 列的直方图的稠密度
  • 列的直方图桶个数
  • 直方图类型(频率直方图/等高直方图/TopK 直方图/混合直方图)

在普通的统计信息中,CBO 会默认目标列数据在其最小与最大值间是均匀分布的,并以此为依据预估条件选择率及结果集 cardinality,进而选择执行计划。但在实际中,显然有些数据不是平均分布的,会出现所谓的“数据倾斜”,此时产生的执行计划很可能就不是最佳的,甚至会产生较差的执行计划。

直方图的引入就是用来解决数据倾斜的问题。直方图是一种特殊的列统计信息,它详细描述了列的数据分布情况。直方图收集信息后,CBO 不会再认为列上是均匀分布的,可以根据实际情况预估条件选择率及结果集 cardinality,选择正确的执行计划。

二、常见的统计信息直方图模型

1. 频率直方图

列中有多少 distinct 值,数据字典中就会存储多少条记录。endpoint value 记录这些 distinct 值,endpoint number 则记录到此 distinct 值为止共有多少条记录。此时 endpoint number 是一个累加值,可以用一条记录的 endpoint number 减去前一条记录的 endpoint number 得到这条记录对应的 endpoint value 值的记录数。频率直方图一般适用于 distinct 值比较少的表,直方图桶的个数 >= NDV (Number of Distinct Value),即直方图的桶数大于等于列上的不同值的数量的场景。

2. 等高直方图

对于这类直方图,Oracle 首先根据目标列对目标表的所有记录从小到大排序,然后用总记录数除以需要使用的 Bucket 数,来决定每个 Bucket 中需要描述的已排好序的记录数。此时 endpoint number 记录的是 Bucket 号,Bucket 号从 0 开始一直到 N。0 号 Bucket 对应的 endpoint value 记录目标列最小值,其他 Bucket 对应的 endpoint value 则记录到此 Bucket 为止目标列的最大值。

为节省空间,对于相邻的仅 endpoint number 不同,而 endpoint value 相同的记录,Oracle 会在数据字典中合并存储。假如 endpoint number=2 和 3 的 Bucket 对应 endpoint value 都为 P,数据字典中只会记录 endpoint number=3,endpoint value=P。因此,Height Balanced 类型直方图数据字典中的 endpoint number 可能是不连续的。

这种合并后记录在数据字典的 endpoint value,Oracle 称为 popular value。显然 popular value 记录的 endpoint number 值与上一条记录的 endpoint number 值相差越大,popular value 在目标列中所占比例越大,对应的 cardinality 也就越大,这应该也是将其称为 popular value 的原因。

3. Top-k 直方图

频率直方图的一个变种,针对 k 个直方图覆盖数据占比超过一定阈值的情况。很少出现的 distinct 值在直方图里会被忽略掉。

4. 混合直方图

混合直方图结合了基于高度的直方图和频率直方图的特征,但与频率直方图和 Top-k 直方图的不同的是,一个桶里面可能装多个不同的 value 值,将采集到的数据量按照桶个数分段,将每一分段内的所有数据都放到对应的一个桶中,达到用更少的桶来描述更大数据量的数据分布,其中桶内的最大的 value 值将作为 endpoint_value,同时会多一个 endpoint_repeat_cnt 来记录 endpoint_value 的频次。该方法使优化器能够在某些情况下获得更好的选择性估计。

单纯的等高直方图目前在数据库内使用的很少,很多优化方案都是在等高直方图的基础上加入了对空洞(非连续值超过一定阈值的区间视为空洞),高频值以及第二高频值表示,并确保每一个值只出现在一个区间内的近似等高直方图。

对于频率直方图、Top-k 直方图和混合直方图在不同场景下的使用逻辑如下:
在这里插入图片描述
直方图信息列上数据分布出现倾斜的情况下,对单表的结果集大小预测提供了相对准确的结果,但是在做关联查询时却不能提供关联结果集大小的准确性判断。

在关联查询的情况下又出现了另外一种判断结果集大小的方法 Count-Min Sketch。它是一种可以处理等值查询,Join 大小估计等的数据结构,并且可以提供很强的准确性保证。自 2003 年文献 An improved data stream summar: The count-min sketch and its applications 中提出以来,由于其创建和使用的简单性获得了广泛的使用。

Count-Min Sketch 维护了一个 d*w 的计数数组,对于每一个值,用 d 个独立的 hash 函数映射到每一行的一列中,并对应修改这 d 个位置的计数值。

这样在查询一个值出现了多少次的时候,依旧用 d 个 hash 函数找到每一行中被映射到的位置,取这 d 个值的最小值作为估计值。

KaiwuDB 提供的列级统计信息包含行数、不同值的数量、NULL 值的数量等。对于列上数据分布不均匀的情况也可以提供直方图统计信息。KaiwuDB 的直方图也是一个近似等高直方图,对于列的不同值小于等于 200 的场景,可以提供类似频率直方图的效果,对于高频值也能表示,但是在处理区间上的不同值的数量上,目前基于 HyperLoglog 的算法不太准确。
在这里插入图片描述
小于等于 200 个 bucket:
图片

大于 200 个 bucket:

插入 10 万个 1 到 10000 的随机值,201, 202, 203, 204, 205, 206 的重复值都增加到 1000 以上,删除 400 到 2000 之间的值,然后创建统计信息和直方图。

图片

图片
在这里插入图片描述

三、总结

基于成本的优化模型(CBO)是目前关系型数据库最主流的优化模型,而统计信息则是 CBO 的基础,一定程度上统计信息的准确性是 CBO 能否产生最优执行计划的关键。统计信息的收集主要以表级统计信息和列级统计信息为主,在列上数据分布不均匀的情况下,直方图信息的准确性就尤为重要,目前主要以等高直方图、频率直方图和相应的变形直方图为主。

另外,统计信息的准确性虽然是影响产生最优执行计划的关键,但是统计信息的计算也会耗费系统资源。一般情况下相同策略下参与计算的数据越多统计信息越能准表描述表上数据的真实分布情况,但代价是耗费的资源越多,计算的时间越长。

通常情况下,会对表上的数据进行采样来收集统计信息,或者通过增量收集统计信息的方式来提高收集统计信息的效率。在参与计算的数据确定的情况下,会通过粗略的估计来决定使用哪种策略来收集统计信息,从而能够更有效的描述数据分布情况。

对于数据频繁变动的表,统计信息的有效性是重点。如何有效判定统计信息的有效性,以及如何通过变动的数据修正统计信息是统计信息研究的难点。另外,对于某些融合型的多模数据库里的某些特殊的表,可以根据表本身的特性,尝试新的统计信息策略。如时序数据表,表上的数据有一定的规律性,有些表甚至是增加了降采样规则的,新的策略可以依据降采样的规则来生成或者替代统计信息。

总之,对于传统的关系型数据库,统计信息的收集是必不可少的部分,统计信息的好坏直接影响执行计划的质量。对于融合型的数据库里的新型的表,可以基于新的策略来统计估算表的数据分布,从而达到统计信息的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信开放平台账号

微信开放平台账号是用于注册APP端用的微信分享、登陆、支付等功能接口的账号,在制作APP的过程中非常重要。通过微信开放平台,开发者可以接入微信支付、微信登录等功能,从而为APP提供更多样化的服务。 微信开放平台账号管理权限包括创建开放平…

智能井盖传感器推荐,万宾科技助力城市信息化建设

随着科技产品更新换代进程加快,人工智能在人们日常生活之中逐渐普及开来,深入人们生活的方方面面,影响城市基础设施建设工程。例如在大街小巷之中的井盖作为城市基础建设的一个重要部分,一旦出现松动倾斜或凸起等异常问题&#xf…

Linux 中如何修改终端提示符颜色?

哈喽大家好,我是咸鱼 我们知道默认情况下,Linux 终端提示符都是简单的黑白色、 这种黑白提示一方面看久了容易视觉疲劳,另一方面由于没有高亮显示,看着很不方便,视觉体验极差 所以我们需要修改我们的终端显示颜色&a…

想入门网络安全,这些前置准备要做好!

网上有很多关于网络安全如何学习、如何入门的内容,但是仍然有很多小白不懂网络安全要怎么去学习。这是由于网络安全包含的范围确实比较广,学习的内容也比较多,所以在刚开始了解的时候确实会有点搞不清楚状况。 这里有一个方法,不要…

前后端配合实现按钮级操作权限控制

背景 公司项目需要做到按钮级权限限制,至此有了该文,如有错误,请联系博主指出,多多感谢。 角色配置前后端操作 首先最基本的角色配置,配置该类角色有哪些菜单以及那些菜单的哪些按钮权限 菜单及菜单按钮由前端维护&a…

Vue Router使用VueUse更改标签页名称的工具函数

进入正题 安装 npm i vueuse/core or pnpm i vueuse/core or yarn add vueuse/corerouter/helper.js import { useTitle } from vueuse/coreexport const usePageTitle (to) > {const projectTitle import.meta.env.VITE_APP_TITLE // 将可变名抽出到 .env 内配置cons…

源码与SaaS:企业家如何选择?——一语道破真相

在数字化的时代,软件技术已经成为企业运营的核心驱动力。对于企业家来说,选择一个适合自己企业的软件开发方式至关重要。其中,源码和SaaS是两种常见的选择。那么,在这两者之间,企业家应该如何抉择? 源码&am…

excel修改日期格式为yyyy-mm-dd

1、选中要修改日期格式的列,鼠标右击,选择“设置单元格格式” 2、若“日期”格式中没有需要的格式,选择自定义格式,输入自己需要的日期格式后点击确定即可修改

简单又有效!制作产品说明书的模板工具

产品说明书在产品推广中起着至关重要的作用。它是一种不可忽视的宣传手段,能够向潜在客户传达产品的特点和优势。通过详细描述产品的功能、用途和特点,产品说明书能够帮助客户更好地了解产品,并激发他们对产品的兴趣。因此,在进行…

Mysql权限控制语句

1.创建用户 create user ky32localhost IDENTIFIED by 123456 create user:创建用户开头 ky32:用户名 localhost 新建的用户可以在哪些主机上登录 即可以使用ip地址,网段主机名 ky32localhost ky32192.168.233.22 ky32192.168.233.0/2…

SUE3000 1VCF750090R804 REM615面板

SUE3000 1VCF750090R804 REM615面板 蓝色波长激光的特殊特性使扫描仪适用于各种材料的高精度轮廓和尺寸测量,包括闪亮的表面、炽热的发光金属、有机材料(如食品、木材和木质单板),以及透明或半透明材料,如塑料、玻璃、光学元件和薄膜/基底。…

DNS服务器使用_windows篇

1-搭建dns服务器 安装涉及内容:1-安装DNS服务器;2-DNS正向解析;3-DNS反向解析;4-DNS转发器;5-主、辅域名服务器;6-DNS子域委派服务器 二、使用方面 1-新建域 2-新建主机 三、其它内容见附件&#xff…

Playwright测试自动化工具

作者观点:很长时间以来,Selenium是QA工程师寻求测试自动化解决方案的首选测试框架。它能够测试任何浏览器(这在IE浏览器的统治时期尤其重要)和任何平台。然而,现在看来,那个时代已经过去了。 今天&#xf…

修复缺失d3dcompiler_43.dll问题的多种解决方案,2分钟解决d3dcompiler_43.dll文件

你是否曾遇到这样的提示:“程序无法启动,因为您的计算机上缺少d3dcompiler_43.dll”? 如果是的话,不用担心。 这篇文章将提供详细的步骤解决缺失d3dcompiler_43.dll的问题,教你怎么一步步的解决d3dcompiler_43.dll的缺失问题。 什…

SpringBoot+MINIO

Linux安装MINIO https://blog.csdn.net/tongxin_tongmeng/article/details/133934115 MINIO创建桶MINIO创建秘钥MINIO的API路径 http://your-server-ip:9000 注意&#xff1a;API路径在日志文件中/opt/minio/minio.log pom.xml <!-- https://mvnrepository.com/artifact/com…

通达信换手率指标公式,衡量股票的活跃程度

换手率是指在一定时间内股票的交易量与流通股本的比率&#xff0c;反映了股票的流动性和市场交易活跃程度。换手率高意味着股票的交易频繁&#xff0c;市场上的买卖力量较强&#xff0c;反之换手率低则表示交易相对较少。高换手率可能意味着投资者对该股票有较大的兴趣或者存在…

多路IO—POll函数,epoll服务器开发流程

引言 "在计算机网络编程中&#xff0c;多路IO技术是非常常见的一种技术。其中&#xff0c;Poll函数和Epoll函数是最为常用的两种多路IO技术。这两种技术可以帮助服务器端处理多个客户端的并发请求&#xff0c;提高了服务器的性能。本文将介绍Poll和Epoll函数的使用方法&am…

asp.net旅游交流管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 旅游交流管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net旅游交流网站1 应用技…

【脑机接口 论文】利用脑机接口帮助ALS患者恢复对家用设备的控制science

英文题目 中文题目 稳定的语音BCI解码使ALS患者在3个月内无需重新校准即可进行控制论文下载&#xff1a;算法程序下载&#xff1a;摘要1 项目介绍2 方法2.1实时神经解码2.2算法手术植入:神经解码模型: 数据收集实验2.3稳定的解码器性能超过三个月 3 电极的贡献4 讨论5结论 中文…