

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
<a name="limitless-vacuum"></a>

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 fungsi `VACUUM` dan `ANALYZE` fungsi. Untuk informasi lebih lanjut tentang cara `ANALYZE` kerja di Aurora PostgreSQL Limitless Database, lihat. [MENGANALISA](limitless-reference.DML-limitations.md#limitless-reference.DML-limitations.ANALYZE)

 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 [VACUUM](https://www.postgresql.org/docs/current/sql-vacuum.html) dalam dokumentasi PostgreSQL. Untuk informasi selengkapnya tentang `VACUUM` dukungan di Aurora PostgreSQL Limitless Database, lihat. [VAKUM](limitless-reference.DML-limitations.md#limitless-reference.DML-limitations.VACUUM)

**Topics**
+ [AUTOVACUUM](#limitless-autovacuum)
+ [Time-based menyedot debu di Aurora PostgreSQL Limitless Database](#limitless-vacuum.time-based)
+ [Menggunakan statistik database untuk menyedot debu](#limitless-vacuum.stats)
+ [Perbedaan perilaku menyedot debu antara Aurora PostgreSQL dan Aurora PostgreSQL Limitless Database](#limitless-vacuum-limitations)

## AUTOVACUUM
<a name="limitless-autovacuum"></a>

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.

`AUTOVACUUM`di Aurora PostgreSQL dan Aurora PostgreSQL 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 PostgreSQL Limitless Database seperti untuk Aurora PostgreSQL.

`AUTOVACUUM`Daemon, 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 terkait`AUTOVACUUM`, lihat Daemon [Autovacuum dan Parameter Storage dalam dokumentasi PostgreSQL](https://www.postgresql.org/docs/current/routine-vacuuming.html#AUTOVACUUM ).](https://www.postgresql.org/docs/current/runtime-config-autovacuum.html)

## Time-based menyedot debu di Aurora PostgreSQL Limitless Database
<a name="limitless-vacuum.time-based"></a>

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.

1. Tabel pelanggan didistribusikan di empat pecahan.

1. 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.

1. Transaksi 2 dimulai kemudian, dan menghapus semua tupel dari tabel, lalu melakukan.

1. Jika `AUTOVACUUM` atau manual `VACUUM` 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 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
<a name="limitless-vacuum.stats"></a>

[Untuk mendapatkan informasi tentang tupel yang mungkin perlu Anda bersihkan, gunakan tampilan [limitless\_stat\_all\_tables, yang bekerja mirip dengan pg\_stat\_all\_tables](limitless-monitoring-views.md#limitless_stat_all_tables).](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ALL-TABLES-VIEW) Contoh berikut menanyakan tampilan.

```
SELECT * FROM rds_aurora.limitless_stat_all_tables WHERE relname LIKE '%customer%';
```

[[Demikian pula, untuk statistik database gunakan [limitless\_stat\_database alih-alih pg\_stat\_database, dan limitless\_stat\_activity](limitless-monitoring-views.md#limitless_stat_database) alih-alih [pg\_stat\_activity](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW).](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW)](limitless-monitoring-views.md#limitless_stat_activity)

[Untuk memeriksa penggunaan disk tabel, gunakan fungsi [limitless\_stat\_relation\_sizes, yang bekerja mirip dengan pg\_relation\_size](limitless-monitoring-functions.md#limitless_stat_relation_sizes).](https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT) Contoh berikut query fungsi.

```
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.](https://www.postgresql.org/docs/15/progress-reporting.html#VACUUM-PROGRESS-REPORTING)](limitless-monitoring-views.md#limitless_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](limitless-monitoring-views.md) dan [Fungsi Basis Data Tanpa Batas Aurora PostgreSQL](limitless-monitoring-functions.md).

## Perbedaan perilaku menyedot debu antara Aurora PostgreSQL dan Aurora PostgreSQL Limitless Database
<a name="limitless-vacuum-limitations"></a>

Beberapa perbedaan lain antara Aurora PostgreSQL dan Aurora PostgreSQL Limitless Database dalam cara kerja penyedot debu adalah sebagai berikut:
+ Aurora PostgreSQL melakukan `VACUUM` operasi pada ID transaksi hingga transaksi tertua yang sedang berlangsung. Jika tidak ada transaksi yang sedang berlangsung dalam database`VACUUM`, lakukan operasi hingga transaksi terakhir.
+ Aurora PostgreSQL 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 PostgreSQL Limitless Database, lihat di. [VAKUM](limitless-reference.DML-limitations.md#limitless-reference.DML-limitations.VACUUM) [Referensi Basis Data Tanpa Batas Aurora PostgreSQLReferensi Database Tanpa Batas](limitless-reference.md)