Menyedot debu dan menganalisis tabel secara otomatis - AWS Bimbingan Preskriptif

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyedot debu dan menganalisis tabel secara otomatis

Autovacuum adalah daemon (yaitu, berjalan di latar belakang) yang secara otomatis menyedot debu (membersihkan) tupel mati, merebut kembali penyimpanan, dan mengumpulkan statistik. Ini memeriksa tabel kembung dalam database dan membersihkan kembung untuk menggunakan kembali ruang. Ini memonitor tabel database dan indeks dan menambahkannya ke pekerjaan vakum setelah mereka mencapai ambang tertentu dari operasi pembaruan atau penghapusan.

Autovacuum mengelola penyedot debu dengan mengotomatiskan PostgreSQL dan perintah. VACUUM ANALYZE VACUUMmenghapus bloat dari tabel dan merebut kembali ruang, sementara ANALYZE memperbarui statistik yang memungkinkan pengoptimal untuk menghasilkan rencana yang efisien. VACUUMjuga melakukan tugas utama yang disebut pembekuan vakum untuk mencegah masalah sampul ID transaksi dalam database. Setiap baris yang diperbarui dalam database menerima ID transaksi dari mekanisme kontrol transaksi PostgreSQL. ID ini mengontrol visibilitas baris ke transaksi bersamaan lainnya. ID transaksi adalah nomor 32-bit. Dua miliar ID selalu disimpan di masa lalu yang terlihat. Sisa (sekitar 2,2 miliar) ID disimpan untuk transaksi yang akan terjadi di masa depan dan disembunyikan dari transaksi saat ini. PostgreSQL membutuhkan pembersihan sesekali dan pembekuan baris lama untuk mencegah transaksi membungkus dan membuat baris lama yang ada tidak terlihat saat transaksi baru dibuat. Untuk informasi selengkapnya, lihat Mencegah Kegagalan Pembungkus ID Transaksi dalam dokumentasi PostgreSQL.

Autovacuum direkomendasikan dan diaktifkan secara default. Parameternya meliputi yang berikut ini.

Parameter

Deskripsi

Standar untuk Amazon RDS

Standar untuk Aurora

autovacuum_vacuum_threshold

Jumlah minimum operasi pembaruan atau penghapusan Tuple yang harus terjadi di atas meja sebelum autovacuum menyedotnya.

50 operasi

50 operasi

autovacuum_analyze_threshold

Jumlah minimum sisipan tupel, pembaruan, atau penghapusan yang harus terjadi pada tabel sebelum autovacuum menganalisisnya.

50 operasi

50 operasi

autovacuum_vacuum_scale_factor

Persentase tupel yang harus dimodifikasi dalam tabel sebelum autovacuum menyedotnya.

0,2%

0,1%

autovacuum_analyze_scale_factor

Persentase tupel yang harus dimodifikasi dalam tabel sebelum autovacuum menganalisisnya.

0,05%

0,05%

autovacuum_freeze_max_age

Usia maksimum ID beku sebelum tabel disedot untuk mencegah masalah sampul ID transaksi.

200.000.000 transaksi

200.000.000 transaksi

Autovacuum membuat daftar tabel untuk diproses berdasarkan rumus ambang tertentu, sebagai berikut.

  • Ambang batas untuk berlari VACUUM di atas meja:

    vacuum threshold = autovacuum_vacuum_threshold + (autovacuum_vacuum_scale_factor * Total row count of table)
  • Ambang batas untuk berlari ANALYZE di atas meja:

    analyze threshold = autovacuum_analyze_threshold + (autovacuum_analyze_scale_factor * Total row count of table)

Untuk tabel berukuran kecil hingga menengah, nilai default mungkin cukup. Namun, tabel besar yang sering mengalami modifikasi data akan memiliki jumlah tupel mati yang lebih tinggi. Dalam hal ini, autovacuum mungkin sering memproses tabel untuk pemeliharaan, dan pemeliharaan tabel lain mungkin tertunda atau diabaikan sampai tabel besar selesai. Untuk menghindari hal ini, Anda dapat menyetel parameter autovacuum yang dijelaskan di bagian berikut.

Parameter terkait memori autovacuum

autovacuum_max_workers

Menentukan jumlah maksimum proses autovacuum (selain peluncur autovacuum) yang dapat berjalan pada saat yang sama. Parameter ini dapat diatur hanya ketika Anda memulai server. Jika proses autovacuum sibuk dengan tabel besar, parameter ini membantu menjalankan pembersihan untuk tabel lain.

maintenance_work_mem

Menentukan jumlah maksimum memori yang akan digunakan oleh operasi pemeliharaan sepertiVACUUM,CREATE INDEX, danALTER. Di Amazon RDS dan Aurora, memori dialokasikan berdasarkan kelas instance dengan menggunakan rumus. GREATEST({DBInstanceClassMemory/63963136*1024},65536) Ketika autovacuum berjalan, hingga autovacuum_max_workers waktu nilai yang dihitung dapat dialokasikan, jadi berhati-hatilah untuk tidak menetapkan nilai terlalu tinggi. Untuk mengontrol ini, Anda dapat mengatur autovacuum_work_mem secara terpisah.

autovacuum_work_mem

Menentukan jumlah maksimum memori yang akan digunakan oleh setiap proses pekerja autovacuum. Parameter ini default ke -1, yang menunjukkan bahwa Anda harus menggunakan nilai sebagai gantinya. maintenance_work_mem

Untuk informasi selengkapnya tentang parameter memori autovacuum, lihat Mengalokasikan memori untuk autovacuum dalam dokumentasi Amazon RDS.

Menyetel parameter autovacuum

Pengguna mungkin perlu menyetel parameter autovacuum tergantung pada operasi pembaruan dan penghapusan mereka. Pengaturan untuk parameter berikut dapat diatur pada tabel, contoh, atau tingkat cluster.

Tingkat cluster atau instance

Sebagai contoh, mari kita lihat database perbankan di mana operasi bahasa manipulasi data berkelanjutan (DHTML) diharapkan. Untuk menjaga kesehatan database, Anda harus menyetel parameter autovacuum pada tingkat cluster untuk Aurora dan pada tingkat instans untuk Amazon RDS, dan menerapkan grup parameter yang sama ke pembaca juga. Dalam kasus failover, parameter yang sama harus berlaku untuk penulis baru.

Tingkat meja

Misalnya, dalam database untuk pengiriman makanan di mana operasi DHTML berkelanjutan diharapkan pada satu tabel yang disebutorders, Anda harus mempertimbangkan untuk menyetel autovacuum_analyze_threshold parameter pada tingkat tabel dengan menggunakan perintah berikut:

ALTER TABLE <table_name> SET (autovacuum_analyze_threshold = <threshold rows>)

Menggunakan pengaturan autovacuum agresif di tingkat tabel

ordersTabel contoh yang memiliki operasi pembaruan dan penghapusan berkelanjutan menjadi kandidat untuk menyedot debu karena pengaturan autovacuum default. Ini mengarah pada pembuatan rencana yang buruk dan kueri yang lambat. Membersihkan kembung dan memperbarui statistik membutuhkan pengaturan autovaccum agresif tingkat tabel.

Untuk menentukan pengaturan, melacak durasi kueri yang berjalan pada tabel ini dan mengidentifikasi persentase operasi DML yang menghasilkan perubahan rencana. pg_stat_all_tableTampilan membantu Anda melacak operasi penyisipan, pembaruan, dan penghapusan.

Mari kita asumsikan bahwa pengoptimal menghasilkan rencana buruk setiap kali 5 persen orders tabel berubah. Dalam hal ini, Anda harus mengubah ambang batas menjadi 5 persen sebagai berikut:

ALTER TABLE orders SET (autovacuum_analyze_threshold = 0.05 and autovacuum_vacuum_threshold = 0.05)
Tip

Pilih pengaturan autovacuum agresif dengan hati-hati untuk menghindari konsumsi sumber daya yang tinggi.

Untuk informasi selengkapnya, lihat berikut ini:

Untuk memastikan bahwa autovacuum bekerja secara efektif, pantau baris mati, penggunaan disk, dan terakhir kali autovacuum atau ANALYZE dijalankan secara teratur. pg_stat_all_tablesTampilan memberikan informasi pada setiap tabel (relname) dan berapa banyak tupel mati (n_dead_tup) yang ada di tabel.

Memantau jumlah tupel mati di setiap tabel, terutama di tabel yang sering diperbarui, membantu Anda menentukan apakah proses autovacuum secara berkala menghapus tupel mati sehingga ruang disk mereka dapat digunakan kembali untuk kinerja yang lebih baik. Anda dapat menggunakan kueri berikut untuk memeriksa jumlah tupel mati dan kapan autovacuum terakhir berjalan pada tabel:

SELECT relname AS TableName,n_live_tup AS LiveTuples,n_dead_tup AS DeadTuples, last_autovacuum AS Autovacuum,last_autoanalyze AS AutoanalyzeFROM pg_all_user_tables;

Keuntungan dan keterbatasan

Autovacuum memberikan keuntungan sebagai berikut:

  • Ini menghilangkan kembung dari tabel secara otomatis.

  • Ini mencegah pembungkus ID transaksi.

  • Itu membuat statistik database up to date.

Pembatasan:

  • Jika kueri menggunakan pemrosesan paralel, jumlah proses pekerja mungkin tidak cukup untuk autovacuum.

  • Jika autovacuum berjalan selama jam sibuk, pemanfaatan sumber daya mungkin meningkat. Anda harus menyetel parameter untuk menangani masalah ini.

  • Jika halaman tabel ditempati di sesi lain, autovacuum mungkin melewatkan halaman tersebut.

  • Autovacuum tidak dapat mengakses tabel sementara.