Database servers have unique requirements that differ significantly from general-purpose Linux deployments. Proper kernel tuning can improve database throughput by 30-50% without any application changes. This guide covers the essential kernel parameters for MySQL, PostgreSQL, and other database workloads running on VPS and dedicated servers.
Memory Management
vm.swappiness
The most critical setting for databases. Controls the kernel's tendency to swap memory pages to disk:
# Check current value
cat /proc/sys/vm/swappiness
# Default is 60 — far too aggressive for databases
# Set to 1 for database servers (never set to 0 on modern kernels)
sudo sysctl vm.swappiness=1
# Make permanent
echo "vm.swappiness = 1" | sudo tee -a /etc/sysctl.d/99-database.conf
Setting swappiness to 1 (not 0) tells the kernel to avoid swapping unless absolutely necessary. A value of 0 can cause OOM kills on newer kernels instead of swapping, which is worse than a brief swap spike.
Transparent Huge Pages (THP)
THP causes latency spikes and memory fragmentation issues with databases. Both MySQL and PostgreSQL documentation recommend disabling it:
# Disable THP immediately
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# Make permanent via systemd service
cat