AlloyDB Omni menggunakan algoritma adaptif untuk pengelolaan memori.
Anda dapat menentukan batas atas buffering bersama saat memulai AlloyDB Omni. Jika Anda tidak menetapkan batas atas, AlloyDB Omni akan otomatis menetapkan ukuran pencadangan buffering bersama ke 80% memori sistem. Ukuran pencadangan awal buffer bersama dapat berbeda dari batas atas.
AlloyDB Omni terdiri dari pekerja memori cerdas yang terus memantau status memori, dan menyesuaikan ukuran pencadangan buffer bersama untuk performa terbaik saat meng-cache data.
Secara default, parameter shared_buffers
ditetapkan ke 0
yang merupakan nilai khusus yang menetapkan batas atas ukuran cache shared buffers
menjadi 80% memori sistem. AlloyDB Omni dimulai dari 10% batas atas shared_buffers
. Jika shared_buffers
diganti dengan nilai kustom, AlloyDB Omni akan mematuhi nilai tersebut sebagai batas atas ukuran shared_buffers
, dan memulai dengan ukuran kustom yang ditentukan tersebut.
Untuk menentukan ukuran kustom, edit file konfigurasi postgresql.conf
. Misalnya, Anda dapat menetapkan shared_buffers
ke 1GB
menggunakan salah satu hal berikut:
docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $image
docker run --name CONTAINER_NAME $image -c shared_buffers=1GB
Ganti
CONTAINER_NAME
dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat menginstalnya.
Mengoptimalkan performa kueri
Nilai default parameter shared_buffers
berfungsi untuk skenario umum.
Namun, Anda dapat menyesuaikan nilai untuk performa terbaik.
Jika Anda memilih untuk mengandalkan nilai default shared_buffers
untuk menyimpulkan batas atas buffering bersama, gunakan nilai memory.max
cgroup untuk memengaruhi komputasi.
Memori columnar engine
shared_buffers
dinamis tidak bergantung pada memori mesin kolom. Jika mesin kolom diaktifkan, ukuran shared_buffers
dinamis dapat diperoleh dengan mengurangi jumlah memori yang digunakan oleh mesin kolom dari 80% total memori yang tersedia untuk sistem atau cgroup.
Huge page
Huge page meningkatkan performa database. AlloyDB Omni mengelola huge page secara eksplisit jika memungkinkan. Jika tidak, AlloyDB Omni akan mengandalkan fitur huge page transparan (THP) dari sistem operasi. Jika tidak ada jenis halaman besar yang didukung, AlloyDB Omni akan kembali ke halaman 4k, dan mencetak peringatan di log penampung docker docker logs $container_name
dengan petunjuk khusus untuk menyiapkan halaman besar. Lihat Memulai AlloyDB Omni untuk mengetahui petunjuk cara memulai penampung.
Peringatan terlihat mirip dengan berikut ini:
HINT: Please either execute the all-in-one setup script:
docker run --rm --privileged $image setup-host
OR manually execute:
echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
sudo sysctl -w vm.nr_overcommit_hugepages=1048576
Pengelolaan memori otomatis saat runtime
AlloyDB Omni terus memantau beban sistem, dan menyesuaikan konsumsi memorinya untuk performa yang lebih baik. Secara khusus, Anda mungkin mengamati hal berikut:
- Perubahan ukuran
shared_buffers
dinamis - AlloyDB Omni meningkatkan ukuran
shared_buffers
dinamis saat konsumsi memori sistem rendah, dan mengurangi ukuran saat konsumsi memori sistem tinggi. Untuk memantau ukuranshared_buffers
dinamis, gunakan:CREATE EXTENSION IF NOT EXISTS g_memory; SELECT g_dynamic_shared_size();
- Penghentian koneksi PostgreSQL saat memori sistem sangat rendah
- Saat mendeteksi bahwa memori sistem sangat rendah, AlloyDB Omni akan mencoba menghapus koneksi PostgreSQL yang paling banyak menggunakan memori hingga beban kembali ke tingkat yang wajar. Saat peristiwa tersebut terjadi, AlloyDB Omni akan mencatat hal berikut dalam log penampung docker:
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)