特性概述
功能定义
智能基数估计通过利用库内贝叶斯网络模型,对多列数据样本的联合分布进行建模。这一过程使得它能够为多列等值查询提供更为精准的基数估算结果。在此基础上,又能显著提高优化器对于计划和算子选择的准确性。最终,优化器准确性的提升会带来数据库整体吞吐量的提高。
用户场景
在大型企业核心系统和云数据库等高负载业务环境中,复杂查询(尤其是涉及多列组合条件)常因优化器代价估计不准而未能选择预期索引,产生大量慢SQL。此问题的根源在于:当数据存在显著分布倾斜且多列间存在强相关性时,依赖传统统计信息(如直方图)或独立性假设的基数估计器难以准确预测查询结果集大小,导致执行计划次优。这些慢SQL不仅大幅增加关键业务接口响应时间,更会耗尽数据库资源,严重拖累业务成功率和系统整体可用性。本功能目标是利用轻量级数据统计模型,针对多维数据分布进行刻画并且给优化器提供准确选择率估计的能力,进而提高多列场景基数估计的准确率,提升端到端执行性能。
规格约束
该特性自503.1版本引入。使用该特性后的查询性能可能会受模型缓存数量影响,若访问模型数量超过当前缓存个数,会产生内存替换和磁盘访问,有性能下降风险,因此建议合理设置模型缓存个数,模型个数等于创建的BayesNet类型统计信息个数,建议设置为一段时间内能够访问到的统计列个数,当前支持的缓存模型个数默认100个,缓存个数可以通过ai_stats_cache_limit进行调整。
技术架构
智能基数估计方案将轻量概率图模型融合进GaussDB的传统统计信息模块,在统计收集阶段进行模型训练,并且将模型保存在系统表中供优化器使用。
数据库接受特定分析查询语句,判断语句是否包含多列并且调用数据统计模块,数据统计模块在接收ANALYZE指令之后首先针对包含的列进行数据采样,然后针对数据样本进行数据统计,如果数据统计模块发现智能统计GUC参数开启,则进行贝叶斯网络模型的创建,具体包括:
- 利用聚合操作统计并计算出列两两之间的相关性。
- 使用chow-liu算法生成一个树型贝叶斯网络结构。
- 调用贝叶斯网络算子通过遍历数据样本进行模型参数训练,并且将模型参数以二进制的形式存入系统模型表gs_model_warehouse中,并返回模型名称等模型元信息。
- 将模型元信息写入系统统计表中。
- 如果multi_stats_type参数为"ALL",那么传统统计信息也将存入模型。