Tentang pengelolaan memori otomatis

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.

Memori otomatis

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 ukuran shared_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)