Menentukan apakah tabel di basis data Anda perlu divakum atau tidak - 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.

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. datfrozenxidKolom 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: