Ответ 1
Максимальное использование памяти в MySQL очень зависит от аппаратного обеспечения, настроек и самой базы данных.
Оборудование
Аппаратное обеспечение является очевидной частью. Чем больше RAM, тем веселее, быстрее диски 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 server, поскольку среди много вкладов от таких компаний, как Facebook и Google (они знают быстро), также включает собственную замену на Percona для InnoDB
, называемую XtraDB
.
См. мой gist для настройки 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 script (подсказка: вам понадобится linux), который выводит результат SHOW VARIABLES
и SHOW STATUS
и заверяет его в надежную полезную рекомендацию. Если ваш сервер работает некоторое время, рекомендация будет лучше, так как будут данные для их базы.
Однако, тюнинг-праймер не волшебный соус. Вы все равно должны прочитать все переменные, которые он предлагает изменить.
Чтение
Мне очень нравится рекомендовать mysqlperformanceblog. Это отличный ресурс для всех видов связанных с MySQL советов. И это не только MySQL, они также много знают о правильном оборудовании или рекомендуют установки для AWS и т.д. Эти ребята имеют многолетний опыт.
Другим важным ресурсом является planet-mysql, конечно.