Category: MySQL - ingvar @ 10:25
Як відомо, при Ком InnoDB записує дані не відразу в файли даних, а спочатку записує зміни в innodb_log_file. Справа в тому що записати дані безпосередньо в таблицю - істотно більш дорога операція, ніж записати зміни в бінарний лог.
Ведення innodb_log_file дозволяє проводити оптимізацію i / o: записувати дані великими послідовними шматками, а також більш швидше обслуговувати клієнтів (клієнт швидко зробив Комміт, а дані в табличний простір записуються в тлі). Тому чим більше файл, тим більше можливості для InnoDB оптимізувати введення / виведення. В даний час сумарний розмір innodb_log_file обмежений 4 Гб, що більш ніж достатньо для більшості випадків.
Як же визначити найбільш оптимальний розмір?
Виконайте ці команди під час найбільш інтенсивного навантаження вашого сервера:
Зверніть увагу на номер log sequence. Це загальна кількість байт записаних в лог. Так що ми можемо дізнатися скільки Мб було записано за хвилину. (Ці команди будуть працювати в будь-якій версії MySQL, починаючи з 5.0 можна скористатися метрикою Innodb_os_log_written з SHOW GLOBAL STATUS.)
Хорошим правилом буде установка такого розміру, щоб там могли вміститися близько години логів. Тоді InnoDB зможе досить ефективно спланувати записи в файли даних, і в той же час це хороший компросс для швидкості запуску. Округляем до 128 Мб і оскільки за замовчуванням файлів два встановлюємо innodb_log_file_size = 64M.
Чи не занадто це мало? Можливо. Часто я бачу розміри балок транзакцій в кілька гігабайт, але зазвичай це помилка. Сервер який я використовував для вимірювань - великий і робить багато роботи, це не іграшка для тестів. Розмір лог файлів не варто залишати в 5 Мб за замовчуванням, але часто не потрібно встановлювати їх настільки великими, як ви можете думати.
Якщо скориставшись цим парвілом ви получулі цифру в кілька гігабайн, значить мабуть ви дуже активно пишете в базу. В цьому випадку ви можете спробувати встановити розмір трохи менше, щоб мінімізувати час відновлення. Але врахуйте: час відновлення залежить не тільки від розміру балки транзцакцій, але і від кількості записів в ньому. Якщо у вас багато великих транзакцій, можна встановити розмір побільше. І навпаки: якщо у вас багато маленьких транзакцій, варто встановити розмір трохи менше.
У будь-якому випадків, цифра полученая цим правилом - хороша відправна точка.