Resource Tuning Overview
Default Vagrant VMs are minimal. For database workloads on OEL 8 — especially MySQL, Oracle, or ProxySQL — you need to tune CPU, memory, disk, and I/O settings to get realistic performance. This page covers all resource configuration options for VirtualBox provider.
CPU and Memory
Ruby — CPU and Memory
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
config.vm.provider "virtualbox" do |vb|
# CPU cores
vb.cpus = 4
# Memory in MB
vb.memory = 8192 # 8 GB
# Use host CPU features (better performance)
vb.customize ["modifyvm", :id, "--paravirtprovider", "kvm"]
# Enable IO APIC (required for multiple CPUs)
vb.customize ["modifyvm", :id, "--ioapic", "on"]
# Execution cap (limit CPU usage %)
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "80"]
end
end
Disk Size
Ruby — Disk Size with Plugin
# Method 1: Using vagrant-disksize plugin
# First install: vagrant plugin install vagrant-disksize
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
# Resize disk to 100GB
config.disksize.size = "100GB"
config.vm.provider "virtualbox" do |vb|
vb.memory = 4096
vb.cpus = 2
end
end
BASH — Resize Partition in VM
# After vagrant up — resize partition inside OEL 8 VM
vagrant ssh
# Check current disk
lsblk
df -h
# If using LVM (typical OEL 8 install):
sudo growpart /dev/sda 3
sudo pvresize /dev/sda3
sudo lvextend -l +100%FREE /dev/ol/root
sudo xfs_growfs /
# If not using LVM:
sudo growpart /dev/sda 1
sudo xfs_growfs /
# Verify
df -h
Storage Controller Performance
Ruby — Storage Performance
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
config.vm.provider "virtualbox" do |vb|
vb.memory = 8192
vb.cpus = 4
# Use SAS controller for better disk performance
vb.customize ["storagectl", :id,
"--name", "SATA Controller",
"--hostiocache", "on"]
# Increase host I/O cache
vb.customize ["modifyvm", :id, "--iocache", "on"]
vb.customize ["modifyvm", :id, "--iocachesize", "512"]
end
end
Network Performance
Ruby — Network Performance
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
config.vm.provider "virtualbox" do |vb|
vb.memory = 4096
vb.cpus = 2
# Use virtio network adapter (much faster than default Intel PRO)
vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
vb.customize ["modifyvm", :id, "--nictype2", "virtio"]
# Increase network buffer size
vb.customize ["modifyvm", :id, "--nicbandwidthgroup1", ""]
# Fix DNS resolution (important for Oracle repos)
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
end
MySQL-Optimized Vagrantfile
Ruby — MySQL-Optimized Vagrantfile
# Vagrantfile optimized for MySQL on OEL 8
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
config.vm.hostname = "mysql-lab"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "forwarded_port", guest: 3306, host: 13306
config.vm.provider "virtualbox" do |vb|
vb.name = "MySQL-OEL8-Lab"
vb.memory = 8192 # 8GB RAM for MySQL InnoDB buffer pool
vb.cpus = 4 # 4 cores
# Performance
vb.customize ["modifyvm", :id, "--ioapic", "on"]
vb.customize ["modifyvm", :id, "--paravirtprovider","kvm"]
vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
vb.customize ["modifyvm", :id, "--nictype2", "virtio"]
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
# Storage I/O cache
vb.customize ["storagectl", :id,
"--name", "SATA Controller",
"--hostiocache", "on"]
end
config.vm.provision "shell", inline: <<-SHELL
# Set swappiness low for MySQL
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
# Disable transparent huge pages
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
SHELL
end
Recommended Resources by Database
| Database | Min RAM | Recommended RAM | CPU | Disk |
|---|---|---|---|---|
| MySQL 8 (dev) | 1 GB | 4 GB | 2 | 20 GB |
| MySQL 8 (lab) | 2 GB | 8 GB | 4 | 50 GB |
| ProxySQL | 512 MB | 1 GB | 1 | 10 GB |
| Oracle 19c | 2 GB | 8 GB | 2 | 50 GB |
| PostgreSQL | 1 GB | 4 GB | 2 | 20 GB |
| Galera 3-node | 2 GB each | 4 GB each | 2 each | 30 GB each |