Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyelesaikan penghambat vakum yang tidak dapat diidentifikasi di Aurora PostgreSQL
Bagian ini mengeksplorasi alasan tambahan yang dapat mencegah penyedot debu membuat kemajuan. Masalah ini saat ini tidak dapat diidentifikasi secara langsung oleh postgres_get_av_diag() fungsi.
Inkonsistensi indeks
Indeks yang tidak konsisten secara logis dapat mencegah autocacuum membuat kemajuan. Kesalahan berikut atau kesalahan serupa dicatat selama fase vakum indeks atau ketika indeks diakses oleh pernyataan SQL.
ERROR: right sibling's left-link doesn't match:block 5 links to 10 instead of expected 2 in indexix_name
ERROR: failed to re-find parent key in index "XXXXXXXXXX" for deletion target page XXX CONTEXT: while vacuuming indexindex_nameof relationschema.table
Bimbingan
Bangun kembali indeks atau lewati indeks menggunakan INDEX_CLEANUP manualVACUUM FREEZE.
-
Menggunakan opsi CONCURENT LY — Sebelum PostgreSQL versi 12, membangun kembali indeks memerlukan kunci tabel eksklusif, membatasi akses ke tabel. Dengan PostgreSQL versi 12, dan versi yang lebih baru, opsi CONCURENTLY memungkinkan penguncian tingkat baris, secara signifikan meningkatkan ketersediaan tabel. Berikut ini adalah perintahnya:
REINDEX INDEX ix_name CONCURRENTLY;Sementara CONCURENTLY kurang mengganggu, itu bisa lebih lambat di meja sibuk. Pertimbangkan untuk membangun indeks selama periode lalu lintas rendah jika memungkinkan. Untuk informasi selengkapnya, lihat REINDEX
dalam dokumentasi PostgreSQL. -
Menggunakan opsi INDEX_CLEANUP FALSE — Jika indeks besar dan diperkirakan membutuhkan waktu yang signifikan untuk menyelesaikannya, Anda dapat membuka blokir autopacuum dengan menjalankan VACUUM FREEZE manual sambil mengecualikan indeks. Fungsi ini tersedia di PostgreSQL versi 12 dan versi yang lebih baru.
Melewati indeks akan memungkinkan Anda untuk melewatkan proses vakum dari indeks yang tidak konsisten dan mengurangi masalah pembungkus. Namun, ini tidak akan menyelesaikan masalah halaman tidak valid yang mendasarinya. Untuk sepenuhnya mengatasi dan menyelesaikan masalah halaman yang tidak valid, Anda masih perlu membangun kembali indeks.
Tingkat transaksi yang sangat tinggi
Di PostgreSQL, tingkat transaksi yang tinggi dapat secara signifikan mempengaruhi kinerja autopacuum, yang menyebabkan pembersihan tupel mati yang lebih lambat dan peningkatan risiko pembungkus ID transaksi. Anda dapat memantau tingkat transaksi dengan mengukur perbedaan max(age(datfrozenxid)) antara dua periode waktu, biasanya per detik. Selain itu, Anda dapat menggunakan metrik penghitung database berikut, yang diekspos melalui Performance Insights API, untuk mengukur tingkat transaksi (jumlah xact_commit dan xact_rollback) yang merupakan jumlah total transaksi.
| Penghitung | Jenis | Unit | Metrik |
|---|---|---|---|
|
xact_commit |
Transaksi |
Commit per detik |
db. Transactions.xact_komit |
|
xact_rollback |
Transaksi |
Pemulihan per detik |
db. Transactions.xact_kembalikan |
Peningkatan yang cepat menunjukkan beban transaksi yang tinggi, yang dapat membanjiri autocacuum, menyebabkan kembung, perselisihan kunci, dan potensi masalah kinerja. Ini dapat berdampak negatif pada proses autopacuum dalam beberapa cara:
-
Aktivitas Tabel: Tabel tertentu yang sedang disedot bisa mengalami volume transaksi yang tinggi, menyebabkan penundaan.
-
Sumber Daya Sistem Keseluruhan sistem mungkin kelebihan beban, sehingga sulit bagi autopacuum untuk mengakses sumber daya yang diperlukan agar berfungsi secara efisien.
Pertimbangkan strategi berikut untuk memungkinkan autopacuum beroperasi lebih efektif dan mengikuti tugasnya:
-
Kurangi tingkat transaksi jika memungkinkan. Pertimbangkan untuk melakukan batch atau mengelompokkan transaksi serupa jika memungkinkan.
-
Targetkan tabel yang sering diperbarui dengan
VACUUM FREEZEoperasi manual setiap malam, mingguan, atau dua mingguan selama jam di luar jam sibuk. -
Pertimbangkan untuk meningkatkan kelas instance Anda untuk mengalokasikan lebih banyak sumber daya sistem untuk menangani volume transaksi tinggi dan autopacuum.