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

分布式数据库学习Note60:OceanBase社区版中,如何理解直方图?

直方图是一种特殊类型的列统计信息,通过将数据保存到一系列有序的桶中来描述其列的数据分布特征,优化器可以依据直方图来估算出更准确的行数。

在默认情况下,优化器会认为列的数据是分布均匀的,之后会根据这一特征来进行行数估计,但是在真实的场景中,大多数表的数据分布都是不均匀的,这种情况就需要使用直方图。

在 OceanBase 数据库优化器中,列的直方图信息存储在视图 DBA_TAB_HISTOGRAMS 中,包含以下信息:

  • 直方图的基本信息(包括 tenant_idtable_idpartition_idcolumn_id

  • 直方图的统计信息类型(信息级别分为 GLOBALPARTITION 和 SUBPARTITION

  • 直方图中每个桶累积的数据量(包含当前桶及其之前的桶的总和)

  • 直方图中每个桶里面的最大的 Value 值

  • 直方图中每个桶里面的最大 Value 值的频次

直方图的类型

OceanBase 数据库优化器支持三种直方图:频率直方图、Topk 直方图和混合直方图。 在频率直方图中,每个不同的列值对应于直方图的单个桶,要求指定的桶的个数不低于列的 NDV 值。 Topk 直方图是频率直方图的变体,基于 Lossy Counting 算法,通过取部分数据特征来估算整体的数据分布,要求它所记录的数据数与总数据数的比例不低于 1--(1/bucket_size)。 混合直方图主要通过采集指定的的数据量进行直方图构建,与频率直方图和 Topk 直方图的不同的是,一个桶里面可能装多个不同的 Value 值,将采集到的数据量按照桶个数分段,将每一分段内的所有数据都放到对应的一个桶中,达到用更少的桶来描述更大数据量的数据分布,其中桶内的最大的 Value 值将作为 endpoint_value,同时会多一个 endpoint_repeat_cnt 来记录 endpoint_value 的频次。

直方图的选择策略

OceanBase 数据库优化器根据 NDV、bucket_size 和 p 指标选择直方图。直方图的选择策略如下图所示。

直方1

指标含义如下:

  • NDV:指定一个列上不同 Value 值的个数。

  • bucket_size:指定的直方图桶个数,默认为 254。

  • p:Topk 直方图期望的最低百分比阈值,计算公式为 (1--(1/bucket_size)) * 100。如果使用默认值 254,则对应的最低百分比阈值为 99.6。

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

评论