Langsung ke konten

Arsip

MVCC

3 artikel
Basis Data 16 Sep 2026 5 min read

Truncasi Tail PostgreSQL VACUUM Memerlukan Lock Eksklusif

VACUUM biasa pada PostgreSQL umumnya membiarkan ruang heap yang telah direklamasi tetap berada di dalam relation agar dapat digunakan kembali. Fase tail truncation yang terpisah dapat memperpendek file relation ketika terdapat rangkaian halaman kosong yang berurutan pada ujung fisiknya. Fase tersebut memerlukan lock ACCESS EXCLUSIVE. Batas lock ini membuat tail truncation berbeda secara material dari pembersihan vacuum biasa. Pemeliharaan heap dan index rutin dirancang agar dapat berjalan berdampingan dengan operasi baca dan tulis normal, sedangkan memperpendek relation secara fisik memerlukan periode singkat ketika akses tabel secara bersamaan tidak dapat berlangsung.

Basis Data 16 Sep 2026 5 min read

PostgreSQL HOT Update Menghindari Entri Index Baru

UPDATE PostgreSQL dapat membuat versi row fisik baru tanpa membuat entry baru yang bersesuaian pada index tuple-addressing biasa. Optimasi heap-only tuple ini, yang umum disebut HOT, berlaku ketika tuple pengganti tetap berada pada heap page yang sama dan update tidak mengubah value yang membuat HOT tidak memenuhi syarat bagi index tabel. Perbedaan ini penting karena PostgreSQL menerapkan MVCC update dengan mempertahankan versi row, bukan menimpa tuple secara in-place. Tanpa HOT, sebuah update dapat menambah pekerjaan pada heap dan setiap index meskipun value indexed key tetap sama.

Basis Data 15 Sep 2026 5 min read

PostgreSQL Visibility Map Melacak Status Heap Page

PostgreSQL menyimpan metadata visibility tuple di row heap, tetapi memeriksa setiap tuple heap tidak diperlukan ketika seluruh page sudah diketahui memenuhi kondisi yang lebih kuat. Visibility map menyimpan status tingkat page tersebut dalam relation fork yang ringkas. Setiap heap page memiliki dua bit yang bersesuaian. Bit all-visible mencatat bahwa setiap tuple pada page terlihat oleh setiap transaksi saat ini dan mendatang. Bit all-frozen mencatat bahwa setiap tuple pada page telah dibekukan. Fakta tersebut memungkinkan PostgreSQL menghindari pekerjaan dalam index-only scan dan operasi vacuum tanpa memindahkan data visibility MVCC ke dalam index.