Meningkatkan performa AlloyDB Omni menggunakan akselerasi I/O

Pilih versi dokumentasi:

Halaman ini menjelaskan cara mengaktifkan serangkaian fitur akselerasi I/O di AlloyDB Omni yang dapat membantu meningkatkan pemanfaatan resource I/O dan komputasi untuk performa kueri dan workload yang lebih cepat.

Fitur berikut disertakan:

  • Perlindungan penulisan yang rusak
  • Dukungan O_DIRECT
  • I/O Asinkron (AIO)
  • Pembacaan streaming

Untuk mengaktifkan fitur akselerasi I/O ini, Anda harus mengaktifkan alloydb_omni_atomic Grand Unified Configuration (GUC) dan menyiapkan AlloyDB Omni agar dapat menggunakan GUC.

Fitur akselerasi I/O

Bagian berikut menjelaskan fitur akselerasi I/O yang diaktifkan oleh GUC alloydb_omni_atomic.

Perlindungan penulisan yang rusak

Saat mengaktifkan konfigurasi alloydb_omni_atomic, Anda akan menonaktifkan penulisan halaman penuh untuk mencegah overhead performa karena harus membuat gambar halaman penuh untuk pencatatan.

Dukungan O_DIRECT

Dukungan O_DIRECT adalah prasyarat untuk penulisan atomik. O_DIRECT berlaku untuk direktori data PostgreSQL dan cache disk AlloyDB Omni. Untuk mengetahui informasi selengkapnya, lihat Mempercepat performa database menggunakan cache disk.

O_DIRECT juga menawarkan manfaat berikut:

  • Penggunaan O_DIRECT memungkinkan Anda menghindari masalah buffering ganda di PostgreSQL. PostgreSQL mengelola cache buffer-nya sendiri dan dapat melewati cache buffer kernel sistem operasi.
  • O_DIRECT mengurangi overhead CPU dan memori sistem yang diperlukan untuk mempertahankan cache buffer kernel.

I/O Asinkron

Konfigurasi alloydb_omni_atomic menyediakan kemampuan I/O asinkron (AIO) menggunakan library io_uring dan libaio. Sebaiknya Anda menggunakan io_uring untuk menghindari batasan library libaio yang lebih lama. AlloyDB Omni melakukan penggantian ke libaio jika dukungan io_uring tidak terdeteksi. Pendekatan ini mengatasi hilangnya keunggulan I/O yang di-buffer seperti readahead dan write-combining, serta memastikan bandwidth I/O yang tersedia dari penyimpanan yang ditawarkan di bawahnya dimaksimalkan.

Pembacaan streaming

AlloyDB Omni menggunakan pembacaan streaming, mirip dengan fitur PostgreSQL 17, yang memberikan peningkatan performa pemindaian berurutan, ANALYZE, dan pg_prewarm dengan menggunakan I/O tervektor untuk membaca beberapa blok ke dalam cache buffer. Vectored I/O adalah metode yang memungkinkan satu panggilan prosedur melakukan pengambilan data dari beberapa buffer, yang meningkatkan efisiensi dengan mengurangi peralihan konteks dan panggilan sistem.

AlloyDB Omni memperluas dukungan untuk menggunakan pembacaan streaming untuk pembacaan dari cache disk AlloyDB Omni menggunakan AIO untuk meningkatkan performa pembacaan. Pendekatan ini memfasilitasi pengambilan data buffer yang efektif ke dalam kumpulan memori bersama dari penyimpanan untuk digunakan oleh kueri, daripada harus membaca blok ini dari penyimpanan setiap kali diperlukan.

Sebelum memulai

  1. Periksa dukungan sistem operasi dan sistem file Anda.

    1. Untuk memastikan bahwa kernel mendukung RWF_ATOMIC, periksa versi kernel. Dalam contoh berikut, Anda menggunakan mesin Ubuntu 24.10 yang menjalankan kernel Linux 6.14 yang mendukung penulisan atomik.

      > sudo hostnamectl
       ...
       Operating System: Ubuntu 24.10
            Kernel: Linux 6.14.0-061400rc5-generic
      ...
      
    2. Jika kernel Anda tidak memiliki dukungan untuk RWF_ATOMIC, sebaiknya update ke versi kernel yang mendukung RWF_ATOMIC.

  2. Untuk menggunakan fitur akselerasi I/O AlloyDB Omni guna menguji peningkatan performa dengan perlindungan penulisan yang terganggu, aktifkan Konfigurasi Penyatuan Besar (GUC) alloydb_omni_atomic. Untuk menggunakan GUC ini, Anda harus memiliki kernel dan sistem file pendukung yang menyediakan I/O atomik dan melindungi dari penulisan yang terputus.

    Flag RWF_ATOMIC digunakan untuk dukungan penulisan atomik. Secara default, kompatibilitas untuk RWF_ATOMIC diperiksa saat startup. PostgreSQL gagal dimulai jika penulisan atomik dengan tanda RWF_ATOMIC tidak dapat dikonfirmasi.

    Anda dapat mengganti perilaku default ini, tetapi sebaiknya gunakan platform yang didukung dan opsi force untuk menghindari penggantian setelan konfigurasi yang optimal secara tidak sengaja.

    Anda dapat mengganti pemeriksaan kompatibilitas RWF_ATOMICdengan menggunakan opsi force_unsafe, tetapi keamanan data tidak dijamin dengan penggantian ini. Sebaiknya Anda tidak menggunakan opsi ini kecuali jika Anda mengevaluasi AlloyDB Omni di lingkungan yang tidak dapat diupgrade untuk menggunakan kernel dan sistem file yang sesuai.

    Tabel berikut mencantumkan setelan konfigurasi alloydb_omni_atomic dan pemeriksaan kompatibilitas yang sesuai.

    alloydb_omni_atomic nilai Pemeriksaan kompatibilitas saat memulai Deskripsi
    off
    T/A Nilai ini menonaktifkan mode atomik. Fitur tidak aktif.
    force
    Melakukan pemeriksaan kompatibilitas saat startup. Gagal dimulai jika penulisan RWF_ATOMIC gagal. Menetapkan konfigurasi mode atomik.
    force_unsafe
    Tidak melakukan pemeriksaan kompatibilitas saat startup. Menampilkan peringatan, tetapi berlanjut jika penulisan RWF_ATOMIC gagal. Menetapkan konfigurasi mode atomik.

    Dalam konfigurasi force/force_unsafe, konfigurasi full_page_writes, io_combine_limit, dan debug_io_direct ditetapkan secara otomatis. Anda dapat mengganti konfigurasi ini menggunakan konfigurasi on/on_unsafe opsional.

Menyiapkan fitur akselerasi I/O AlloyDB Omni

  1. Siapkan sistem file XFS untuk direktori data. XFS digunakan karena mendukung ukuran blok sistem file yang lebih besar daripada ukuran halaman. AlloyDB Omni dapat menggunakan XFS untuk menulis blok 8 KiB secara atomik dengan dukungan RWF_ATOMIC penuh.

    1. Buat sistem file XFS dengan ukuran blok 8KiB dan pasang di lokasi direktori data yang diinginkan (DATA_DIR).

      sudo mkfs.xfs -f -b size=8k /dev/$DEVICE
      sudo mount /dev/$DEVICE DATA_DIR
      

      Lakukan penggantian berikut:

      • DATA_DIR: lokasi direktori data.
    2. Periksa log kernel untuk memastikan bahwa blok 8k digunakan:

      > sudo journalctl -f
      ...
      kernel: XFS (sdc): EXPERIMENTAL large block size feature enabled.  Use at your own risk!
      kernel: XFS (sdc): Mounting V5 Filesystem 350aa26a-7555-4566-94c1-74e54ddc9250
      ...
      
  2. Opsional: Siapkan cache disk AlloyDB Omni.

    Gunakan contoh berikut untuk membuat sistem file menggunakan ext4,, lalu pasang sistem file.

    sudo /sbin/mkfs.ext4 -m 1 -F -E lazy_itable_init=0,lazy_journal_init=0 /dev/DEVICE
    sudo mount --make-shared -o noatime,discard,errors=panic /dev/DEVICE /OMNI_DISK_CACHE_DIRECTORY
    

    Lakukan penggantian berikut:

    • DEVICE: entity yang berinteraksi dengan aplikasi untuk melakukan operasi I/O (membaca atau menulis data).

    Untuk mendukung performa optimal fitur akselerasi I/O AlloyDB Omni saat penyimpanan utama tidak menawarkan Operasi Input/Output Per Detik (IOPS) yang lebih tinggi, sebaiknya siapkan cache disk AlloyDB Omni. Untuk mengetahui informasi selengkapnya, lihat Mempercepat performa database menggunakan cache disk.

  3. Download dan jalankan AlloyDB Omni.

    1. Download container Docker AlloyDB Omni terbaru. Untuk mengetahui informasi selengkapnya, lihat Menginstal AlloyDB Omni di VM.
    2. Untuk menggunakan cache disk, ikuti petunjuk di Mempercepat performa database menggunakan cache disk.
    3. Untuk mengizinkan io_uring, tambahkan argumen tambahan, --security-opts="seccomp:unconfined"

      docker run -d --name CONTAINER_NAME \
         -e POSTGRES_PASSWORD=NEW_PASSWORD \
         -v DATA_DIR:/var/lib/postgresql/data \
         -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \  # Only if disk cache is enabled
         -p HOST_PORT:5432 \
         --security-opts="seccomp:unconfined" \
         --restart=always \
         google/alloydbomni:16
      

      Lakukan penggantian berikut:

      • CONTAINER_NAME: nama container AlloyDB Omni di registry container mesin host Anda.
      • NEW_PASSWORD: sandi yang ditetapkan untuk pengguna PostgreSQL di penampung.
      • DATA_DIR: lokasi direktori data.
      • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: jalur direktori cache disk di dalam penampung.
      • HOST_PORT: port TCP di mesin host yang harus digunakan container untuk memublikasikan port 5432-nya sendiri.
  4. Konfigurasi AlloyDB Omni untuk menggunakan I/O atomik.

    Tetapkan GUC alloydb_omni_atomic ke nilai yang sesuai dan mulai ulang penampung.

    alter system set alloydb_omni_atomic='force';
    sudo docker restart CONTAINER_NAME;
    

    Lakukan penggantian berikut:

    • CONTAINER_NAME: nama container AlloyDB Omni di registry container mesin host Anda.

Batasan

  • PostgreSQL 16 berisi jalur yang melakukan I/O blok tunggal, yang O_DIRECT memperlambat. Mungkin ada pembacaan yang lebih lambat selama pemulihan database (jalur redo), pemindaian vacuum, dan pemanasan awal cache disk Omni.
  • Fitur akselerasi I/O AlloyDB Omni di replika baca tidak didukung dalam Pratinjau.
  • Di bawah beban kerja berat, sistem berbasis ARM mungkin menunjukkan performa yang lebih rendah karena perbedaan arsitektur.
  • Karena batasannya dengan peningkatan workload, libaio rentan terhadap ketidaktersediaan resource. io_uring mungkin mengalami masalah alokasi memori saat memori sistem yang tersedia hampir habis.