postgreSQL解释解析函数

Posted

技术标签:

【中文标题】postgreSQL解释解析函数【英文标题】:postgreSQL explain analyse a function 【发布时间】:2015-05-30 11:14:09 【问题描述】:

我正在尝试了解 postgresql 中的查询优化,并且我有一个包含一些查询的函数。其中一些是简单的查询,将一个值保存到一个变量中,然后下一个查询使用这个变量来查找一些东西。让我们说:

 function()...
select type into t
from tableA
where code = a_c;

select num into n
from tableB
where id = t; 
end function...

还有更多.. 如果我想解释分析整个函数,我执行命令 explain analyze select function();这是正确的方法还是我应该解释分析函数内的每个查询,如果是这样,用什么值?

【问题讨论】:

如果您对每个单独的查询进行“解释分析”,您将能够查看是否可以优化特定查询。不确定它在功能层面上是如何工作的,以及它是否有意义。 您可以将函数体放入PREPARE thing (arg1, arg2, ...) AS ... original body ...; 并使用explain analyze execute thing (args); 调用它 @wildplasser 体内的声明语句有错误,如果我不声明它们,我会收到此错误:无法准备实用程序语句 注意:问题中没有“声明声明”。 (并且 SQL 中没有 declare 语句) 【参考方案1】:

考虑使用auto_explain 模块:

auto_explain 模块提供了一种记录执行计划的方法 自动运行慢语句,而无需运行 EXPLAIN 手。这对于跟踪未优化的情况特别有用 大型应用程序中的查询。

开启auto_explain.log_nested_statements

auto_explain.log_nested_statements(布尔值)

auto_explain.log_nested_statements 导致嵌套语句 (在函数内执行的语句)考虑进行日志记录。 关闭时,仅记录***查询计划。这个参数 默认关闭。只有超级用户才能更改此设置。

【讨论】:

我尝试这样做,但我得到的输出是函数返回的内容。我使用的代码是: LOAD 'auto_explain';设置 auto_explain.log_min_duration = 0; SET auto_explain.log_analyze = true; SET auto_explain.log_nested_statements = on;选择 find_4(); 这个模块完成explain的结果进入服务器的日志,它不会改变你得到的输出。

以上是关于postgreSQL解释解析函数的主要内容,如果未能解决你的问题,请参考以下文章

Postgresq9.6主从部署

postgresql 安装

Pacemaker+Corosync搭建PostgreSQL集群

PostgreSQL备机checkpoint

PostgreSQL 将数据库存储在哪里?

PostgreSQL 将数据库存储在哪里?