我想对包含我为 PostgreSQL 编写的用户定义函数的查询进行基准测试。有没有标准的方法来运行这样的基准?
我知道可以\timing
在 psql 提示符下打开计时,但理想情况下,我希望有一个自动处理所有事情的脚本:运行几次查询,每次运行后清除 PostgreSQL 缓存(可能通过重新启动 PostgreSQL 的服务),并输出平均运行时间(和使用的内存是一个加号)。
我想对包含我为 PostgreSQL 编写的用户定义函数的查询进行基准测试。有没有标准的方法来运行这样的基准?
我知道可以\timing
在 psql 提示符下打开计时,但理想情况下,我希望有一个自动处理所有事情的脚本:运行几次查询,每次运行后清除 PostgreSQL 缓存(可能通过重新启动 PostgreSQL 的服务),并输出平均运行时间(和使用的内存是一个加号)。
广泛使用的工具是 SQL command
EXPLAIN ANALYZE
,答案中可能包含更多选项以获取更多详细信息。这会输出带有规划器估计值和实际执行时间的查询计划。为什么要清除缓存?通常更可能的用例是填充缓存。如果您仍然想走那条路,这里是关于 SO 的相关答案。
不重置缓存,这里有两种简单的方法来测试多次迭代:
简单的 UDF
或者使用随机输入 - 示例中 0 到 5000 之间的随机数:
或使用现实生活表:
更复杂的功能/查询
称呼:
小心:查询实际执行!
小心:不适合公众使用。可能的 SQL 注入。
同样,如果需要,您可以使用随机参数。可能带有
USING
of 的子句EXECUTE
。更多选择
\timing
log_duration
clock_timestamp()
有关详细信息,请参阅: