MySQL Optimierung:: MySQL tmpdir auf RAMDisk auslagern mit tmpfs
Jedesmal wenn man in der MySQL Prozess Liste im Statusfeld „copying to tmp table“ sieht, erstellt MySQL eine Temporäre Table auf der Harddisk. Jedoch dauert das Schreiben auf die HDD einiges länger als wenn man die Daten ins Memory schreiben würde. Daher ist es sinnvoll für die Datenbank eine Ramdisk zu erstellen. In FreeBSD ist es seit Version 7 ausserdem möglich eine Ramdisk mit variabler Grösse zu erstellen.
mkdir -p /db/tmpfs01 && chown mysql:mysql /db/tmpfs01 mount -t tmpfs tmpfs /db/tmpfs01
Damit die RAMDisk nach dem nächsten Restart noch vorhanden ist, noch in fstab eintragen:
vi /etc/fstab #variable RAM disk tmpfs /db/tmpfs01 tmpfs rw,mode=1777 0 0
Nun my.cnf editieren und diese Zeile einfügen bzw. anpassen:
vi /etc/my.cnf tmpdir = /db/tmpfs01
Nun MySQL restarten.
Quellen:
- mysql-and-ramdisk-or-how-to-make-tmpdir-usage-queries-faster
- ram-disk-mit-tmpfs-auf-freebsd-erstellen
Problem: RamDisk ist voll
Es ist sehr wichtig, dass man die RamDisk im Auge behält. Ansonsten kann sowas passieren
Filesystem Size Used Avail Capacity Mounted on
tmpfs 2.6G 2.6G 0B 100% /db/tmpfs01
[ERROR] /usr/local/libexec/mysqld: Disk is full writing '/db/tmpfs01/ST8meb0D' (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space)
Hier kann man in ein paar Sekunden Abhilfe schaffen, indem man zusätzliches Virtuells Memory (SWAP) bereitstellt.