LWLock:pg_stat_statement - Layanan Basis Data Relasional Amazon

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 melakukan garbage collection operasi ke pgss_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.

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.maxParameternya 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_utilityParameter 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_utilityParameternya 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.