Tentang pengelolaan memori otomatis

Pilih versi dokumentasi:

AlloyDB Omni menggunakan algoritma adaptif untuk pengelolaan memori.

Anda dapat menentukan batas atas buffer bersama saat memulai AlloyDB Omni. Jika Anda tidak menetapkan batas atas, AlloyDB Omni akan otomatis menetapkan ukuran pencadangan buffer bersama ke 80% dari 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 pendukung buffer bersama untuk performa terbaik saat melakukan caching data.

Memori otomatis

Secara default, parameter shared_buffers disetel ke 0, yang merupakan nilai khusus yang menetapkan batas atas ukuran cache shared buffers menjadi 80% dari memori sistem. AlloyDB Omni dimulai dari 10% batas atas shared_buffers. Jika shared_buffers diganti dengan nilai kustom, AlloyDB Omni akan menggunakan nilai tersebut sebagai batas atas ukuran shared_buffers, dan dimulai dengan ukuran kustom yang ditentukan tersebut.

Untuk menentukan ukuran kustom, edit file konfigurasi postgresql.conf. Misalnya, Anda dapat menyetel shared_buffers ke 1GB menggunakan salah satu cara 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 container AlloyDB Omni saat Anda menginstalnya.

Mengoptimalkan performa kueri

Nilai default parameter shared_buffers berfungsi untuk skenario umum.

Namun, Anda dapat menyesuaikan nilai untuk mendapatkan performa terbaik. Jika Anda memilih untuk mengandalkan nilai default shared_buffers untuk menyimpulkan batas atas buffer bersama, gunakan nilai memory.max cgroup untuk memengaruhi komputasi.

Memori columnar engine

shared_buffers dinamis tidak bergantung pada memori mesin berbasis kolom. Jika mesin columnar diaktifkan, ukuran shared_buffers dinamis dapat diperoleh dengan mengurangi jumlah memori yang digunakan oleh mesin columnar dari 80% total memori yang tersedia untuk sistem atau cgroup.

Halaman besar

Halaman besar meningkatkan performa database. AlloyDB Omni mengelola huge page secara eksplisit jika memungkinkan, atau mengandalkan fitur huge page transparan (THP) dari sistem operasi. Jika kedua jenis halaman besar tidak 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 Mulai AlloyDB Omni untuk mengetahui petunjuk cara memulai container.

Peringatan akan 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 penggunaan 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 penggunaan memori sistem rendah, dan mengurangi ukuran saat penggunaan 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 sistem kehabisan memori
Jika AlloyDB Omni mendeteksi bahwa sistem memiliki memori yang sangat rendah, AlloyDB Omni akan mencoba menghapus koneksi PostgreSQL yang paling banyak menggunakan memori hingga beban kembali ke tingkat yang wajar. Saat peristiwa seperti itu terjadi, AlloyDB Omni mencatat hal berikut dalam log penampung Docker:
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)