Ускоряем MySQL при помощи tmpfs

В процессе работы MySQL время от времени создает временные таблицы, место хранения которых задается переменной tmpdir. Если таких файликов создается много (не хватает памяти или еще куча причин), то начинается активный i/o, что создает нагрузку на систему.

Один из способов избежать данной проблемы - смонтировать папку временных файлов на RAM-диск, в данном случае tmpfs.

Добавляем в /etc/fstab следующее

# Temporary filesystem for MySQL
tmpfs	/dev/shm	tmpfs	rw,defaults,noexec,nosuid,size=512m	0	0

Размер можно изменять в параметре size

Монтируем свежедобавленный раздел

# mount -a

Добавляем

tmpdir		= /dev/shm

и закомментариваем старое значение tmpdir, перезапускаем mysqld

$ sudo service mysql restart

Если используется appamor, то в логах mysql будут сообщения вида

/usr/sbin/mysqld: Can't create/write to file '/dev/shm/ibMoIFzB' (Errcode: 13)
120805 22:22:14  InnoDB: Error: unable to create temporary file; errno: 13

Все просто - в профиле настроек mysql запрещено писать в новое месторасположение временных файлов.

Вносим изменения в файл /etc/apparmor.d/usr.sbin.mysqld, добавляем в самый конец строки так, чтобы получилось следующее:

  /sys/devices/system/cpu/ r,
  /dev/shm/** rw,
}

и перечитываем правила

$ sudo service apparmor restart