Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan SQL autovacuum Postgre di Amazon untuk Postgre RDS SQL
Kami sangat menyarankan Anda menggunakan fitur autovacuum untuk menjaga kesehatan instans SQL Postgre DB Anda. Autovacuum mengotomatiskan awal dan perintah. VACUUM ANALYZE Kemudian memeriksa tabel yang memuat banyak tuple yang dimasukkan, diperbarui, atau dihapus. Setelah pemeriksaan ini, ia mengklaim kembali penyimpanan dengan menghapus data usang atau tupel dari database Postgre. SQL
Secara default, autovacuum diaktifkan RDS untuk Amazon untuk instans SQL DB Postgre yang Anda buat menggunakan salah satu grup parameter Postgre DB default. SQL Grup parameter ini termasuk default.postgres10
, default.postgres11
, dan sebagainya. Semua grup parameter Postgre SQL DB default memiliki rds.adaptive_autovacuum
parameter yang disetel ke1
, sehingga mengaktifkan fitur tersebut. Parameter konfigurasi lain yang terkait dengan fitur autovacuum juga diatur secara default. Karena parameter default ini cukup umum, Anda dapat memanfaatkannya dengan menyetel beberapa parameter yang terkait dengan fitur autovacuum untuk beban kerja spesifik Anda.
Setelah itu, Anda dapat menemukan informasi lebih lanjut tentang autovacuum dan cara menyetel beberapa parameternya pada instans SQL Postgre DB AndaRDS. Untuk informasi tingkat tinggi, lihat Praktik terbaik untuk bekerja dengan Postgre SQL.
Topik
- Mengalokasikan memori untuk autovacuum
- Mengurangi kemungkinan penyelesaian ID transaksi
- Menentukan apakah tabel di basis data Anda perlu divakum atau tidak
- Menentukan tabel mana yang saat ini memenuhi syarat untuk autovacuum
- Menentukan apakah autovacuum saat ini sedang berjalan atau tidak, dan berapa lama durasinya
- Melakukan pembekuan vakum manual
- Mengindeks ulang tabel saat autovacuum berjalan
- Mengelola autovacuum dengan indeks berukuran besar
- Parameter lain yang memengaruhi autovacuum
- Mengatur parameter autovacuum tingkat tabel
- Melakukan log aktivitas autovacuum dan vakum
- Memahami perilaku autovacuum dengan database yang tidak valid
Mengalokasikan memori untuk autovacuum
Salah satu parameter paling penting yang memengaruhi kinerja autovacuum adalah parameter autovacuum_work_mem
autovacuum_work_mem
parameter diatur ke -1, menunjukkan bahwa pengaturan maintenance_work_mem
digunakan sebagai gantinya. Untuk semua versi lainnya, autovacuum_work_mem
ditentukan oleh GREATEST ({DBInstanceClassMemory/32768}, 65536).
Operasi vakum manual selalu menggunakan maintenance_work_mem
pengaturan, dengan pengaturan default GREATEST ({DBInstanceClassMemory/63963136 *1024}, 65536), dan juga dapat disesuaikan pada tingkat sesi menggunakan perintah untuk operasi manual yang lebih bertarget. SET
VACUUM
Memori autovacuum_work_mem
menentukan untuk autovacuum untuk menampung pengidentifikasi tupel mati () untuk indeks penyedot debu. pg_stat_all_tables.n_dead_tup
Saat melakukan perhitungan untuk menentukan nilai autovacuum_work_mem
parameter, perhatikan hal-hal berikut:
-
Jika Anda mengatur parameter terlalu rendah, proses vakum mungkin harus memindai tabel beberapa kali untuk menyelesaikan pekerjaannya. Pemindaian berulang seperti ini dapat berdampak negatif pada performa. Untuk contoh yang lebih besar, pengaturan
maintenance_work_mem
atauautovacuum_work_mem
setidaknya 1 GB dapat meningkatkan kinerja tabel penyedot debu dengan jumlah tupel mati yang tinggi. Namun, dalam Postgre SQL versi 16 dan sebelumnya, penggunaan memori vakum dibatasi pada 1 GB, yang cukup untuk memproses sekitar 179 juta tupel mati dalam satu lintasan. Jika tabel memiliki lebih banyak tupel mati daripada ini, vakum perlu membuat beberapa lintasan melalui indeks tabel, secara signifikan meningkatkan waktu yang dibutuhkan.Pengenal Tuple berukuran 6 byte. Untuk memperkirakan memori yang diperlukan untuk menyedot indeks tabel, kueri
pg_stat_all_tables.n_dead_tup
untuk menemukan jumlah tupel mati, lalu kalikan angka ini dengan 6 untuk menentukan memori yang diperlukan untuk menyedot debu indeks dalam satu lintasan. Anda dapat menggunakan kueri berikut:SELECT relname AS table_name, n_dead_tup, pg_size_pretty(n_dead_tup * 6) AS estimated_memory FROM pg_stat_all_tables WHERE relname = '
name_of_the_table
'; -
Parameter
autovacuum_work_mem
bekerja secara bersama-sama dengan parameterautovacuum_max_workers
. Setiap pekerja di antaraautovacuum_max_workers
dapat menggunakan memori yang Anda alokasikan. Jika Anda memiliki banyak tabel kecil, alokasikan lebih banyak parameterautovacuum_max_workers
dan lebih sedikit parameterautovacuum_work_mem
. Jika Anda memiliki tabel besar (lebih besar dari 100 GB), alokasikan lebih banyak memori dan lebih sedikit proses pekerja. Anda harus memiliki cukup memori yang dialokasikan agar berhasil di tabel terbesar Anda. Jadi, pastikan bahwa kombinasi proses pekerja dan memori sama dengan total memori yang ingin Anda alokasikan.
Mengurangi kemungkinan penyelesaian ID transaksi
Dalam beberapa kasus, pengaturan kelompok parameter yang terkait dengan autovacuum mungkin tidak cukup agresif untuk mencegah penyelesaian ID transaksi. Untuk mengatasi hal ini, RDS untuk Postgre SQL menyediakan mekanisme yang menyesuaikan nilai parameter autovacuum secara otomatis. Penyetelan parameter autovacuum adaptif adalah fitur untuk Postgre. RDS SQL Penjelasan rinci tentang sampul TransactionID ditemukan dalam dokumentasi Postgre
Penyetelan parameter autovacuum adaptif diaktifkan secara default RDS untuk SQL instance Postgre dengan parameter dinamis disetel ke ON. rds.adaptive_autovacuum
Kami sangat menyarankan Anda untuk tetap mengaktifkan parameter dinamis ini. Namun, untuk mematikan penyetelan parameter autovacuum adaptif, atur parameter ke rds.adaptive_autovacuum
0 atau. OFF
Pembungkus ID transaksi masih dimungkinkan bahkan ketika Amazon RDS menyetel parameter autovacuum. Kami mendorong Anda untuk menerapkan CloudWatch alarm Amazon untuk sampul ID transaksi. Untuk informasi lebih lanjut, lihat posting Menerapkan sistem peringatan dini untuk ID transaksi yang mencakup Postgre SQL di RDS
Dengan penyetelan parameter autovacuum adaptif diaktifkan, Amazon RDS mulai menyesuaikan parameter autovacuum ketika CloudWatch metrik MaximumUsedTransactionIDs
mencapai nilai parameter atau 500.000.000, mana yang lebih besar. autovacuum_freeze_max_age
Amazon RDS terus menyesuaikan parameter untuk autovacuum jika tabel terus tren menuju sampul ID transaksi. Setiap penyesuaian ini secara khusus mengalokasikan lebih banyak sumber daya ke autovacuum untuk menghindari penyelesaian. Amazon RDS memperbarui parameter terkait autovacuum berikut:
RDSmemodifikasi parameter ini hanya jika nilai baru membuat autovacuum lebih agresif. Parameter dimodifikasi dalam memori di instans DB. Nilai di grup parameter tidak diubah. Untuk melihat pengaturan dalam memori saat ini, gunakan perintah Postgre SQL SHOW
Saat Amazon RDS memodifikasi salah satu parameter autovacuum ini, Amazon menghasilkan peristiwa untuk instans DB yang terpengaruh. Acara ini terlihat di AWS Management Console dan melalui Amazon RDSAPI. Setelah MaximumUsedTransactionIDs
CloudWatch metrik kembali di bawah ambang batas, Amazon RDS mengatur ulang parameter terkait autovacuum dalam memori kembali ke nilai yang ditentukan dalam grup parameter. Kemudian, Amazon RDS akan menghasilkan peristiwa lain yang sesuai dengan perubahan ini.