Тюнінг продуктивності MySQL: налаштування InnoDB, кешів та запитів

Тюнінг продуктивності MySQL: налаштування InnoDB, кешів та запитів

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Тюнінг продуктивності MySQL: налаштування InnoDB, кешів та запитів
Складний
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Тюнінг продуктивності MySQL: налаштування InnoDB, кешів та запитів

Уявіть: інтернет-магазин на 50 000 замовлень на день, MySQL з дефолтною конфігурацією — innodb_buffer_pool_size = 128M, увімкнений query_cache, max_connections = 151. Результат: аварії кожні 2 години, p95 latency 450 мс. Після тюнінгу — 85 мс, у 5,3 рази швидше. Наші інженери з 10-річним досвідом і 500+ проектами налаштовують InnoDB, кеші та запити під ваше навантаження. p95 latency знизився з 450 мс до 85 мс — в 5,3 рази. Правильне налаштування buffer pool підвищує hit rate до 99,4%. В одному проекті продуктивність запису зросла в 3 рази після збільшення redo log.

Як налаштувати InnoDB buffer pool?

InnoDB — основний двигун MySQL. Його buffer pool — головний кеш сторінок даних та індексів. Як зазначено в MySQL Performance Tuning Guide, він має займати 70–80% RAM на виділеному сервері. Приклад конфігурації для сервера з 32 ГБ RAM:

[mysqld] innodb_buffer_pool_size = 24G innodb_buffer_pool_instances = 24 innodb_buffer_pool_dump_at_shutdown = ON innodb_buffer_pool_load_at_startup = ON innodb_log_file_size = 1G innodb_log_files_in_group = 2 innodb_log_buffer_size = 64M innodb_flush_method = O_DIRECT innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 innodb_adaptive_flushing = ON innodb_use_native_aio = ON max_connections = 500 thread_cache_size = 50 thread_stack = 256K wait_timeout = 300 open_files_limit = 65535 table_open_cache = 4000 table_definition_cache = 2000 

Перевірка ефективності через hit rate:

SELECT (1 - (SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_reads') / (SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_read_requests')) * 100 AS hit_rate_pct; 

Ціль: hit rate >99%. Якщо нижче — збільшуємо buffer pool або оптимізуємо індекси. У типовому проекті hit rate підіймається з 87% до 99.4%.

Чому query cache потрібно вимкнути?

query_cache в MySQL 5.7 і нижче — це м'ютекс на весь кеш при будь-якому записі. На high-load сайтах до 40% часу CPU йде на query_cache_mutex. У MySQL 8.0 його видалили. Кешування на рівні застосунку (Redis, Memcached) — правильне рішення. Вимкнути в конфігу:

query_cache_type = 0 query_cache_size = 0 

Як знаходити та оптимізувати повільні запити?

Увімкніть slow query log і аналізуйте через pt-query-digest. Типові проблеми: full table scan, відсутність індексів, сортування без індексу. У slow log потрапляють запити, що виконуються довше 1 секунди.

slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_queries_not_using_indexes = ON min_examined_row_limit = 100 

Команда для аналізу:

pt-query-digest /var/log/mysql/slow.log --limit 20 --output report > /tmp/slow_report.txt 

Використовуйте EXPLAIN FORMAT=JSON для аналізу. Шукайте "access_type": "ALL" (full table scan) і "using_filesort": true. Створіть складовий індекс, наприклад: ALTER TABLE orders ADD INDEX idx_status_date (status, created_at DESC);.

Як налаштувати redo log для максимальної продуктивності запису?

Збільшення innodb_log_file_size (або innodb_redo_log_capacity в MySQL 8.0) зменшує частоту checkpoint, що підвищує пропускну здатність запису. На high-load сайтах це знижує затримки та збільшує throughput транзакцій. В одному з проектів після збільшення log file size з 256M до 1G продуктивність запису зросла в 3 рази.

Порівняння до і після тюнінгу

Параметр До тюнінгу Після тюнінгу
innodb_buffer_pool_size 128M 24G
Hit rate 87% 99.4%
Query cache Увімкнено (40% CPU на mutex) Вимкнено
Slow queries >1s / min 300 5
p95 latency API 450 ms 85 ms
Тип запиту До тюнінгу Після тюнінгу
SELECT heavy join >1M rows 12 с 0,7 с
INSERT з тригерами 200 оп/с 1 200 оп/с

Процес тюнінгу: як ми працюємо

  • Аудит конфігурації: перевірка my.cnf, buffer pool, redo log, буферів, I/O. Фіксуємо поточні показники через Performance Schema.
  • Аналіз slow log: завантажуємо логи за тиждень, прогоняємо через pt-query-digest, вибираємо топ-20 за часом. Для кожного будуємо EXPLAIN.
  • Налаштування параметрів: зміна buffer pool, redo log, буферів, підключення, I/O. Перезапуск MySQL у вікно обслуговування.
  • Оптимізація запитів: створення/доробка індексів, переписування важких JOIN, додавання кешування.
  • Моніторинг: розгортання Performance Schema, налаштування сповіщень по slow queries і hit rate. Документація зі звітом.

Що входить у роботу

  • Аудит конфігурації: перевірка mysql config, buffer pool, redo log, буферів, I/O.
  • Аналіз slow log: виявлення топ-20 важких запитів, рекомендації щодо індексів.
  • Налаштування продуктивності: зміна параметрів, оптимізація індексів, реструктуризація запитів.
  • Моніторинг: розгортання Performance Schema, скрипти для регулярного контролю.
  • Документація: звіт зі змінами, обґрунтуванням і результатами замірів.
  • Підтримка: 2 тижні після тюнінгу для коригування.

Економія від тюнінгу

У середньому клієнти заощаджують суттєву суму на місяць після оптимізації. Це не лише зниження витрат на інфраструктуру, але й зростання швидкості роботи застосунку, що прямо впливає на конверсію. Наші інженери розрахують економію для вашого проекту персонально.

Для отримання аналогічного результату зв'яжіться з нами — ми проведемо тюнінг вашого MySQL. Замовте оптимізацію — ми гарантуємо вимірний результат. Отримайте консультацію: ми оцінимо ваш проект за 1-2 дні.