团队来了猪队友,请问怎么办?
文章开始前推荐2个学习环境:
1、欢迎使用镜像快速体验PostgreSQL/DuckDB强大功能:《最好的PostgreSQL学习镜像》
2、欢迎使用云起实验室: 《免费体验PolarDB开源数据库》
3、PolarDB开源数据库内核、应用等学习图谱: https://www.aliyun.com/database/openpolardb/activity
为什么木桶有短板?
https://www.bilibili.com/video/BV1KS4y1Z7Le/
《一起学PolarDB - 第12期 - 为什么增加只读实例不能提高单条SQL的执行速度?》 这一期讲了PolarDB 通过多个计算节点可以并行执行同一条SQL, 类似于Greenplum MPP特性.
但是Greenplum有短板问题(就是那个猪队友), PolarDB是怎么解决的呢?
社区版本:
1、Greenplum, 由于SQL是在多个计算节点上并行执行的, 所以SQL的执行时间取决于最慢的节点. 当计算节点的负载不均匀、计算能力不均匀、IO设备性能不均匀的情况下, 性能会出现剧烈抖动.
2、还有一种情况是数据的存储结构倾斜, 也会导致短板, 例如分布键字段的某value比其他value记录条数多很多, 使得这部分数据所在的计算节点数据量比其他节点多很多, 这个节点就会成为短板.
非分布键数据倾斜一般对聚合操作影响不大, Greenplum支持2阶段聚合来解决问题, 但是对数据分布不均匀束手无策:
《Greenplum支持人为多阶段聚合的方法 - 直连segment(PGOPTIONS='-c gp_session_role=utility') Or gp_dist_random('gp_id') Or 多阶段聚合 prefunc》
《HybridDB PostgreSQL "Sort、Group、distinct 聚合、JOIN" 不惧怕数据倾斜的黑科技和原理 - 多阶段聚合》
《PostgreSQL 11 preview - 多阶段并行聚合array_agg, string_agg》
PolarDB:
https://github.com/ApsaraDB/PolarDB-for-PostgreSQL/blob/main/doc/PolarDB-CN/Architecture.md
针对前面提到的第一个问题: 当某个节点因为各种原因(例如某个节点的存储raid 5损坏了1块盘, 某个节点的数据存储有倾斜导致了节点负担变大.)存在短板时, 由于Greenplum每个节点只有部分数据, 其他节点不能帮短板节点进行计算, 只能干等.
PolarDB 的数据扫描以4MB为单位进行动态扫描, 哪个节点强, 哪个节点就扫得多, 处理得多. 打破短板问题. 目前已实现seqscan的动态扫描.
动态扫描相比静态扫描的性能提升:
动态扫描最终能带来的目标和好处:
消除木桶短板, polardb RW RO可以随意配置, RO与RO也可以随意配置, 运行时负载也可以不对齐.
本期问题1:
为什么Greenplum在执行SQL时可能存在木桶短板问题?
a. 由于分布键的数据倾斜, 某个节点的数据比其他节点多
b. 由于Greenplum某些节点的配置比较差
c. 由于Greenplum某些节点的硬件出现性能问题, 例如存储RAID 5遭受坏盘, 导致每次读取需要从校验信息中恢复数据
d. 由于某些计算节点当前比较繁忙
答案:
abcd
解释:
参考本文内容
本期问题2:
PolarDB 通过什么方式来解决SQL执行时某些节点执行较慢的木桶短板问题?
a. 重新选择分布键分布数据
b. 采用动态扫描, 每次扫描4MB数据. 处理快的节点会扫描更多的数据, 处理慢点节点扫描的数据更少.
c. 提升这些较慢节点的配置
d. 增加一层逻辑shard, 将逻辑shard重新按比例分配到不同的计算节点
答案:
b
解释:
参考本文内容
欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路.
近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号:
文章中的参考文档请点击阅读原文获得.