Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
LWLock:pg_stat_statement
Peristiwa LWLock tunggu: PG_STAT_Statements terjadi ketika ekstensi pg_stat_statements
mengambil kunci eksklusif pada tabel hash yang melacak pernyataan SQL. Ini terjadi dalam skenario berikut:
-
Ketika jumlah pernyataan yang dilacak mencapai nilai
pg_stat_statements.max
parameter yang dikonfigurasi dan ada kebutuhan untuk memberi ruang untuk lebih banyak entri, ekstensi melakukan pengurutan pada jumlah panggilan, menghapus 5% dari pernyataan yang paling tidak dieksekusi, dan mengisi ulang hash dengan entri yang tersisa. -
Ketika
pg_stat_statements
melakukangarbage collection
operasi kepgss_query_texts.stat
file pada disk dan menulis ulang file.
Versi mesin yang didukung
Konteks
Memahami ekstensi pg_stat_statement - Ekstensi pg_stat_statement melacak statistik eksekusi pernyataan SQL dalam tabel hash. Ekstensi melacak pernyataan SQL hingga batas yang ditentukan oleh pg_stat_statements.max
parameter. Parameter ini menentukan jumlah maksimum pernyataan yang dapat dilacak yang sesuai dengan jumlah maksimum baris dalam tampilan pg_stat_statement.
Persistensi statistik pernyataan — Ekstensi mempertahankan statistik pernyataan di seluruh instans dimulai ulang dengan:
-
Menulis data ke file bernama pg_stat_statements.stat
-
Menggunakan parameter pg_stat_statements.save untuk mengontrol perilaku persistensi
Ketika pg_stat_statements.save diatur ke:
-
aktif (default): Statistik disimpan saat shutdown dan dimuat ulang saat server dimulai
-
off: Statistik tidak disimpan saat shutdown atau dimuat ulang saat server dimulai
Penyimpanan teks kueri — Ekstensi menyimpan teks kueri yang dilacak dalam file bernama. pgss_query_texts.stat
File ini dapat tumbuh menjadi dua kali lipat ukuran rata-rata semua pernyataan SQL yang dilacak sebelum pengumpulan sampah terjadi. Ekstensi memerlukan kunci eksklusif pada tabel hash selama operasi pembersihan dan menulis ulang pgss_query_texts.stat
file.
Proses deallocation pernyataan — Ketika jumlah pernyataan yang dilacak mencapai pg_stat_statements.max
batas dan pernyataan baru perlu dilacak, ekstensi:
-
Mengambil kunci eksklusif: pg_stat_statement) LWLock pada tabel hash.
-
Memuat data yang ada ke dalam memori lokal.
-
Melakukan quicksort berdasarkan jumlah panggilan.
-
Menghapus pernyataan yang paling tidak disebut (5% bawah).
-
Mengisi ulang tabel hash dengan entri yang tersisa.
Monitoring statement deallocation — Di PostgreSQL 14 dan yang lebih baru, Anda dapat memantau deallocation pernyataan menggunakan tampilan pg_stat_statements_info. Tampilan ini mencakup kolom dealloc yang menunjukkan berapa kali pernyataan dialokasikan untuk memberi ruang bagi yang baru
Jika deallocation pernyataan sering terjadi, itu akan menyebabkan pengumpulan sampah pgss_query_texts.stat
file yang lebih sering pada disk.
Kemungkinan penyebab peningkatan peristiwa tunggu
Penyebab khas peningkatan LWLock:pg_stat_statements
menunggu meliputi:
-
Peningkatan jumlah kueri unik yang digunakan oleh aplikasi.
-
Nilai
pg_stat_statements.max
parameter menjadi kecil dibandingkan dengan jumlah query unik yang digunakan.
Tindakan
Kami merekomendasikan berbagai tindakan, tergantung pada penyebab peristiwa tunggu Anda. Anda dapat mengidentifikasi LWLock:pg_stat_statements
peristiwa dengan menggunakan Amazon RDS Performance Insights atau dengan menanyakan tampilan. pg_stat_activity
Sesuaikan pg_stat_statements
parameter berikut untuk mengontrol perilaku pelacakan dan kurangi: LWLock pg_stat_ statement wait events.
Topik
Nonaktifkan parameter pg_stat_statements.track
Jika peristiwa:pg_stat_statement LWLock wait berdampak buruk pada kinerja database, dan solusi cepat diperlukan sebelum analisis lebih lanjut dari tampilan pg_stat_statements
untuk mengidentifikasi akar penyebab, parameter dapat dinonaktifkan dengan menyetelnya ke. pg_stat_statements.track
none
Ini akan menonaktifkan pengumpulan statistik pernyataan.
Meningkatkan parameter pg_stat_statements.max
Untuk mengurangi deallocation dan meminimalkan pengumpulan sampah pgss_query_texts.stat
file pada disk, tingkatkan nilai pg_stat_statements.max
parameter. Nilai default-nya adalah 5,000
.
catatan
pg_stat_statements.max
Parameternya statis. Anda harus memulai ulang instans DB Anda untuk menerapkan perubahan apa pun pada parameter ini.
Nonaktifkan parameter pg_stat_statements.track_utility
Anda dapat menganalisis tampilan pg_stat_statement untuk menentukan perintah utilitas mana yang paling banyak menggunakan sumber daya yang dilacak. pg_stat_statements
pg_stat_statements.track_utility
Parameter mengontrol apakah modul melacak perintah utilitas, yang mencakup semua perintah kecuali SELECT, INSERT, UPDATE, DELETE, dan MERGE. Secara default, parameter ini diatur keon
.
Misalnya, ketika aplikasi Anda menggunakan banyak kueri savepoint, yang secara inheren unik, itu dapat meningkatkan deallocation pernyataan. Untuk mengatasinya, Anda dapat menonaktifkan pg_stat_statements.track_utility
parameter untuk berhenti melacak pg_stat_statements
kueri savepoint.
catatan
pg_stat_statements.track_utility
Parameternya adalah parameter dinamis. Anda dapat mengubah nilainya tanpa memulai ulang instance database Anda.
contoh Contoh kueri titik simpan unik di pg_stat_statement
query | queryid
-------------------------------------------------+---------------------
SAVEPOINT JDBC_SAVEPOINT_495701 | -7249565344517699703
SAVEPOINT JDBC_SAVEPOINT_1320 | -1572997038849006629
SAVEPOINT JDBC_SAVEPOINT_26739 | 54791337410474486
SAVEPOINT JDBC_SAVEPOINT_1294466 | 8170064357463507593
ROLLBACK TO SAVEPOINT JDBC_SAVEPOINT_65016 | -33608214779996400
SAVEPOINT JDBC_SAVEPOINT_14185 | -2175035613806809562
SAVEPOINT JDBC_SAVEPOINT_45837 | -6201592986750645383
SAVEPOINT JDBC_SAVEPOINT_1324 | 6388797791882029332
PostgreSQL 17 memperkenalkan beberapa penyempurnaan untuk pelacakan perintah utilitas:
-
Nama Savepoint sekarang ditampilkan sebagai konstanta.
-
Global Transaction IDs (GIDs) dari perintah komit dua fase sekarang ditampilkan sebagai konstanta.
-
Nama pernyataan DEALLOCATE ditampilkan sebagai konstanta.
-
Parameter CALL sekarang ditampilkan sebagai konstanta.