Postgres: Bagaimana saya bisa melihat semua pernyataan SQL dijalankan oleh server database?

23

Saya sedang dalam proses meninjau setiap pernyataan SQL yang dibuat aplikasi terhadap database, untuk alasan kinerja. Apakah ada cara mudah untuk mencatat semua pernyataan yang dijalankan oleh server database PostgreSQL? Terima kasih.

Jin Kim
sumber
Dalam penjelasan berikut ini dijelaskan tentang cara melihat permintaan yang sedang berjalan tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Jawaban:

27

Opsi konfigurasi yang Anda cari adalah log_statement = "all"(jika Anda hanya menginginkan pernyataan), atau log_min_statement_duration = <some number>jika Anda hanya setelah permintaan "lambat" (untuk beberapa nilai "lambat"). Lihat http://www.postgresql.org/docs/current/static/runtime-config-logging.html untuk detail lebih lanjut tentang konfigurasi pembuatan log.

womble
sumber
1
Mencatat semua pernyataan adalah pembunuh kinerja (sebagaimana dinyatakan dalam dokumen resmi). Namun, 8.4 memiliki fitur yang bagus untuk mendapatkan explain analyzepermintaan yang lambat pada ikatan yang dieksekusi, Anda mungkin ingin memulai pengujian dengan ini karena 8.4 belum dirilis tetapi merupakan opsi yang bagus untuk mengetahui bahwa terjadi pada saat eksekusi , jika menganalisis menjelaskan output OK Anda mungkin menjalankan ke masalah dengan I / O atau batas CPU, tapi setidaknya Anda akan tahu itu bukan permintaan sendiri
serverhorror
5
Saya sangat suka opsi log_statement = 'mod'. Itu hanya menunjukkan membuat, memperbarui, dan menghapus, dan melewatkan semua pernyataan pilih. Hebat jika Anda mencoba mencari tahu kode mana yang mengubah beberapa bidang.
Don Kirkby
5

The auto_explainModul ini sangat berguna untuk ini. Itu tidak hanya akan mencatat pernyataan, itu akan mencatat rencana pelaksanaannya dan bahkan dapat mencatat pernyataan yang dijalankan dalam fungsi PL / PgSQL. Hit kinerja cukup rendah kecuali Anda mengaktifkan analisis, dalam hal ini Anda mengeluarkan sedikit overhead waktu untuk semua pertanyaan.

Lihat auto_explaindi dokumentasi.

Craig Ringer
sumber
Perhatikan bahwa "auto_explain" adalah modul, sehingga tidak berjalan pada database AWS RDS Postgres :(
johntellsall
1
@johntellsall mendukung RDS auto_explain, ini ada dalam daftar modul yang diberkati. Lihat dokumentasi di docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Craig Ringer
3

Tentu saja, Anda dapat mendeteksi kueri paling lambat sendiri, tetapi saya menyarankan Anda untuk menggunakan pgFouine - penganalisis log PostgreSQL. Sangat mudah untuk menginstal dan sangat berguna.

Contoh laporan: di sini dan di sini .

Severe_admin
sumber
Saya menggunakan pgFouine pada sebuah proyek dan mengidentifikasi beberapa tempat di mana indeks akan banyak membantu.
Paul Tomblin