DTSE Tech Talk 第18期丨统计信息大揭秘,数仓SQL执行优化之密钥
摘要:华为云EI DTSE技术布道师王跃,针对统计信息对于查询优化器的重要性,GaussDB(DWS)最新版本的analyze当前能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速上手使用统计信息的自动收集功能。
在本期《统计信息大揭秘——SQL执行优化之密钥》的主题直播中,我们邀请到华为云EI DTSE技术布道师王跃,针对统计信息对于查询优化器的重要性,GaussDB(DWS)最新版本的analyze当前能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速上手使用统计信息的自动收集功能。
为何要重视统计信息收集?
现阶段市场上的数据库产品,基本上都是基于CBO模型的优化器,在基于CBO模型的优化器中,统计信息是生成最优执行计划的前提,会直接影响到执行计划的选择,因此统计信息的及时收集是尤为重要的。
![](https://pic1.zhimg.com/80/v2-8e071f7dd3fbf3a6714d4639f14322f8_720w.webp)
统计信息主要包括“描述表规模的表级统计信息”和“描述列数据特征的列级统计信息”两部分内容。
![](https://pic3.zhimg.com/80/v2-b5be0d538544d7edb604268566adbde2_720w.webp)
王跃从统计数据在优化器中的运用这一角度,向我们展示了统计信息影响表达小估算的原理、进行等值比较、范围比较、多条件、简单JOIN代价估算的原理,进一步解释了统计信息的重要性。
![](https://pic2.zhimg.com/80/v2-2067be7b717a6e3253d07f4f1c14b43d_720w.webp)
![](https://pic3.zhimg.com/80/v2-ffba2f7e84003dfd7df7b761a591adb6_720w.webp)
![](https://pic1.zhimg.com/80/v2-e18c8cbbb23b8928e7ef5a619c9a40d0_720w.webp)
如何收集统计信息
王跃先带我们简单了解了GaussDB(DWS)的部署架构,说明了分布式查询的执行流程和统计信息收集的执行流程。
![](https://pic2.zhimg.com/80/v2-aee547df4457e9485244b22542732b09_720w.webp)
基于此,GaussDB(DWS)共有五种统计信息收集的方法,分别是按库收集、按表收集、按模式收集、按列收集以及多列组合。
![](https://pic3.zhimg.com/80/v2-4aad8537d71c9390ad710d892bc63f7a_720w.webp)
GaussDB(DWS)拥有强大的统计信息自动收集能力,通过后台线程轮询收集与优化器同步收集两种方式来实现。王跃建议开发者可以同步开启两种方式,以达到最优的收集功能。
![](https://pic2.zhimg.com/80/v2-4d17148a76c01d57a4e371ad0e8e81c1_720w.webp)
![](https://pic1.zhimg.com/80/v2-421a2b9662803e4d47de6782e852fcb0_720w.webp)
此外,还强调了自动收集的阈值控制方法,同时对收集不及时,统计信息可能失效的场景,提出了一种统计信息推算的兜底策略。确保每个查询都有及时有效的统计信息可用。保证了尽可能最优的执行性能。
华为云数仓analyze能力
通过“基本功能”,“收集方式”,“准确性”,“可靠性”,“估算增强”,详细的介绍了华为云GaussDB(DWS)近年来在统计信息方面的持续耕耘和比较有亮点的特色功能。
![](https://pic2.zhimg.com/80/v2-bd0ca76587795ddcdcb2f0b746732bb5_720w.webp)
GaussDB(DWS)在analyze的各个执行过程中都进行了精心打造。统计信息是基于对目标数据的采样生成的,所以准确性才是统计信息的关键。
- 样本数据能不能代表全表数据特征?
- 如何找到一个恰当的采样大小,让统计信息收集的又快又准?
- 不同存储类型的表如何自适应的选取采样模型?
- 内存不足时应该如何计算统计信息?
在采样大小,采样模型,计算模型等方面的深入投入,GaussDB(DWS)寻找出了这些问题的最佳答案。
最后给出了一键式统计信息自动收集的最优配置,让用户不再担心统计信息忘记收集的烦恼,帮助开发者专注于自己业务领域,减少统计信息忘收集的困扰。
统计信息常见问题
我们知道了GaussDB(DWS)的统计信息自动收集功能很强大,那我们接下来更关心的是如何检测它的使用效果,如何知道收集的进度和方式。
如何判断统计信息是否失效,给用户提供了三种简单快速识别统计信息未收集的方法:
- 已知SQL执行慢,看是否有未收集统计信息的表;
- 批量作业执行慢,哪些SQL是没收统计信息;
- 通过日志查找历史未收集统计信息的表。
analyze易运维,通过非常巧妙的方法,将analyze每一步的执行过程和运行模式,详细的展示到活跃会话视图和线程等待视图,王跃也在最后列举了一些使用者最常问到关于analyze的几个TOP问题。
![](https://pic2.zhimg.com/80/v2-e5caba7d923603afa99c1e0a69b7bd99_720w.webp)
欢迎感兴趣的开发者们收看我们的直播回放,了解更多~
相关文章
- [11.8] 1684. 统计一致字符串的数目
- python多线程统计大文件字数并对返回值进行计算
- 实现统计java程序代码的小工具
- 常用的数据统计Sql 总结(转)
- ***常见复杂SQL语句(含统计类SQL)
- 常用sql---表记录数和占用空间统计
- LeetCode_动态规划_中等_1277.统计全为 1 的正方形子矩阵
- leetcode580. 统计各专业学生人数(SQL)
- 统计在线人数
- PowerShell调用jira rest api实现jira统计自动化
- 使用jdbc统计和可视化日志
- 3400. 统计次数
- 通俗直观理解贝叶斯 | 贝叶斯统计 | 贝叶斯定理 | 贝叶斯推断 | 贝叶斯线性回归 | Bayes' Theorem
- 每天一道大厂SQL题【Day03】订单量统计
- AcWing 265. 营业额统计
- P1308 [NOIP2011 普及组] 统计单词数
- 2019年网络安全威胁统计