Как сравнить два SQL-запроса для запуска на Postgres - PullRequest
1 голос
/ 21 мая 2019

Мне нужно сравнить два запроса, которые будут выполняться в моей базе данных Postgres.

Как узнать время выполнения и любую другую статистику о них, чтобы я мог получить надежный эталон между ними?

1 Ответ

2 голосов
/ 22 мая 2019

Я могу вспомнить две интересные точки данных для сбора и сравнения:

  1. Время выполнения.

    Для этого просто выполните запрос, используя psql, подключенный через сокеты UNIX (для разделения сети), и используйте команду psql \timing для измерения времени выполнения, как видно на клиенте.

    Не используйте для этого EXPLAIN (ANALYZE), поскольку это добавит заметные накладные расходы, которые повлияют на ваши измерения.

    Обязательно запустите auery несколько раз, чтобы получить надежный номер. Это число будет соответствовать времени выполнения с теплым кэшем.

    Если вы хотите измерить время выполнения с холодным кешем, перезапустите PostgreSQL и очистите кеш файловой системы .

  2. Количество блоков, затронутых запросом.

    Для этого выполните EXPLAIN (ANALYZE, BUFFERS) один раз для каждого запроса.

    Число касаний блоков имеет большое значение для производительности: чем меньше блоков касается запрос, тем быстрее (часто) он будет. Это число особенно важно для производительности с холодным кешем; чем меньше блоков, тем меньше время выполнения будет зависеть от кэширования.

...