Tijdens het opzetten van een aantal Linux VM's (OpenSUSE) constateerde ik dat een import script voor MySQL data erg traag was bij het opzetten van de data tabellen. Op dat moment heb ik er verder geen aandacht aan besteed, de insert's verliepen verder op de te verwachten snelheid.
Later merkte ik dat de web applicatie die op de VM draait op sommige punten ook erg traag was, tot enkele seconden per page request. Toen ben ik er maar eens ingedoken om de oorzaak te achterhalen...
Nu blijkt dat sommige queries erg traag zijn. Bij een doorsnee SELECT of INSERT valt het niet zo op, het hangt van het aantal af of het opvalt. Wat wél altijd traag blijkt is het aanpassen van de AUTO_INCREMENT waarde van een tabel, of de volgende query:
Normaal gesproken duurt het wijzigen naar MyISAM 0,00 seconden, naar InnoDB doorgaans iets van 0,02 seconden (getest op meerdere servers). Op deze Linux VM's nam de MyISAM-query zo'n 0,30s en InnoDB query zo'n 0,50s - 0,80s in beslag. De waarden schommelen, maar zijn altijd significant meer dan de 0,00s - 0,02s die je mag verwachten.
Configuratie van de server:
Na installatie is het volgende uitgevoerd om MySQL te installeren:
Om te testen voor ik vervolgens de volgende queries in:
Ik heb van alles geprobeerd: de configuratie van InnoDB, Hyper-V, Linux, waaronder:
Het mag allemaal niet baten. Wanneer ik exact dezelfde stappen herhaal op een stand alone, Proxmox of ESXi server zijn de queries wel snel. En dat is met een default MySQL installatie en standaard Linux installatie.
Op een tweede Hyper-V 2012 server (Core i5-2400 @ 3.1Ghz) zijn de resultaten nagenoeg gelijk aan de eerste Hyper-V server.
Wanneer ik dezelfde VM aanmaak op een Hyper-V 2008 R2 server gaat het wel goed
De resultaten zijn dan gelijk aan die onder Proxmox/ESXi/Stand alone. Dit blijkt het geval te zijn op meerdere 2008 servers die ik getest heb.
Ik heb de test ook uitgevoerd onder Windows Azure met SLES (small: 1 core/1.75GB). En daar worden de ALTER TABLE queries uitgevoerd in zo'n 0,04s.
Ik heb de testen meerdere malen uitgevoerd en herhaald op verschillende servers en elke keer blijkt dan alleen de VM's onder 2012 schrikbarend traag zijn. Je zou toch verwachten dat de Linux support onder 2012 verbetert is ten opzichte van 2008?
Heeft iemand enig idee hoe dit mogelijk is? Is onder 2012 ook de performance van 2008/ESXi/Proxmox te behalen?
Later merkte ik dat de web applicatie die op de VM draait op sommige punten ook erg traag was, tot enkele seconden per page request. Toen ben ik er maar eens ingedoken om de oorzaak te achterhalen...
Nu blijkt dat sommige queries erg traag zijn. Bij een doorsnee SELECT of INSERT valt het niet zo op, het hangt van het aantal af of het opvalt. Wat wél altijd traag blijkt is het aanpassen van de AUTO_INCREMENT waarde van een tabel, of de volgende query:
SQL:
1
2
3
4
| ALTER TABLE t ENGINE=MyISAM; -- Query OK, 0 rows affected (0.23 sec) ALTER TABLE t ENGINE=InnoDB; -- Query OK, 0 rows affected (0.52 sec) |
Normaal gesproken duurt het wijzigen naar MyISAM 0,00 seconden, naar InnoDB doorgaans iets van 0,02 seconden (getest op meerdere servers). Op deze Linux VM's nam de MyISAM-query zo'n 0,30s en InnoDB query zo'n 0,50s - 0,80s in beslag. De waarden schommelen, maar zijn altijd significant meer dan de 0,00s - 0,02s die je mag verwachten.
Configuratie van de server:
Windows Server 2012 Hyper-V (Intel Core i7 3770 @ 3.4Ghz) ------------------------------------- OS: Suse 12.2 x64 Harddisk: 32GB IDE Memory: 1024MB CPU: 1 core Network: Network Adapter ------------------------------------- Setup: Dekstop: Minimal Server Selection (Text Mode) Partitioning: - Create swap volume /dev/sda1 (1.46GB) - Create root volume /dev/sda2 (30.54 GB) with ext4 Firewall: disabled SSH: enabled
Na installatie is het volgende uitgevoerd om MySQL te installeren:
Bash:
1
2
3
4
5
| # reboot # zypper up # zypper in mysql-community-server # service mysql start # mysql |
Om te testen voor ik vervolgens de volgende queries in:
SQL:
1
2
3
4
5
6
7
8
9
10
| DROP DATABASE IF EXISTS test; CREATE DATABASE test; USE test; CREATE TABLE t ( id INT(11) default NULL auto_increment, s char(60) default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM; ALTER TABLE t ENGINE=MyISAM; ALTER TABLE t ENGINE=InnoDB; |
Ik heb van alles geprobeerd: de configuratie van InnoDB, Hyper-V, Linux, waaronder:
- Configuratie InnoDB geoptimaliseerd
- Meer VM geheugen
- Meer VM cores
- Ext2 ipv ext4
- LVM
- /boot op IDE, / op SCSI
- OS: OpenSUSE 12.2 / Debian / CentOS 6.3 / SLES
Het mag allemaal niet baten. Wanneer ik exact dezelfde stappen herhaal op een stand alone, Proxmox of ESXi server zijn de queries wel snel. En dat is met een default MySQL installatie en standaard Linux installatie.
Op een tweede Hyper-V 2012 server (Core i5-2400 @ 3.1Ghz) zijn de resultaten nagenoeg gelijk aan de eerste Hyper-V server.
Wanneer ik dezelfde VM aanmaak op een Hyper-V 2008 R2 server gaat het wel goed

Ik heb de test ook uitgevoerd onder Windows Azure met SLES (small: 1 core/1.75GB). En daar worden de ALTER TABLE queries uitgevoerd in zo'n 0,04s.
Ik heb de testen meerdere malen uitgevoerd en herhaald op verschillende servers en elke keer blijkt dan alleen de VM's onder 2012 schrikbarend traag zijn. Je zou toch verwachten dat de Linux support onder 2012 verbetert is ten opzichte van 2008?
Heeft iemand enig idee hoe dit mogelijk is? Is onder 2012 ook de performance van 2008/ESXi/Proxmox te behalen?
"If you see a light at the end of a wormhole, it's probably a photon torpedo!"