Как я могу время SQL-запросов с помощью psql?

238

Я хотел бы сравнить некоторые SQL-запросы с моей базой данных PostgreSQL. Можно ли как-то рассчитывать время использования SQL-запросов psql?

Jonas
источник
4
Более подробная информация о тестировании производительности PostgreSQL: dba.stackexchange.com/q/42012/9622
Франк Дернонкур,

Ответы:

321

Просто включите время, введя:

\timing

Калеб
источник
1
Из bash опция «-c» psqlне разрешает эту настройку. Вы можете сделать это с чем-то вроде: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
6
Или сделайтеpsql -c '\timing' -c 'select 1'
cdmckay
72

Время можно включить с \timingпомощью приглашения psql (как уже сказал Калеб).

Если у вас 8.4 или выше, вы можете добавить необязательный аргумент включения / выключения для\timing , который может быть полезен, если вы хотите иметь возможность установить синхронизацию в .psqlrc - тогда вы можете \timing onявно установить в сценарии, где в \timingпротивном случае обычное переключалось бы это от

Джек Дуглас
источник
12

Время , которое \timingвозвращает также включает в себя сетевую задержку, если вы подключаетесь к удаленному серверу.

Если вы не хотите этого и не нуждаетесь в выводе запроса тоже, лучше используйте EXPLAIN ANALYZE, который выводит план запроса с оценками планировщика плюс фактическое время выполнения.

например, EXPLAIN ANALYZE SELECT foo from bar ;

Devi
источник
1
... единственная проблема в том, что вы не получаете нормальный вывод запроса.
Дезсо
2
Использование explain analyzeдает примерно вдвое больше времени, чем я вижу при использовании \timing, что противоположно тому, что я ожидал, основываясь на комментариях, касающихся задержки в сети. Я подозреваю, что при обычном выполнении накладные расходы analyzeувеличивают время запроса. Основываясь на документах, я думаю, что EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barэто даст вам более полезную информацию о времени. См. Postgresql.org/docs/9.6/static/sql-explain.html для получения подробной информации.
Жаворонки