Saya ingin membandingkan permintaan yang berisi fungsi yang ditentukan pengguna yang saya tulis untuk PostgreSQL. Apakah ada cara standar untuk menjalankan tolok ukur seperti itu?
Saya tahu bahwa pengaturan waktu dapat diaktifkan dengan \timing
prompt psql, tetapi idealnya saya ingin memiliki skrip yang menangani semuanya secara otomatis: menjalankan kueri beberapa kali, membersihkan cache PostgreSQL setelah setiap kali dijalankan (mungkin dengan me-restart PostgreSQL layanan), dan keluaran waktu berjalan rata-rata (dan memori yang digunakan adalah nilai tambah).
postgresql
benchmark
Franck Dernoncourt
sumber
sumber
pgbench
; Anda dapat menjalankannya dengan skrip khusus untuk melakukan apa yang Anda inginkan. Dengan skrip shell pembungkus untuk berhenti dan restart Pg dan untuk menjatuhkan cache disk OS Anda memiliki sebagian besar dari apa yang Anda butuhkan.Jawaban:
Alat yang banyak digunakan adalah perintah SQL
EXPLAIN ANALYZE
, mungkin dengan lebih banyak opsi untuk lebih detail dalam jawabannya. Itu menampilkan rencana permintaan dengan perkiraan perencana ditambah waktu eksekusi aktual.Mengapa Anda ingin menghapus cache? Kasus penggunaan yang umumnya lebih mungkin adalah bahwa cache diisi. Jika Anda masih ingin menempuh rute itu, berikut adalah jawaban terkait pada SO .
Tidak mengatur ulang cache, berikut adalah dua cara sederhana untuk menguji dengan banyak iterasi:
UDF sederhana
Atau dengan input acak - angka acak antara 0 dan 5000 pada contoh:
Atau dengan tabel kehidupan nyata:
Fungsi / kueri yang lebih kompleks
Panggilan:
Hati-hati : Permintaan sebenarnya dieksekusi!
Hati-hati : Tidak cocok untuk penggunaan umum. Kemungkinan injeksi SQL.
Sekali lagi, Anda dapat menggunakan parameter acak jika diperlukan. Mungkin dengan
USING
klausaEXECUTE
.sumber