Memahami memori bersama PostgreSQL
PostgreSQL menggunakan memori yang dapat diklasifikasikan sebagai:
- Memori lokal - dialokasikan untuk setiap proses
- memori bersama - digunakan oleh semua proses
Memori lokal
Setiap proses di PostgreSQL memerlukan memori untuk pemrosesan kueri. Parameter server berikut memungkinkan Anda menentukan penggunaan memori:
work_mem menentukan memori yang diperlukan untuk mengurutkan tuple untuk operasi ORDER BY dan DISTINCT. Parameter ini menentukan jumlah memori yang tersedia untuk operasi pengurutan internal dan tabel hash. Jika Anda memiliki memori yang tersedia dalam jumlah besar dan beban kerja Anda memiliki kueri dengan pengurutan yang kompleks, meningkatkan nilai parameter ini dapat meningkatkan performa dengan mengizinkan pemindaian dalam memori yang lebih besar sebelum meluap ke disk.
Namun, suatu kueri kompleks dapat memiliki banyak operasi pengurutan dan hash yang dijalankan secara bersamaan. Setiap operasi menggunakan memori sebanyak yang diizinkan nilai ini sebelum mulai menulis ke file sementara berbasis disk. Pada sistem yang sibuk, oleh karena itu, total penggunaan memori berkali-kali lipat dari parameter work_mem individu.
Untuk menyetel nilai ini, gunakan Total RAM * 0,25 / max_connections sebagai nilai awal.
maintenance_work_mem adalah memori yang diperlukan oleh vacuum dan reindex. Parameter ini menentukan jumlah memori yang tersedia untuk operasi pengurutan internal dan tabel hash. Nilai defaultnya adalah 64 KB, tetapi meningkatkan nilai ini akan meningkatkan performa untuk pembersihan.
autovacuum_work_mem mengatur memori maksimum yang akan digunakan oleh setiap proses autovacuum.
temp_buffers menentukan memori untuk menyimpan tabel sementara. Parameter ini menetapkan jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
effective_cache_size menentukan jumlah memori yang tersedia untuk cache disk oleh sistem operasi dan di dalam database. Perencana kueri PostgreSQL menentukan apakah memori ini ditetapkan dalam RAM. Pemindaian indeks kemungkinan besar digunakan terhadap nilai yang lebih tinggi; jika tidak, pemindaian berurutan digunakan jika nilainya rendah.
Atur effective_cache_size ke 50% dari total RAM komputer.
Memori bersama
Memori bersama dialokasikan saat memulai. Memori bersama digunakan untuk:
shared_buffers menentukan buffer memori bersama yang digunakan oleh server. PostgreSQL memuat halaman tabel dan indeks dari penyimpanan persisten ke kumpulan buffer bersama, lalu mengerjakannya dalam memori. Kumpulan buffer bersama ini adalah komponen utama dari memori bersama yang digunakan oleh server. Nilai defaultnya adalah 128 MB (tergantung pada tingkat komputasi). Jika Anda memutuskan untuk mengalokasikan lebih banyak memori, Anda perlu memulai ulang server.
wal_buffers menentukan jumlah buffer halaman disk dalam memori bersama untuk penulisan log mendahului (WAL) sebelum menulisnya ke penyimpanan persisten.
Secara singkat, parameter server penting yang berkaitan dengan memori yang mungkin ingin Anda atur adalah:
- shared_buffers
- work_mem
- ukuran_cache_efektif (effective_cache_size)