如何在 Postgres 上将两个 SQL 查询与 运行 进行比较
How do I compare two SQL queries to run on Postgres
我需要比较我的 Postgres 数据库中 运行 的两个查询。
我如何知道它们的执行时间和任何其他统计数据,以便在它们之间生成可靠的基准?
我能想到两个有趣的数据点来收集和比较:
执行时间。
为此,只需使用通过 UNIX 套接字连接的 psql
执行查询(以分解网络)并使用 psql
的 \timing
命令测量执行时间在客户端看到。
不要为此使用 EXPLAIN (ANALYZE)
,因为这会增加显着的开销,从而影响您的测量。
确保 运行 多次查询以获得可靠的号码。该数字将对应于热缓存的执行时间。
如果您想使用冷缓存测量执行时间,请重新启动 PostgreSQL 并清空文件系统缓存。
查询触及的块数。
为此,运行 EXPLAIN (ANALYZE, BUFFERS)
每个查询一次。
接触块的数量对性能很重要:查询接触的块越少,它(通常)越快。这个数字对于冷缓存的性能特别重要;块越少,取决于缓存的执行时间就越少。
我需要比较我的 Postgres 数据库中 运行 的两个查询。
我如何知道它们的执行时间和任何其他统计数据,以便在它们之间生成可靠的基准?
我能想到两个有趣的数据点来收集和比较:
执行时间。
为此,只需使用通过 UNIX 套接字连接的
psql
执行查询(以分解网络)并使用psql
的\timing
命令测量执行时间在客户端看到。不要为此使用
EXPLAIN (ANALYZE)
,因为这会增加显着的开销,从而影响您的测量。确保 运行 多次查询以获得可靠的号码。该数字将对应于热缓存的执行时间。
如果您想使用冷缓存测量执行时间,请重新启动 PostgreSQL 并清空文件系统缓存。
查询触及的块数。
为此,运行
EXPLAIN (ANALYZE, BUFFERS)
每个查询一次。接触块的数量对性能很重要:查询接触的块越少,它(通常)越快。这个数字对于冷缓存的性能特别重要;块越少,取决于缓存的执行时间就越少。