Skip to content
VDS · Basis data

Mengonfigurasi memori database untuk tier Anda

Nilai buffer spesifik untuk PostgreSQL dan MySQL untuk VDS-1…VDS-6, dan aturan untuk mendistribusikan memori antara database, aplikasi, dan sistem.

Diperbarui 23 Agustus 2026

Pengaturan database bawaan dirancang agar bisa berjalan di mana saja, bukan untuk berjalan cepat. Pada VDS-3 dengan memori 8 GB, PostgreSQL bawaan hanya memakai 128 MB untuk cache — artinya hampir semua data dibaca dari disk, padahal seharusnya bisa dibaca dari memori.

Aturan alokasi

Bagi memori tier kira-kira seperti ini:

  • proses sistem dan layanan — 10–15%;
  • aplikasi (PHP-FPM, Node, gunicorn) — sesuai jumlah worker;
  • database — sisanya, tapi tidak lebih dari 60–70% total memori.

Jangan pernah memberikan seluruh memori ke database: sistem akan masuk ke swap, dan NVMe tidak akan menolong Anda — latensi akan naik puluhan kali lipat.

Berapa yang sedang terpakai saat ini:

free -h
ps -eo pmem,rss,comm --sort=-rss | head

Grafik memori untuk satu jam, satu hari, satu minggu, dan satu bulan tersedia di "Overview" panel /hosting/vds/m/<id> — grafik tersebut menunjukkan puncak yang sebenarnya, bukan kondisi saat ini.

PostgreSQL

/etc/postgresql/17/main/postgresql.conf:

Tiershared_bufferseffective_cache_sizework_memmaintenance_work_memmax_connections
VDS-1 (2 GB)384MB1GB8MB96MB40
VDS-2 (4 GB)1GB2GB12MB256MB60
VDS-3 (8 GB)2GB5GB16MB512MB100
VDS-4 (16 GB)4GB10GB24MB1GB150
VDS-5 (24 GB)6GB16GB32MB2GB200
VDS-6 (32 GB)8GB22GB48MB2GB250

Ditambah pengaturan umum untuk NVMe:

random_page_cost = 1.1
effective_io_concurrency = 200

work_mem dialokasikan per operasi pengurutan, bukan per koneksi: seratus kueri paralel dengan pengurutan kompleks akan mengalikannya hingga ratusan kali. Jangan mengaturnya terlalu tinggi.

Cara menerapkan: systemctl restart postgresql (mengubah shared_buffers memang memerlukan restart).

MySQL dan MariaDB

Tierinnodb_buffer_pool_sizeinnodb_log_file_sizemax_connections
VDS-1512M128M60
VDS-21G256M100
VDS-33G512M150
VDS-48G1G200
VDS-512G1G250
VDS-618G2G300
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000

Buffer pool adalah parameter utama: jika muat untuk kumpulan data kerja, disk hampir tidak dibaca.

Memeriksa hasilnya

SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;

Untuk MySQL, periksa SHOW ENGINE INNODB STATUS dan rasio Innodb_buffer_pool_reads terhadap Innodb_buffer_pool_read_requests. Cache hit rate di bawah 95% berarti database kekurangan memori.

Kesalahan umum

GejalaPenyebab
Database tidak mau start setelah diubahMemori yang diminta melebihi yang tersedia — periksa journal
Proses dibunuh oleh OOMDatabase, aplikasi, dan sistem secara bersamaan melebihi memori tier
Jadi lebih lambat setelah "optimasi"work_mem diatur terlalu tinggi, mesin sedang swap
Disk terus-menerus dibacaBuffer terlalu kecil, kumpulan data kerja tidak muat

Jika setelah menyetel memori Anda masih menemui hambatan, masalahnya bukan pada konfigurasi melainkan pada jumlah data. Anda hanya bisa upgrade paket, dengan pembayaran prorata untuk sisa hari masa berbayar; downgrade tidak tersedia, jadi pilih tier berikutnya dengan cermat.