Bagaimana saya mengatur waktu SQL-queries menggunakan psql?

238

Saya ingin membandingkan beberapa query SQL dengan database PostgreSQL saya. Apakah ada cara saya dapat menggunakan SQL-queries psql?

Jonas
sumber
4
Untuk detail lebih lanjut tentang pembandingan kueri PostgreSQL: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt

Jawaban:

321

Nyalakan waktu dengan memasukkan:

\timing

Caleb
sumber
1
Dari bash out, opsi "-c" dari psqltidak mengizinkan pengaturan ini. Anda dapat melakukan ini dengan sesuatu seperti: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
6
Atau lakukanpsql -c '\timing' -c 'select 1'
cdmckay
72

Pengaturan waktu dapat diaktifkan dengan \timingdi psql prompt (seperti yang sudah dikatakan Caleb).

Jika Anda menggunakan 8.4 atau lebih, Anda dapat menambahkan argumen on / off opsional\timing , yang dapat membantu jika Anda ingin dapat mengatur waktu pada .psqlrc - Anda kemudian dapat mengatur \timing onsecara eksplisit dalam skrip di mana plain \timingakan beralih itu mati

Jack Douglas
sumber
12

Waktu yang \timingkembali juga termasuk latensi jaringan, jika Anda terhubung ke server jauh.

Ketika Anda tidak menginginkannya dan juga tidak memerlukan output kueri, gunakan yang lebih baik EXPLAIN ANALYZE, yang menampilkan rencana kueri dengan perkiraan perencana ditambah waktu eksekusi aktual.

sebagai contoh, EXPLAIN ANALYZE SELECT foo from bar ;

Devi
sumber
1
... satu-satunya masalah adalah Anda tidak menerima output permintaan normal.
dezso
2
Menggunakan explain analyzehasil kali yang kira-kira dua kali lipat apa yang saya lihat saat menggunakan \timing, yang merupakan kebalikan dari apa yang saya harapkan berdasarkan komentar di sini mengenai latensi jaringan. Saya menduga bahwa ada overhead dalam eksekusi normal analyzeyang menambah waktu permintaan. Berdasarkan dokumen, saya pikir itu EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barakan memberi Anda informasi waktu yang lebih berguna. Lihat postgresql.org/docs/9.6/static/sql-explain.html untuk detailnya.
larsks