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
Postgre SQL Multiversion Concurrency Control (MVCC) membantu menjaga integritas data dengan menyimpan salinan internal baris yang diperbarui atau dihapus sampai transaksi dilakukan atau dibatalkan. Salinan ini, juga disebut tupel, dapat menyebabkan kembung meja jika tidak dibersihkan secara teratur. Postgre SQL memesan transaksi berdasarkan transaksinyaIDs, dan Postgre SQL menggunakan ID transaksi berbasis MVCC untuk mengontrol visibilitas Tuple dan memberikan 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 fungsiVACUUM
danANALYZE
fungsi. Untuk informasi lebih lanjut tentang caraANALYZE
kerja di Aurora Postgre SQL Limitless Database, lihat. ANALYZE
Seperti halnyaMVCC, menyedot debu di Aurora Postgre berbasis ID transaksi. SQL 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 Postgre SQL Limitless Database, lihat. VACUUM
Topik
AUTOVACUUM
Aurora Postgre SQL menggunakan VACUUM
dan AUTOVACUUM
utilitas untuk menghapus tupel yang tidak dibutuhkan. Mekanisme yang mendasari AUTOVACUUM
dan manual VACUUM
adalah sama; satu-satunya perbedaan adalah otomatisasi.
AUTOVACUUM
di Aurora Postgre SQL dan Aurora SQL Postgre Limitless Database adalah kombinasi dari dan utilitas. VACUUM
ANALYZE
AUTOVACUUM
menentukan 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 Postgre SQL Limitless Database seperti untuk Aurora Postgre. SQL
AUTOVACUUM
Daemon, jika diaktifkan, secara otomatis mengeluarkan ANALYZE
perintah setiap kali konten tabel telah berubah secara memadai. Di Aurora Postgre SQL Limitless Database, AUTOVACUUM
masalah ANALYZE
pada router dan pecahan.
Untuk informasi selengkapnya tentang parameter penyimpanan AUTOVACUUM
daemon dan tabel yang terkaitAUTOVACUUM
, lihat Daemon Autovacuum dan Parameter penyimpanan dalam dokumentasi Postgre
Penyedot debu berbasis waktu di Aurora Postgre Limitless Database SQL
Aurora Postgre SQL 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 Postgre SQL Limitless Database menggunakan visibilitas berbasis waktu, karena transaksi IDs 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 Postgre SQL Limitless Database harus memastikan bahwa penyedot debu tidak menghapus tupel apa pun yang masih terlihat oleh transaksi aktif apa pun di grup pecahan DB. Oleh karena itu, menyedot debu di Aurora SQL Postgre 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.
Penyedot debu berbasis waktu 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
AUTOVACUUM
atau manualVACUUM
mencoba 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 karenaMVCC.
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 Postgre SQL 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, silakan lihat Tampilan Database Aurora Postgre SQL Limitless dan Fungsi Basis Data Tanpa Batas Aurora Postgre SQL.
Perbedaan perilaku menyedot debu antara Aurora Postgre dan Aurora SQL Postgre Limitless Database SQL
Beberapa perbedaan lain antara Aurora Postgre SQL dan Aurora SQL Postgre Limitless Database dalam cara kerja penyedot debu adalah sebagai berikut:
-
Aurora Postgre SQL melakukan
VACUUM
operasi pada transaksi IDs hingga transaksi tertua yang sedang berlangsung. Jika tidak ada transaksi yang sedang berlangsung dalam databaseVACUUM
, lakukan operasi hingga transaksi terakhir. -
Aurora Postgre SQL Limitless Database menyinkronkan snapshot waktu tertua setiap 10 detik. Oleh karena itu,
VACUUM
mungkin tidak melakukan operasi pada setiap transaksi yang dijalankan dalam 10 detik terakhir.
Untuk informasi tentang dukungan VACUUM
di Aurora Postgre SQL Limitless Database, lihat di. VACUUM Referensi Basis Data Tanpa Batas Aurora Postgre SQL