Максимальное использование памяти 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 .