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
Periksa dukungan sistem operasi dan sistem file Anda.
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 ...
Jika kernel Anda tidak memiliki dukungan untuk
RWF_ATOMIC
, sebaiknya update ke versi kernel yang mendukungRWF_ATOMIC
.
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 untukRWF_ATOMIC
diperiksa saat startup. PostgreSQL gagal dimulai jika penulisan atomik dengan tandaRWF_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_ATOMIC
dengan menggunakan opsiforce_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
nilaiPemeriksaan 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
, konfigurasifull_page_writes
,io_combine_limit
, dandebug_io_direct
ditetapkan secara otomatis. Anda dapat mengganti konfigurasi ini menggunakan konfigurasion
/on_unsafe
opsional.
Menyiapkan fitur akselerasi I/O AlloyDB Omni
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.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.
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 ...
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.
Download dan jalankan AlloyDB Omni.
- Download container Docker AlloyDB Omni terbaru. Untuk mengetahui informasi selengkapnya, lihat Menginstal AlloyDB Omni di VM.
- Untuk menggunakan cache disk, ikuti petunjuk di Mempercepat performa database menggunakan cache disk.
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.
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.