数据库是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()函数相比,它们花费的时间更少。如何改进?
答案 0 :(得分:1)
很奇怪,但有可能。我有一些假设:
如果你在函数内部执行一些非常密集的IO操作,那么你可以点击检查点 - 对于一些更大的函数,检查点更有可能。其他变体 - 以三个独立批次运行允许在调用之间运行autovacuum。所以一些数据可以抽真空。第三种变体 - 锁定 - 锁定在事务结束时释放。所以你的代码可以等待一些锁定。
如果没有更多信息,就无法确定实际原因。尝试通过auto_explain检查这些函数中的每个语句(例如)。