Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menentukan apakah tabel di basis data Anda perlu divakum atau tidak
Anda dapat menggunakan kueri berikut untuk menunjukkan jumlah transaksi yang tidak divakum di dalam basis data. datfrozenxid
Kolom pg_database
baris database adalah batas bawah pada transaksi normal yang IDs muncul di database itu. Kolom ini adalah minimum dari nilai per tabel relfrozenxid
di dalam basis data.
SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age(datfrozenxid) desc limit 20;
Sebagai contoh, hasil dari menjalankan kueri sebelumnya adalah sebagai berikut.
datname | age mydb | 1771757888 template0 | 1721757888 template1 | 1721757888 rdsadmin | 1694008527 postgres | 1693881061 (5 rows)
Ketika usia database mencapai 2 miliar transaksiIDs, transaksi ID (XID) wraparound terjadi dan database menjadi read-only. Anda dapat menggunakan kueri ini untuk menghasilkan metrik dan menjalankannya beberapa kali dalam sehari. Secara default, autovacuum diatur untuk menjaga usia transaksi tidak lebih dari 200.000.000 (autovacuum_freeze_max_age
Contoh strategi pemantauan mungkin terlihat seperti ini:
-
Tetapkan nilai
autovacuum_freeze_max_age
hingga 200 juta transaksi. -
Jika tabel mencapai 500 juta transaksi yang tidak divakum, ini akan memicu alarm tingkat rendah. Tidak ada yang dengan nilai ini, tetapi dapat mengindikasikan bahwa autovacuum tidak dapat diteruskan.
-
Jika tabel berumur 1 miliar, indikasi ini harus diperlakukan sebagai peringatan untuk diambil tindakan. Umumnya, Anda ingin mempertahankan usia tabel mendekati
autovacuum_freeze_max_age
karena alasan performa. Sebaiknya Anda menyelidiki hal ini menggunakan rekomendasi berikut. -
Jika tabel mencapai 1,5 miliar transaksi yang tidak divakum, ini akan memicu alarm dengan keparahan tingkat tinggi. Bergantung pada seberapa cepat database Anda menggunakan transaksiIDs, alarm ini dapat menunjukkan bahwa sistem kehabisan waktu untuk menjalankan autovacuum. Dalam hal ini, sebaiknya Anda segera menyelesaikan proses ini.
Jika tabel terus-menerus melanggar ambang batas ini, ubah parameter autovacuum Anda. Secara default, menggunakan VACUUM secara manual (yang memiliki penundaan berbasis biaya dinonaktifkan) lebih agresif daripada menggunakan autovacuum default, tetapi juga lebih mengganggu sistem secara keseluruhan.
Sebaiknya lakukan hal berikut:
-
Waspada dan aktifkan mekanisme pemantauan agar Anda dapat mengetahui usia transaksi Anda yang paling lama.
Untuk informasi tentang membuat proses yang memperingatkan Anda tentang sampul ID transaksi, lihat posting Blog AWS Database Menerapkan sistem peringatan dini untuk sampul ID transaksi di Amazon RDS untuk
Postgre. SQL -
Untuk tabel yang lebih sibuk, lakukan pembekuan vakum manual secara teratur selama pemeliharaan, selain mengandalkan autovacuum. Untuk informasi cara melakukan pembekuan vakum manual, lihat Melakukan pembekuan vakum manual.