Postgresql输出EXPLAIN ANALYZE到文件



我需要知道一个特定查询将运行多长时间(我预计运行时间会很长)。为此,我决定只使用整个数据集的一部分对查询集运行EXPLAIN ANALYZE,并从中进行推断。但我有个问题;在连接超时之前,查询需要两个多小时,这让我没有结果。我不想增加超时时间,因为我不知道可能会持续多久(在两小时到两天之间)。

有没有什么方法可以指导SQL服务器将数据输出到服务器文件系统上的文件中,这样我就不必担心超时了?我试过以下几种:

Copy (
    EXPLAIN ANALYZE INSERT INTO <table>
    <Long complex query here>
) To '/tmp/analyze.csv' With CSV;

但是我在CCD_ 2上得到一个错误。

记录在案,是的,我想做ANALYZE,因为

  • 它减少了以后要处理的数据量,并且
  • 它给出了实际的时间估计

您可以简单地在psql中使用o将结果输出到文件:

# o /tmp/output.txt
# explain analyze ...
# o

o还可以通过管道发送命令:查看这篇博客文章,当然还有psql文档。

非常简单的技巧:

create or replace function get_explain(in qry text, out r text) returns setof text as $$
begin
  for r in execute qry loop
    raise info '%', r;
    return next;
  end loop;
  return;
end; $$ language plpgsql;

请注意,如果您不想真正修改数据,那么您可以shpuld将其包装到事务中:

begin;
copy (select get_explain('explain (analyze) select 1;')) to '/tmp/foo.foo';
select get_explain('explain (analyze, format xml) select 1;');
rollback;

可能准备使用类似的功能已经存在,但我没有找到它。

PS:它将解决语法错误的问题,但我不确定它是否解决了超时问题,因为正如文档中所提到的:

重要:请记住,当则使用ANALYZE选项。链接

您也可以用JSON格式写入文件:

EXPLAIN (ANALYZE, FORMAT JSON)

(所有的功劳都归于@seb,我主要在这里回答,这样我就可以将他们的回复添加到书签中)

最新更新