Прискорюємо MySQL
У роботі періодично стикаюся з повільними сайтами Drupal, і гальма дуже часто викликані повільним виконанням запитів до Mysql. Причини бувають різні, але найчастіше повільне виконання запитів викликане тим, що з виконанні запиту MySQL змушене використовувати тимчасові таблиці на диску. Для цього використовується каталог, заданий у змінній tmpdir файлі конфігурації my.cnf. На мій погляд, правильним рішенням в таких ситуаціях є оптимізація бази даних (використання типів полів, що найбільш підходять під вміст, правильне налаштування ідексів, і побудова коректних запитів до бази, що враховують індекси в базі). Але також ми можемо допомогти MySQL якщо перемістити ці тимчасові таблиці в оперативну пам'ять (таке рішення підходить для серверів з великою кількістю оперативної пам'яті), що дозволить швидше виконувати операції пов'язані з використанням тимчасових таблиць, за рахунок економії на операціях запису і читання з диска, так як все робитиметься в оперативній пам'яті. Для перенесення папки tmpdir в оперативну пам'ять ми підключимо до папки /var/lib/mysql/tmp розділ tmpfs розміром 4 Gb, виконавши наступні кроки:
- Створюємо папку для зберігання тимчасових файлів, наприклад: /var/lib/mysql/tmp
- Змінюємо власника папки та групу на mysql
- З'ясовуємо ідентифікатор користувача (uid) та групи (gid) mysql
- До файлу fstab додаємо запис
- Монтуємо новий tmpfs розділ
- Редагуємо файл конфігурації MySQL /etc/mysql/my.cnf
- Перезапускаємо MySQL
пн, 12/03/2012 - 09:11
Ніколи не думав, що це так просто. Дякую, Романе, за корисну статтю.
пн, 12/03/2012 - 09:13
Радий, що виявилосякорисно. Якщо чесно, я сам трохи не очікував. Хотів по-іншому робити.
Роман (не перевірено)
ср, 07/17/2013 - 06:53
6. Чи редагуємо файл конфігурації MySQL /etc/mysql/my.cnf tmpdir=/var/lib/mysqltmp помилка? tmpdir=/var/lib/mysql/tmp
Пт, 07/19/2013 - 06:38
Відповідь на 6. Редагуємо файл від Роман (не перевірено)
Так, опечатався. дякую, виправив
Serge (не перевірено)
Пт, 05/29/2015 - 14:24
Пт, 05/29/2015 - 14:29
Відповідь на Дякую за вдалий хінт, але від Serge (не перевірено)
Мені здається, що коректніше було б зробити масовий select, сумніваюся, що для insert mysql буде використовувати tmp.
Serge (не перевірено)
Пт, 05/29/2015 - 18:11
Яким (не перевірено)
Чт, 09/17/2015 - 13:58
Дякую. Перенесення mysql директорії tmpdir в оперативну пам'ять дозволяє вирішити проблему з journald, коли журналування файлової системи вішає цю саму файлову систему. Як з'ясувалося, високе навантаження на journald породжує якраз mysql великою кількістю читань та запису в директорію tmpdir
Дмитро (не перевірено)
вт, 10/11/2016 - 08:14
А підкажіть чому відразу ж після створення ці файли видаляються, чи можна якось це відключити?
Андрій (не перевірено)
Чт, 02/16/2017 - 08:54
а як можна закешувати більше пам'яті? у мене кешується лише 4 кілобіт
сб, 02/25/2017 - 11:52
Відповідь на як можна закешувати… від Андрій (не перевірено)
Paula (не перевірено)
ср, 05/31/2017 - 16:44
Доброго дня, трохи вище Serge вже порушував це питання, але все-таки - як переконатися в тому, що все працює як належить?(зайнято 0), у свою чергу,mysqltuner показує, що тимчасові таблиці створюються.
чт, 06/08/2017 - 06:28
Відповідь на Здрастуйте,… від Paula (не перевірено)