sql - 如何比较两个 SQL 查询以在 Postgres 上运行

标签 sql database postgresql benchmarking

我需要比较将在我的 Postgres 数据库中运行的两个查询。

我如何知道它们的执行时间和任何其他统计数据,以便在它们之间生成可靠的基准?

最佳答案

我可以想到两个有趣的数据点来收集和比较:

  1. 执行时间。

    为此,只需使用通过 UNIX 套接字连接的 psql 执行查询(以排除网络)并使用 psql\timing 用于测量在客户端上看到的执行时间的命令。

    不要为此使用 EXPLAIN (ANALYZE),因为这会增加显着的开销,从而影响您的测量。

    确保多次运行查询以获得可靠的数字。该数字将对应于热缓存的执行时间。

    如果您想使用冷缓存测量执行时间,请重新启动 PostgreSQL 并清空文件系统缓存

  2. 查询触及的 block 数。

    为此,对每个查询运行一次 EXPLAIN (ANALYZE, BUFFERS)

    接触 block 的数量对性能很重要:查询接触的 block 越少,它(通常)就会越快。这个数字对于冷缓存的性能特别重要; block 越少,取决于缓存的执行时间就越少。

关于sql - 如何比较两个 SQL 查询以在 Postgres 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246126/

相关文章:

java - Hibernate 可以将列的子集映射到内部子 Pojo 中

database - Flask Migrate 和 PostgreSQL 数据更新

MySQL - 行大小如何超过 65535

PHP - 如何同时使用 ORDER BY 和 GROUP BY

sql - 如何在没有函数 generate_series 的情况下在 Postgresql 中创建数据系列

javascript - node.js 和 PostgreSQL 查询 - 抛出新的 TypeError ('first argument must be a string or Buffer' );

SQL 服务器 : Where clause inside IF .。别的

sql - 导入 Microsoft Access 数据库时保留自动编号列的值

java - 获取日期之间的数据

sql - 改进 rails 中的调度/预订 sql 查询