gpt4 book ai didi

postgresql - Postgresql 查询的基准测试/性能

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

我想测量我编写的postgresql 代码的性能。在代码表中创建,调用自写函数等。环顾四周,我发现 EXPLAIN ANALYSE 是可行的方法。但是,据我了解,代码只执行一次。为了进行更现实的分析,我想多次执行代码并将每次迭代的结果写在某个地方,最好是在一个表中(稍后用于统计)。

有没有办法用原生的 postgresql 函数做到这一点?如果没有原生的 postgresql 函数,我可以用一个简单的循环来完成吗?此外,我将如何写出每个 EXPLAIN ANALYZE 迭代的信息?

最佳答案

一种方法是编写一个运行解释的函数,然后将其输出假脱机到一个文件中(或将其插入到一个表中)。

例如:

create or replace function show_plan(to_explain text)
returns table (line_nr integer, line text)
as
$$
declare
l_plan_line record;
l_line integer;
begin
l_line := 1;
for l_plan_line in execute 'explain (analyze, verbose)'||to_explain loop
return query select l_line, l_plan_line."QUERY PLAN";
l_line := l_line + 1;
end loop;
end;
$$
language plpgsql;

然后你可以使用generate_series()多次运行一条语句:

select g.i as run_nr, e.*
from show_plan('select * from foo') e
cross join generate_series(1,10) as g(i)
order by g.i, e.line_nr;

这将使用传递的 SQL 语句运行该函数 10 次。结果可以假脱机到一个文件(如何做取决于您使用的 SQL 客户端)或插入到一个表中。


对于自动分析,使用更“可解析”的解释格式可能更容易,例如XML 或 JSON。这在输出中也更容易处理,因为计划是单个 XML(或 JSON)值而不是多个文本行:

create or replace function show_plan_xml(to_explain text)
returns xml
as
$$
begin
return execut 'explain (analyze, verbose, format xml)'||to_explain;
end;
$$
language plpgsql;

然后使用:

select g.i as run_nr, show_plan_xml('select * from foo')
from join generate_series(1,10) as g(i)
order by g.i;

关于postgresql - Postgresql 查询的基准测试/性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446269/

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