Прискорюємо MySQL

У роботі періодично стикаюся з повільними сайтами Drupal, і гальма дуже часто викликані повільним виконанням запитів до Mysql. Причини бувають різні, але найчастіше повільне виконання запитів викликане тим, що з виконанні запиту MySQL змушене використовувати тимчасові таблиці на диску. Для цього використовується каталог, заданий у змінній tmpdir файлі конфігурації my.cnf. На мій погляд, правильним рішенням в таких ситуаціях є оптимізація бази даних (використання типів полів, що найбільш підходять під вміст, правильне налаштування ідексів, і побудова коректних запитів до бази, що враховують індекси в базі). Але також ми можемо допомогти MySQL якщо перемістити ці тимчасові таблиці в оперативну пам'ять (таке рішення підходить для серверів з великою кількістю оперативної пам'яті), що дозволить швидше виконувати операції пов'язані з використанням тимчасових таблиць, за рахунок економії на операціях запису і читання з диска, так як все робитиметься в оперативній пам'яті. Для перенесення папки tmpdir в оперативну пам'ять ми підключимо до папки /var/lib/mysql/tmp розділ tmpfs розміром 4 Gb, виконавши наступні кроки:

  1. Створюємо папку для зберігання тимчасових файлів, наприклад: /var/lib/mysql/tmp
  2. Змінюємо власника папки та групу на mysql
  3. З'ясовуємо ідентифікатор користувача (uid) та групи (gid) mysql
  4. До файлу fstab додаємо запис
  5. Монтуємо новий tmpfs розділ
  6. Редагуємо файл конфігурації MySQL /etc/mysql/my.cnf
  7. Перезапускаємо 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 (не перевірено)