为什么嵌套函数与单个函数相比花费的时间太长

时间:2015-05-05 06:24:37

标签: postgresql plpgsql

数据库是PostgreSQL 9.3.6

在下面的代码段中,all_funs()是一个嵌套函数。如果我们运行这样的函数,则需要很长时间。

create or replace function all_funs() returns void as $$
begin
  perform a();
  perform b();
  perform c();
end; $$ language plpgsql;

这里a(),b()和c()是函数。所有函数都以void作为返回类型。

如果我们分别运行函数a(),b()和c(),与all_funs()函数相比,它们花费的时间更少。如何改进?

1 个答案:

答案 0 :(得分:1)

很奇怪,但有可能。我有一些假设:

如果你在函数内部执行一些非常密集的IO操作,那么你可以点击检查点 - 对于一些更大的函数,检查点更有可能。其他变体 - 以三个独立批次运行允许在调用之间运行autovacuum。所以一些数据可以抽真空。第三种变体 - 锁定 - 锁定在事务结束时释放。所以你的代码可以等待一些锁定。

如果没有更多信息,就无法确定实际原因。尝试通过auto_explain检查这些函数中的每个语句(例如)。