Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Merebut kembali ruang penyimpanan dengan menyedot debu
PostgreSQL Multiversion Concurrency Control (MVCC) membantu menjaga integritas data dengan menyimpan salinan internal baris yang diperbarui atau dihapus hingga transaksi dilakukan atau dibatalkan. Salinan ini, juga disebut tupel, dapat menyebabkan kembung meja jika tidak dibersihkan secara teratur. PostgreSQL melakukan pemesanan transaksi berdasarkan ID transaksinya, dan PostgreSQL menggunakan MVCC berbasis ID transaksi untuk mengontrol visibilitas Tuple dan menyediakan isolasi transaksi. Setiap transaksi menetapkan snapshot data, dan setiap tuple memiliki versi. Baik snapshot maupun versi berbasis ID transaksi.
Untuk membersihkan data, VACUUM utilitas melakukan empat fungsi utama di PostgreSQL:
-
VACUUM— Menghapus versi baris kedaluwarsa, membuat ruang tersedia untuk digunakan kembali. -
VACUUM FULL— Menyediakan defragmentasi lengkap dengan menghapus versi baris mati dan memadatkan tabel, mengurangi ukuran dan meningkatkan efisiensi. -
VACUUM FREEZE— Melindungi dari masalah sampul ID transaksi dengan menandai versi baris yang lebih lama sebagai beku. -
VACUUM ANALYZE— Menghapus versi baris mati dan memperbarui statistik perencanaan kueri database. Ini adalah kombinasi dari fungsiVACUUMdanANALYZEfungsi. Untuk informasi lebih lanjut tentang caraANALYZEkerja di Aurora PostgreSQL Limitless Database, lihat. MENGANALISA
Seperti halnya MVCC, menyedot debu di Aurora PostgreSQL berbasis ID transaksi. Jika ada transaksi yang sedang berlangsung saat penyedot debu dimulai, baris yang masih terlihat oleh transaksi tersebut tidak akan dihapus.
Untuk informasi lebih lanjut tentang VACUUM utilitas, lihat VACUUMVACUUM dukungan di Aurora PostgreSQL Limitless Database, lihat. VAKUM
Topik
AUTOVACUUM
Aurora PostgreSQL menggunakan dan utilitas untuk menghapus tupel yang tidak dibutuhkan. VACUUM AUTOVACUUM Mekanisme yang mendasari AUTOVACUUM dan manual VACUUM adalah sama; satu-satunya perbedaan adalah otomatisasi.
AUTOVACUUMdi Aurora PostgreSQL dan Aurora PostgreSQL Limitless Database adalah kombinasi dari dan utilitas. VACUUM ANALYZE AUTOVACUUMmenentukan database dan tabel mana yang harus dibersihkan, sesuai dengan aturan yang telah ditentukan, seperti persentase tupel mati dan jumlah sisipan.
Misalnya, AUTOVACUUM “bangun” secara berkala untuk melakukan pembersihan. Interval dikendalikan oleh autovacuum_naptime parameter. Nilai default adalah 1 menit. Nilai default untuk AUTOVACUUM dan parameter VACUUM konfigurasi sama untuk Aurora PostgreSQL Limitless Database seperti untuk Aurora PostgreSQL.
AUTOVACUUMDaemon, jika diaktifkan, secara otomatis mengeluarkan ANALYZE perintah setiap kali konten tabel telah berubah secara memadai. Di Aurora PostgreSQL Limitless Database, masalah pada router dan pecahan. AUTOVACUUM ANALYZE
Untuk informasi selengkapnya tentang parameter penyimpanan AUTOVACUUM daemon dan tabel yang terkaitAUTOVACUUM, lihat Daemon Autovacuum dan Parameter Storage dalam dokumentasi PostgreSQL
Time-based menyedot debu di Aurora PostgreSQL Limitless Database
Aurora PostgreSQL Limitless Database adalah sistem terdistribusi, yang berarti bahwa beberapa contoh dapat terlibat dalam transaksi. Oleh karena itu, visibilitas berbasis ID transaksi tidak berlaku. Sebaliknya, Aurora PostgreSQL Limitless Database menggunakan visibilitas berbasis waktu, karena ID transaksi tidak “disatukan” di seluruh instance, tetapi waktu dapat “disatukan” di seluruh instance. Setiap snapshot transaksi dan setiap versi Tuple mematuhi waktu, bukan ID transaksi. Untuk lebih spesifik, snapshot transaksi memiliki waktu mulai snapshot, dan Tuple memiliki waktu pembuatan (ketika INSERT atau UPDATE terjadi) dan waktu penghapusan (ketika terjadi). DELETE
Untuk menjaga konsistensi data di seluruh instance dalam grup pecahan DB, Aurora PostgreSQL Limitless Database harus memastikan bahwa penyedot debu tidak menghapus tupel apa pun yang masih terlihat oleh transaksi aktif apa pun dalam grup shard DB. Oleh karena itu, menyedot debu di Aurora PostgreSQL Limitless Database juga berbasis waktu. Aspek lain VACUUM tetap sama, termasuk bahwa untuk berjalan VACUUM pada tabel tertentu, pengguna harus memiliki akses ke tabel itu.
catatan
Kami sangat menyarankan agar Anda tidak membiarkan transaksi terbuka untuk jangka waktu yang lama.
Time-based menyedot debu mengkonsumsi lebih banyak memori daripada penyedot debu berbasis ID transaksi.
Contoh berikut menggambarkan cara kerja penyedot debu berbasis waktu.
-
Tabel pelanggan didistribusikan di empat pecahan.
-
Transaksi 1 dimulai dengan pembacaan berulang, dan menargetkan hanya satu pecahan (pecahan 1). Transaksi ini tetap terbuka.
Transaksi 1 lebih tua dari transaksi lain yang dimulai setelahnya.
-
Transaksi 2 dimulai kemudian, dan menghapus semua tupel dari tabel, lalu melakukan.
-
Jika
AUTOVACUUMatau manualVACUUMmencoba membersihkan tupel mati (mati karena transaksi 2), itu tidak menghapus apa pun.Hal ini berlaku tidak hanya untuk pecahan 1, tetapi juga untuk pecahan 2-4, karena transaksi 1 mungkin masih perlu mengakses tupel ini. Mereka masih terlihat untuk transaksi 1 karena MVCC.
Langkah terakhir dicapai melalui sinkronisasi, sehingga semua pecahan menyadari transaksi 1, meskipun transaksi 1 tidak menyentuh semuanya.
Menggunakan statistik database untuk menyedot debu
Untuk mendapatkan informasi tentang tupel yang mungkin perlu Anda bersihkan, gunakan tampilan limitless_stat_all_tables, yang bekerja mirip dengan pg_stat_all_tables.
SELECT * FROM rds_aurora.limitless_stat_all_tables WHERE relname LIKE '%customer%';
Untuk memeriksa penggunaan disk tabel, gunakan fungsi limitless_stat_relation_sizes, yang bekerja mirip dengan pg_relation_size.
SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public','customer');
Untuk melacak kemajuan VACUUM operasi pada Aurora PostgreSQL Limitless Database, gunakan tampilan limitless_stat_progress_vacuum alih-alih pg_stat_progress_vacuum. Contoh berikut menanyakan tampilan.
SELECT * FROM rds_aurora.limitless_stat_progress_vacuum;
Untuk informasi selengkapnya, lihat Tampilan Database Tanpa Batas Aurora PostgreSQL dan Fungsi Basis Data Tanpa Batas Aurora PostgreSQL.
Perbedaan perilaku menyedot debu antara Aurora PostgreSQL dan Aurora PostgreSQL Limitless Database
Beberapa perbedaan lain antara Aurora PostgreSQL dan Aurora PostgreSQL Limitless Database dalam cara kerja penyedot debu adalah sebagai berikut:
-
Aurora PostgreSQL melakukan
VACUUMoperasi pada ID transaksi hingga transaksi tertua yang sedang berlangsung. Jika tidak ada transaksi yang sedang berlangsung dalam databaseVACUUM, lakukan operasi hingga transaksi terakhir. -
Aurora PostgreSQL Limitless Database menyinkronkan snapshot waktu tertua setiap 10 detik. Oleh karena itu,
VACUUMmungkin tidak melakukan operasi pada setiap transaksi yang dijalankan dalam 10 detik terakhir.
Untuk informasi tentang dukungan VACUUM di Aurora PostgreSQL Limitless Database, lihat di. VAKUM Referensi Basis Data Tanpa Batas Aurora PostgreSQL