Dampak kinerja pengaturan PostgreSQL untuk mencatat semua pernyataan

8

PostgreSQL 9.2.2 pada Windows 7 64-bit.

Pengaturan log_statementdalam postgresql.conffile menentukan pernyataan yang akan dicatat (tidak ada, DDL, modifikasi data, atau semua). Sejauh mana pengaturan log_statement = 'all'menurunkan kinerja? Saya telah membaca bahwa ini secara signifikan mengurangi kinerja, tetapi klaim ini berasal dari artikel yang lebih lama, jadi seberapa besar kerugian kinerja yang harus saya harapkan relatif terhadap log_statement = 'none'?

bwDraco
sumber

Jawaban:

12

Seperti hampir semua hal lain, itu tergantung pada perangkat keras, konfigurasi, dan beban kerja Anda.

Jika Anda menjalankan beberapa pernyataan mahal, itu akan membuat sedikit perbedaan; jika Anda menjalankan banyak pernyataan sederhana kecil itu akan membuat lebih banyak perbedaan.

Jika log Anda berada di sistem file yang sama atau bahkan hanya disk yang sama dengan basis data, pencatatan akan membuat lebih banyak perbedaan daripada jika log disimpan pada disk yang terpisah. Meskipun log tidak secara eksplisit fsync()akan dan ditulis secara berurutan, mereka masih bersaing dengan DB utama untuk I / O.

Lebih penting lagi, beberapa sistem file (khususnya ext3) akan menyiram semua data ketika ada file fsync(), jadi log menulis menjadi lebih dekat ke I / O acak daripada I / O berurutan dan memperlambat setiap komit. IIRC ini bukan masalah pada ext4 atau xfs.

Itu juga akan tergantung pada apakah Anda mengaktifkan pengaturan waktu pernyataan, metode pencatatan yang Anda gunakan, dan banyak lagi.

Pilihan terbaik adalah membandingkannya dengan simulasi beban kerja nyata Anda dan lihat.

Craig Ringer
sumber
Masuk ke stderr sebagai file teks biasa pada disk yang sama. Waktu pernyataan dinonaktifkan. Kolektor logging diaktifkan. Server kadang-kadang tunduk pada pertanyaan yang sering dan cukup kompleks.
bwDraco
@DragonLord: waktu pernyataan membuat perbedaan besar. untuk beban CPU.
Erwin Brandstetter