↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.5 已于 2004 年 6 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

53.4. Postgres GEQO 的未来实现任务

53.4.1. 基本改进

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

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

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

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

  • 查询计划的最优性

  • 计算时间

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

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

53.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>

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。