Цікаво, що в 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 монтів.