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 beban kerja yang lebih cepat.
Fitur berikut disertakan:
- Perlindungan penulisan yang terputus
- Dukungan
O_DIRECT - I/O asinkron (AIO)
- Pembacaan streaming
Untuk mengaktifkan fitur akselerasi I/O ini, Anda harus mengaktifkan Konfigurasi Terpadu Besar (GUC) alloydb_omni_atomic 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 terputus
Saat mengaktifkan konfigurasi alloydb_omni_atomic, Anda akan menonaktifkan
penulisan halaman penuh
untuk mencegah overhead performa karena harus membuat gambar halaman penuh untuk
logging.
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:
- Menggunakan
O_DIRECTmemungkinkan Anda menghindari masalah buffering ganda di PostgreSQL. PostgreSQL mengelola cache buffer-nya sendiri dan dapat melewati cache buffer kernel sistem operasi. O_DIRECTmengurangi overhead CPU dan memori sistem operasi 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 gunakan io_uring untuk menghindari batasan library libaio yang lebih lama.
AlloyDB Omni akan kembali ke libaio jika dukungan io_uring tidak terdeteksi. Pendekatan ini mengatasi hilangnya manfaat I/O yang di-buffer seperti readahead dan penggabungan penulisan, serta memastikan bandwidth I/O yang tersedia dari penyimpanan yang ditawarkan di bawahnya dimaksimalkan.
Pembacaan streaming
AlloyDB Omni menggunakan pembacaan streaming, yang memberikan peningkatan pemindaian berurutan, performa ANALYZE, dan pg_prewarm dengan menggunakan I/O vektor untuk membaca beberapa blok ke dalam cache buffer. I/O Vektor adalah metode yang memungkinkan satu panggilan prosedur melakukan pengambilan data awal 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 pembacaan awal buffer yang efektif ke dalam kumpulan memori bersama dari penyimpanan untuk digunakan kueri, bukan harus membaca blok ini dari penyimpanan setiap kali diperlukan.
Sebelum memulai
Periksa dukungan sistem operasi dan sistem file Anda.
Untuk memastikan 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 terputus, aktifkan Konfigurasi Terpadu 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_ATOMICdigunakan untuk dukungan penulisan atomik. Secara default, kompatibilitas untukRWF_ATOMICdiperiksa selama startup. PostgreSQL gagal dimulai jika penulisan atomik dengan flagRWF_ATOMICtidak dapat dikonfirmasi.Anda dapat mengganti perilaku default ini, tetapi sebaiknya gunakan platform yang didukung dan opsi
forceuntuk menghindari penggantian setelan konfigurasi optimal secara tidak sengaja.Anda dapat mengganti pemeriksaan kompatibilitas
RWF_ATOMICmenggunakan opsiforce_unsafe, tetapi keamanan data tidak dijamin dengan penggantian ini. Sebaiknya jangan gunakan 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_atomicdan pemeriksaan kompatibilitas yang sesuai.Nilai alloydb_omni_atomicPemeriksaan kompatibilitas startup Deskripsi off
T/A Nilai ini menonaktifkan mode atomik. Fitur tidak aktif. force
Melakukan pemeriksaan kompatibilitas startup. Gagal dimulai jika penulisan RWF_ATOMICgagal.Menetapkan konfigurasi mode atomik. force_unsafe
Tidak melakukan pemeriksaan kompatibilitas startup. Menampilkan peringatan, tetapi akan terus berlanjut jika RWF_ATOMICpenulisan gagal.Menetapkan konfigurasi mode atomik. Dalam konfigurasi
force/force_unsafe, konfigurasifull_page_writes,io_combine_limit, dandebug_io_directakan ditetapkan secara otomatis. Anda dapat mengganti konfigurasi ini menggunakan konfigurasi opsionalon/on_unsafe.
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 dari ukuran halaman. AlloyDB Omni dapat menggunakan XFS untuk menulis blok 8KiB secara atomik dengan dukungan
RWF_ATOMICpenuh.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 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:17
Lakukan penggantian berikut:
CONTAINER_NAME: nama container AlloyDB Omni di registry container mesin host Anda.NEW_PASSWORD: sandi yang ditetapkan ke pengguna PostgreSQL container.DATA_DIR: lokasi direktori data.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: jalur direktori cache disk di dalam container.HOST_PORT: postingan TCP di mesin host tempat container harus memublikasikan port 5432-nya sendiri.
Konfigurasi AlloyDB Omni untuk menggunakan I/O atomik.
Tetapkan GUC
alloydb_omni_atomicke nilai yang sesuai dan mulai ulang container.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 17 berisi jalur yang melakukan I/O blok tunggal, yang diperlambat oleh
O_DIRECT. Mungkin ada pembacaan yang lebih lambat selama pemulihan database (jalur ulang), pemindaian vakum, dan pemanasan awal cache disk Omni. - Fitur akselerasi I/O AlloyDB Omni di replika baca tidak didukung dalam Pratinjau.
- Dalam beban kerja yang berat, sistem berbasis ARM mungkin menunjukkan performa yang lebih rendah karena perbedaan arsitektur.
- Karena batasannya dengan peningkatan beban kerja,
libaiorentan terhadap ketidaktersediaan resource.io_uringmungkin mengalami masalah alokasi memori saat memori sistem yang tersedia hampir habis.