Vagrant OEL 8 DevOps · VirtualBox · Performance

VagrantResource Tuning for Database VMs

Tune CPU, memory, disk and network resources for OEL 8 database VMs. MySQL-optimized Vagrantfile, disk resize, virtio networking and storage I/O tuning.

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.

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
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
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
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
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
DatabaseMin RAMRecommended RAMCPUDisk
MySQL 8 (dev)1 GB4 GB220 GB
MySQL 8 (lab)2 GB8 GB450 GB
ProxySQL512 MB1 GB110 GB
Oracle 19c2 GB8 GB250 GB
PostgreSQL1 GB4 GB220 GB
Galera 3-node2 GB each4 GB each2 each30 GB each