Як налаштувати MySQL для великого навантаження InnoDB?


39

Припускаючи виробничу OLTP-систему з переважно InnoDB-таблицями

  • Які поширені симптоми неправильно налаштованої / неправильно налаштованої системи?
  • Які параметри конфігурації ти найчастіше змінюєш за умовчанням?
  • Як ви виявляєте потенційні вузькі місця до виникнення проблеми?
  • Як розпізнати та вирішити активні проблеми?

Будемо statusвдячні будь-які анекдоти, що деталізують конкретні змінні та діагностику.


2
Це питання жахливо широке. Чи можете ви розділити його на 4 запитання? (І навіть ваші запитані запитання неймовірно широкі. Чи можете ви їх
проінформувати

Відповіді:


16

Ось хороша стаття про настройку InnoDB від Дженні Чен Sun від Sun - вона веде багато блогів про MySQL, деякі з них є специфічними для Solaris (наприклад, використовуючи DTrace ), але весь блог сповнений цікавих примх.


4
Хто така Дженні Чен?
Pacerier

19

Цікаво, що в MySQL 5.5 тепер ви можете мати кілька пулів буфера innodb.

Параметри, які вас цікавлять, є

Приблизно через місяць я планую реалізувати 112 буферних пулів innodb для клієнта. Я дам вам знати, як це пішло.

ОНОВЛЕННЯ 2011-02-27 21:57 EDT

Я дізнався, що максимальне значення для innodb_buffer_pool_instance - це 64, я вирішив налаштувати 144 ГБ, тому встановив innodb_buffer_pool_instance на 18, а innodb_buffer_pool_size - на 8. Зараз завантажую сервер 450 ГБ

ОНОВЛЕННЯ 2011-04-28 13:44 EDT

Я випробував кілька пулів буфера InnoDB. Занадто багато було замикання різьби та суперечок. Я перейшов на єдиний буферний пул об'ємом 162 ГБ + налаштування read_io_threads і write_io_threads до 64 (максимальне значення). Це працювало набагато краще.

ОНОВЛЕННЯ 2012-07-03 17:27 EDT

Я дізнався щось дивовижне про MySQL. Якщо ви виділите єдиний монолітний буфер InnoDB, більший за загальний встановлений, поділений на кількість фізичних процесорів , ви будете спонукати ОС до регулярних інтервалів заміни пам'яті через повний пул InnoDB Buffer. Параметр MySQL 5.5, відомий як innodb_buffer_pool_in вещества, може використовуватися для розділення буферного пулу. Вчора я правильно реалізував це для клієнта, про якого я говорив у своїй відповіді минулого року. У мене ще є 162 Гб для буферного басейну клієнта. Я встановив параметр innodb_buffer_pool_instance сервера на 2, оскільки кожен сервер БД є подвійним шестигранником. Я думав встановити його на 12, але тоді колега показав мені блог від Джеремі Коула на MySQL та Swappiness. Прочитавши його, я застосував це відразу на практиці для свого клієнта. Я виконував цю команду

numactl --hardware

Я бачив відображення 192 ГБ оперативної пам’яті сервера як 96 ГБ на кожне фізичне ядро. Тому я встановив innodb_buffer_pool_instance на 2. Речі зараз добре виглядають. Я оновлю свою відповідь, щоб побачити, як це впливає на обмін пам'яті протягом наступних 2 монтів.


привіт @RolandoMySQLDBA, з блогів Джеремі я не можу знайти жодного зв’язку або висновку, що встановлений екземпляр innodb дорівнює кількості фізичних процесорів вирішить проблему заміни. Чи кілька екземплярів innodb автоматично балансує між вузлами пам’яті, не встановлюючи numactl --interleave = all, промиваючи буферні кеші Linux або змушуючи ОС виділяти буферний пул InnoDB?
Вень Рен

@Rolando, Ніцца 2 x 100 ГБ. Який це клієнт?
Пейсьєр

Я подумав, що "екземпляри" реалізовані таким чином: (номер блоку) MOD (число екземплярів) -> (який екземпляр поставити блок). Це не має нічого спільного з NUMA.
Рік Джеймс


4

По-перше, збільште розмір пулу InnoDB за замовчуванням у my.cnf (я вважаю, що він за замовчуванням до 8 МБ)

Ви, ймовірно, повинні встановити це 75% вашого розміру оперативної пам’яті (загалом)


-1

Які параметри конфігурації ти найчастіше змінюєш за умовчанням?

конфігурація пам'яті


Чи можете ви надати більш пояснювальну відповідь? Що про них ти міняєш? Чому ви вносите ці зміни? Які очікувані вами спостереження після зазначених змін? Як ви знаєте, на що їх змінити?
jcolebrand

З конфігурації mysql конфігурація готується для швидкого налаштування таблиць myisam (оскільки більшість користувачів користується цим способом), крім того, щоб мати добре оптимізований сервер, ви повинні вибрати "первинний" двигун для використання (innodb або mysql) як його справді цілком важко налаштувати базу даних для високої продуктивності для стенд-двигунів, у mysql є окремі буфери для движок myisam та innodb
sbczk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.