gpt4 book ai didi

postgresql - 执行准备好的语句是否跳过 PostgreSQL 中的计划阶段

转载 作者:行者123 更新时间:2023-11-29 12:42:27 25 4
gpt4 key购买 nike

我想知道我是否在 PostgreSQL 中准备了一条语句,即:

PREPARE newquery(int) AS
SELECT * FROM table1 WHERE somefield > $1;

我执行的时候后端会不会调用parse analysis和planner:

EXECUTE newquery(123);

我找到了一些 documentation它说 PostgreSQL “跳过”准备好的查询的解析分析和计划,并通过这样做显着优化查询执行。

我尝试通过覆盖 post_parse_analyze_hookplanner_hook 来测试它,并从中简单地将一些内容写入日志文件(即“Planner called”),所以我可以看到如果调用规划器和解析分析器。这种测试方法是否有效?

我很困惑,因为每次我执行 EXECUTE newquery(some number); 解析分析器和规划器都会被调用。

我这样做是因为我想计算一个查询被编译了多少次,以便更好地理解“查询缓存”。

注意:我在单个 session 中执行此操作。每次连接到服务器时,我都会重新准备语句。

为什么叫planner和parse analyzer?

最佳答案

这一定是9.2引入的“自定义计划”功能。对于准备好的语句的前几次执行,它将生成一个使用参数值的自定义计划,然后切换到通用计划(不使用参数值)如果这些计划看起来不如通用计划。

尝试EXECUTE准备好的语句至少六次,看看是否仍然调用规划器。

关于postgresql - 执行准备好的语句是否跳过 PostgreSQL 中的计划阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com