- PostgreSQL 18 dapat mengkloning database hampir seketika dengan menggabungkan strategi penyalinan file (FILE_COPY) dan fitur klon sistem file
- Dengan menggunakan nilai konfigurasi baru
file_copy_method = clone, PostgreSQL dapat memanfaatkan fitur kloning (FICLONE) pada sistem file modern seperti XFS, ZFS, dan APFS
- Hasil benchmark menunjukkan, saat mengkloning database 6GB, metode WAL_LOG memerlukan sekitar 67 detik, sedangkan metode klon hanya sekitar 0,2 detik
- Database hasil kloning awalnya berbagi blok fisik yang sama, tetapi akan terpisah melalui copy-on-write saat ada operasi tulis
- Namun, kloning hanya dapat dilakukan saat tidak ada koneksi aktif dan hanya bekerja di dalam satu sistem file yang sama
Struktur Kloning Berbasis Template di PostgreSQL
- Saat menjalankan perintah
CREATE DATABASE dbname, PostgreSQL secara internal mengkloning database template1 untuk membuat database baru
- Perilaku ini sama dengan
CREATE DATABASE dbname TEMPLATE template1
- Selain
template1, database lain juga bisa ditentukan, sehingga template buatan pengguna dapat digunakan untuk kloning
- Di PostgreSQL 18, sistem template ini diperluas menjadi struktur yang mendukung kloning instan
CREATE DATABASE ... STRATEGY
- Sejak PostgreSQL 15, parameter
CREATE DATABASE ... STRATEGY diperkenalkan untuk memungkinkan pemilihan metode kloning
- Nilai default adalah
WAL_LOG, yang melakukan kloning per blok melalui Write-Ahead Log
- Metode ini mengurangi beban I/O dan meningkatkan dukungan konkurensi, tetapi lambat untuk kloning berukuran besar
- Dengan menetapkan
STRATEGY=FILE_COPY, PostgreSQL dapat kembali ke metode penyalinan file lama, dan di PostgreSQL 18 opsi kloning baru ditambahkan di atas mekanisme ini
FILE_COPY dan file_copy_method
- Pengaturan
file_copy_method di PostgreSQL 18 mengontrol metode kloning file di tingkat sistem operasi
- Nilai default adalah
copy, yang membaca semua byte lalu menuliskannya ke lokasi baru
- Jika diubah ke
clone, PostgreSQL menggunakan fitur klon sistem file (FICLONE) untuk kloning instan tanpa konsumsi ruang tambahan
- Sistem file yang didukung: XFS, ZFS, APFS, FreeBSD ZFS
- Prosedur pengaturan
- Bangun cluster PostgreSQL di atas sistem file yang mendukung
- Atur
file_copy_method = clone lalu lakukan reload
Hasil Benchmark
- Setelah membuat database uji (
source_db) berukuran sekitar 6GB, dua metode dibandingkan
- Metode
WAL_LOG: 67.000ms (sekitar 67 detik)
- Metode
FILE_COPY + clone: 212ms
- Pada ukuran data yang sama, terkonfirmasi peningkatan kecepatan lebih dari 300x
- Database hasil kloning (
fast_clone) hampir tidak menggunakan ruang disk tambahan
Cara Kerja Data Hasil Kloning
- Saat menggunakan
file_copy_method = clone, hanya metadata sistem file yang dikloning, sehingga kedua database berbagi blok fisik yang sama
- Ukuran database yang dilaporkan PostgreSQL tetap merupakan ukuran logis yang sama (sekitar 6GB)
- Saat terjadi operasi tulis, copy-on-write (COW) akan aktif dan halaman terkait dipisahkan
- Halaman yang berisi baris yang dimodifikasi
- Halaman tempat tuple baru ditulis
- Halaman indeks serta halaman FSM dan visibility map
- Menjalankan VACUUM juga dapat memicu pemisahan halaman tambahan
Verifikasi Blok Bersama di XFS
- Dengan perintah
filefrag -v, dapat diverifikasi apakah dua database berbagi blok fisik yang sama
- Pada kondisi awal, semua extent ditandai sebagai
shared
- Setelah beberapa baris di-update, 40 blok pertama (sekitar 160KB) dipisahkan dan berubah ke alamat fisik yang berbeda
- Extent lainnya tetap dalam status berbagi
Hal yang Perlu Diperhatikan dan Batasan
- Tidak boleh ada koneksi aktif ke database sumber saat kloning dilakukan
- Ini merupakan batasan PostgreSQL, bukan masalah sistem file
- Di lingkungan produksi, penggunaan database template terpisah adalah praktik umum
- Kloning hanya dapat dilakukan dalam satu sistem file yang sama
- Jika beberapa tablespace berada di mount point yang berbeda, PostgreSQL akan kembali memakai penyalinan biasa
- Pada layanan cloud terkelola (AWS RDS, Google Cloud SQL, dll.), fitur ini tidak dapat digunakan karena tidak ada akses ke sistem file
- Di lingkungan VM sendiri atau bare metal, kontrol penuh tetap dimungkinkan
Kesimpulan
- Fitur
file_copy_method = clone di PostgreSQL 18 langsung memanfaatkan fitur klon di tingkat sistem operasi untuk
memangkas waktu kloning database berukuran besar secara drastis
- Di lingkungan pengujian, pengembangan, dan pembelajaran, ini memungkinkan workflow database yang bisa dikloning instan dan di-reset dengan cepat
- Namun, desain operasional tetap perlu mempertimbangkan batasan koneksi aktif dan keharusan berada dalam satu sistem file
Belum ada komentar.