↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.0 / 6.5
历史版本。 PostgreSQL 7.0 已结束支持。 请参阅 当前版本手册.

63.4. Postgres GEQO 的未来实现任务

63.4.1. 基本改进

63.4.1.1. 改进查询处理完成后的内存释放

对于大型 join 查询,遗传查询优化所花费的计算时间似乎只是 Postgres 通过例程 MemoryContextFree(文件 backend/utils/mmgr/mcxt.c)释放内存所用时间的一个小分数。调试显示它卡在了例程 OrderedElemPop(文件 backend/utils/mmgr/oset.c)的一个循环中。使用普通 Postgres 查询优化算法处理长查询时也会出现同样的问题。

63.4.1.2. 改进遗传算法参数设置

在文件 backend/optimizer/geqo/geqo_params.c 的例程 gimme_pool_size 和 gimme_number_generations 中,我们必须为参数设置找到一种折中,以满足两个相互竞争的需求:

  • 查询计划的最优性

  • 计算时间

63.4.1.3. 为整数溢出寻找更好的解决方案

在文件 backend/optimizer/geqo/geqo_eval.c 的例程 geqo_joinrel_size 中,目前对 MAXINT 溢出的临时做法是把 Postgres 整数值 rel->size 设为其对数。对 backend/nodes/relation.h 中 Rel 的修改肯定会对整个 Postgres 实现产生严重影响。

63.4.1.4. 为内存耗尽寻找解决方案

当查询涉及的关系超过 10 个时可能发生内存耗尽。在文件 backend/optimizer/geqo/geqo_eval.c 中,例程 gimme_tree 会被递归调用。也许我忘了正确释放某些东西,但我不知道是什么。当然,join 的 rel 数据结构会随着装进去的关系越来越多而不断增长。欢迎建议 :-(

参考文献

GEQ 算法的参考信息。

<bookbiblio><title> The Hitch-Hiker's Guide to Evolutionary Computation </title><authorgroup>Jörg HeitkötterDavid Beasley</authorgroup><publisher><publishername> InterNet resource </publishername></publisher>

摘要

comp.ai.genetic 中的 FAQ 见 Encore。

</bookbiblio><bookbiblio><title> The Design and Implementation of the Postgres Query Optimizer </title><authorgroup>Z. Fong</authorgroup><publisher><publishername> University of California, Berkeley Computer Science Department </publishername></publisher>

摘要

文件 planner/Report.ps(在 'postgres-papers' 发行版中)。

</bookbiblio>
<bookbiblio><title> Fundamentals of Database Systems </title><authorgroup>R. ElmasriS. Navathe</authorgroup><publisher><publishername> The Benjamin/Cummings Pub., Inc. </publishername></publisher></bookbiblio>

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.