1 poin oleh GN⁺ 2025-12-24 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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.

Belum ada komentar.