内容提要
8月8日和8月15日举行了第一和第二届“PostgreSQL黑客研讨会”,参与者观看了CMU数据库组举办的“疫苗数据库技术讲座(2021年)”的视频,并在研讨会上提出问题。第一次研讨会有9人参加,第二次有14人参加。讨论的主题包括PostgreSQL优化器方法论、查询优化器和查询计划的复杂性、采样和统计数据的更新。参与者希望从这些讨论中获得对未来发展的启示。
延伸解读
优化器改进的实践门槛
研讨会中,有参与者反映优化器补丁难以理解,不知从何入手。Robert Haas建议从JOIN规划代码如match_unsorted_outer()开始阅读,并强调阅读源码注释的重要性。这反映出PostgreSQL优化器开发需要较高的代码熟悉度,新手可通过跟踪具体函数和搜索术语逐步深入。
统计信息更新的挑战与方向
讨论指出,不准确的行数估计会影响性能,而定期更新统计信息(如ANALYZE和Autovacuum)是现有手段。对于固定大小的采样,估计较容易,但动态大小更复杂。HyperLogLog代码已存在但未启用,需要更多研究才能应用。这表明统计信息优化仍有较大探索空间。
查询计划方法的权衡
文章比较了自下而上和自上而下的查询计划方法。PostgreSQL主要采用自下而上,先评估基础关系再构建计划;自上而下则从顶层递归分解,可能重复询问子问题。两者各有优劣,例如自上而下可预知后续步骤,有利于JIT应用。这提示优化器设计需根据场景选择策略。
计划缓存与提示的复杂性
关于查询提示和计划缓存,讨论认为提示可能随时间失效,而缓存计划需考虑何时失效以及表变更的影响。这些权衡很复杂,没有简单方案。这提醒使用者,在缺乏提示的情况下,依赖计划缓存需谨慎评估性能变化。
Q&A
PostgreSQL黑客研讨会的主要讨论主题是什么?
主要讨论主题包括PostgreSQL优化器方法论、查询优化器和查询计划的复杂性、采样和统计数据的更新。
第一次和第二次研讨会分别有多少人参加?
第一次研讨会有9人参加,第二次有14人参加。
参与者希望从研讨会中获得什么?
参与者希望从讨论中获得对未来发展的启示。
GEQO优化器适用于什么类型的查询?
GEQO优化器适用于OLAP查询。
如何更新统计数据以提高优化器性能?
更新统计数据的过程主要通过ANALYZE和Autovacuum来实现。
下轮PostgreSQL黑客研讨会何时举行?
下轮研讨会定于9月举行。