Memahami memori bersama PostgreSQL

Selesai

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 tupel 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, satu kueri kompleks dapat memiliki banyak operasi pengurutan dan hash yang berjalan 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 menyesuaikan 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 meningkatkan performa untuk vakum.

autovacuum_work_mem mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.

temp_buffers mendefinisikan memori untuk menyimpan tabel sementara. Parameter ini mengatur jumlah maksimum jumlah buffer sementara yang digunakan oleh tiap sesi database.

effective_cache_size menentukan jumlah memori yang tersedia untuk penembolokan disk oleh sistem operasi dan dalam database. Perencana kueri PostgreSQL menentukan apakah memori ini diperbaiki 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 startup. 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 pengelogan write ahead (WAL) sebelum menulisnya ke penyimpanan persisten.

Singkatnya, parameter server penting yang berkaitan dengan memori yang ingin Anda sesuaikan adalah:

  • shared_buffers
  • work_mem
  • effective_cache_size