Jak mogę mierzyć czas zapytania SQL za pomocą psql?

238

Chciałbym przetestować niektóre zapytania SQL względem mojej bazy danych PostgreSQL. Czy jest jakiś sposób na sprawdzenie czasu zapytań SQL psql?

Jonas
źródło
4
Aby uzyskać więcej informacji na temat testów porównawczych zapytań PostgreSQL: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt

Odpowiedzi:

321

Po prostu włącz synchronizację, wprowadzając:

\timing

Caleb
źródło
1
Z naszego basha opcja „-c” psqlnie pozwala na to ustawienie. Możesz to zrobić za pomocą: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
6
Albo zróbpsql -c '\timing' -c 'select 1'
cdmckay
12

Zwracany czas \timingobejmuje również opóźnienie sieciowe, jeśli łączysz się ze zdalnym serwerem.

Jeśli nie chcesz tego i nie potrzebujesz również danych wyjściowych zapytania, lepiej użyj tego EXPLAIN ANALYZE, który generuje plan zapytania wraz z szacunkami planisty oraz faktycznymi czasami wykonania.

na przykład, EXPLAIN ANALYZE SELECT foo from bar ;

Devi
źródło
1
... jedynym problemem jest to, że nie otrzymujesz normalnego wyniku zapytania.
dezso,
2
Używanie explain analyzezbiorów daje czasy, które są w przybliżeniu dwa razy większe niż to, co widzę podczas używania \timing, co jest przeciwieństwem tego, czego oczekiwałbym na podstawie komentarzy tutaj dotyczących opóźnienia sieci. Podejrzewam, że normalne wykonanie wiąże się z narzutem, analyzektóry wydłuża czas zapytania. Na podstawie dokumentów uważam, że EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM bardostarczy Ci bardziej przydatnych informacji o czasie. Szczegółowe informacje można znaleźć na stronie postgresql.org/docs/9.6/static/sql-explain.html .
larsks,