Максимальное использование памяти 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 (они знают быстро), он также включает собственный Drop- в замен InnoDB, называется XtraDB.
См. Мою суть для настройки percona-server (и -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 и т. Д. У этих ребят многолетний опыт.
Еще один отличный ресурс - это , конечно же, planet-mysql .