Максимальне використання пам'яті MySQL дуже залежить від обладнання, налаштувань та самої бази даних.
Апаратне обладнання
Обладнання є очевидною частиною. Чим більше оперативної пам'яті, тим швидше диски ftw . Не вірте тим щомісячним чи тижневим новинним листам. MySQL не масштабується лінійно - навіть на апаратному забезпеченні Oracle. Це трохи хитріше за це.
Суть полягає в тому : немає Загального правила для того , що рекомендую для вашої установки MySQL. Все залежить від поточного використання або прогнозів.
Налаштування та база даних
MySQL пропонує незліченну кількість змінних і комутаторів для оптимізації його поведінки. Якщо у вас виникли проблеми, вам дійсно потрібно сісти і прочитати посібник (f'ing).
Щодо бази даних - кілька важливих обмежень:
- стіл двигун (
InnoDB
, MyISAM
, ...)
- розмір
- індекси
- використання
Більшість порад MySQL щодо stackoverflow розповість про 5-8 так званих важливих налаштувань. По-перше, не всі вони мають значення - наприклад, виділяти багато ресурсів InnoDB та не використовувати InnoDB не має великого сенсу, оскільки ці ресурси витрачаються даремно.
Або - багато людей пропонують збільшити max_connection
змінну - ну, мало хто їх знає, це також означає, що MySQL виділить більше ресурсів для задоволення цих потреб, max_connections
- якщо це буде потрібно. Більш очевидним рішенням може бути закриття підключення до бази даних у вашому DBAL або зменшення wait_timeout
для звільнення цих потоків.
Якщо ви спіймаєте мій дрейф - насправді багато, багато чого читати і вчитися.
Двигуни
Настільні двигуни є досить важливим рішенням, багато людей забувають про тих, хто на ранніх стадіях, а потім раптом опиняються в боротьбі зі MyISAM
столом розміром 30 ГБ, який замикає і блокує їхнє все застосування.
Я не хочу сказати, що MyISAM відстійний , але InnoDB
його можна налаштувати, щоб реагувати майже або майже так само швидко, MyISAM
і пропонує таке, як блокування рядків, UPDATE
тоді як MyISAM
блокує всю таблицю, коли вона написана.
Якщо ви можете вільно запускати MySQL на власній інфраструктурі, ви також можете перевірити сервер percona, оскільки серед багатьох внесків компаній, таких як Facebook та Google (вони знають швидко), він також включає власну програму Percona в заміну на InnoDB
, наз XtraDB
.
Перегляньте мою суть щодо налаштування percona-сервера (та -client) (на Ubuntu): http://gist.github.com/637669
Розмір
Розмір бази даних дуже-дуже важливий - вірите чи ні, більшість людей на Intarwebs ніколи не обробляють великі і пишуть інтенсивні установки MySQL, але такі дійсно існують. Деякі люди тролять і скажуть щось на кшталт "Використовуйте PostgreSQL !!! 111", але давайте ігноруємо їх поки.
Суть полягає в тому, що: залежно від розміру, рішення про обладнання повинно прийматися. Насправді не можна змусити базу даних 80 Гб швидко працювати на 1 ГБ оперативної пам’яті.
Індекси
Це не так: тим більше, тим веселіше. Потрібно встановити лише необхідні індекси та перевірити їх використання EXPLAIN
. Додайте до цього, що MySQL EXPLAIN
дійсно обмежений, але це початок.
Пропоновані конфігурації
Про ці my-large.cnf
та my-medium.cnf
файли - я навіть не знаю, для кого вони були написані. Згорніть своє.
Налаштування грунтовки
Чудовий початок - тюнінг-грунтовка . Це bash-скрипт (підказка: вам знадобиться linux), який приймає висновок SHOW VARIABLES
та SHOW STATUS
перетворює його на сподівання корисну рекомендацію. Якщо ваш сервер працює деякий час, рекомендація буде кращою, оскільки будуть дані, на яких вони будуть базуватися.
Тюнінг-праймер - це не чарівний соус. Ви все ще повинні прочитати всі змінні, які він пропонує змінити.
Читання
Мені дуже подобається рекомендувати mysqlperformanceblog . Це чудовий ресурс для всіх видів порад, пов’язаних з MySQL. І це не лише MySQL, вони також багато знають про правильне обладнання або рекомендують налаштування для AWS тощо. Ці хлопці мають роки та багаторічний досвід.
Ще один чудовий ресурс - це планета-mysql , звичайно.