Мне нужно сравнить два запроса, которые будут выполняться в моей базе данных Postgres.
Как мне узнать время выполнения и любую другую статистику, чтобы я мог создать надежный эталон между ними?
Я могу придумать две интересные точки данных для сбора и сравнения:
Время исполнения.
Для этого просто выполните запрос, используя psql
, подключенный через сокеты UNIX (чтобы исключить сеть), и используйте команду psql
\timing
, чтобы измерить время выполнения, как видно на клиенте.
Не используйте для этого EXPLAIN (ANALYZE)
, так как это добавит заметных накладных расходов, которые повлияют на ваши измерения.
Обязательно запустите запрос несколько раз, чтобы получить надежный номер. Это число будет соответствовать времени выполнения с теплым кешем.
Если вы хотите измерить время выполнения с холодным кешем, перезапустите PostgreSQL и очистить кеш файловой системы.
Количество блоков, затронутых запросом.
Для этого запустите EXPLAIN (ANALYZE, BUFFERS)
один раз для каждого запроса.
Количество затронутых блоков имеет большое значение для производительности: чем меньше блоков затрагивает запрос, тем быстрее он (часто) будет. Это число особенно важно для производительности с холодным кешем; чем меньше блоков, тем меньше время выполнения будет зависеть от кэширования.
Вы используете
EXPLAIN ANALYZE
thinkbot.com/blog/reading-an-explain-analyze-query-plan