我正在使用Postgresql。我想测试一个函数执行需要多少时间。由于这个函数只需要几毫秒,我想在一个循环中调用它1000s次来得到一个准确的数字。MySQL有一个BENCHMARK()函数可以做到这一点。是否有等效的函数,或者我必须编写一个带循环的过程来做到这一点?
vmdwslir1#
在PostgreSQL中,通常使用generate_series执行此操作:
generate_series
SELECT my_function() FROM generate_series(1,5000);
或
SELECT (SELECT my_query ....) FROM generate_series(1,5000);
在后一种情况下,您可以将OFFSET 0添加到子查询中,或者将其 Package 在STRICT SQL函数中,以防止查询计划器提取公共条件和子子句,或者使用其他聪明的方法。可以使用psql的\timing命令、SET log_duration = on命令或EXPLAIN (ANALYZE, BUFFERS)命令来获得定时,所有这些命令的定时都有细微的不同-请参阅文档。\timing测量时间,包括往返和到客户端的值传输。log_duration测量服务器端执行时间。EXPLAIN (ANALYZE, BUFFERS)测量语句的详细信息'S的执行,但是增加了定时开销,这会使其稍微慢下来。
OFFSET 0
STRICT
\timing
SET log_duration = on
EXPLAIN (ANALYZE, BUFFERS)
log_duration
bhmjp9jg2#
写一个循环的过程-不应该超过5分钟。
ki1q1bka3#
类似SELECT my_function() FROM generate_series(1,5000);的查询被 Package 到函数benchmark()
3条答案
按热度按时间vmdwslir1#
在PostgreSQL中,通常使用
generate_series
执行此操作:或
在后一种情况下,您可以将
OFFSET 0
添加到子查询中,或者将其 Package 在STRICT
SQL函数中,以防止查询计划器提取公共条件和子子句,或者使用其他聪明的方法。可以使用psql的
\timing
命令、SET log_duration = on
命令或EXPLAIN (ANALYZE, BUFFERS)
命令来获得定时,所有这些命令的定时都有细微的不同-请参阅文档。\timing
测量时间,包括往返和到客户端的值传输。log_duration
测量服务器端执行时间。EXPLAIN (ANALYZE, BUFFERS)
测量语句的详细信息'S的执行,但是增加了定时开销,这会使其稍微慢下来。bhmjp9jg2#
写一个循环的过程-不应该超过5分钟。
ki1q1bka3#
类似
SELECT my_function() FROM generate_series(1,5000);
的查询被 Package 到函数benchmark()