У меня MySQL работает на 32-битном RHEL. Сам сервер имеет 4 ГБ общей памяти, из которых 2 ГБ выделены для MySQL.
Я хотел бы знать максимальный объем памяти, который я могу поместить в коробку, и сколько из этого я могу выделить MySQL.
Я слышал как 2 ГБ, так и 4 ГБ как ограничение на процесс в 32-разрядной ОС ...
В конечном итоге я хотел бы знать, могу ли я увеличить объем памяти для MySQL без обновления до 64-разрядной ОС.
Это зависит от вашего ядра и конфигурации. Обычно это 2 ГБ или 3 ГБ.
Однако в самом приложении может быть установлен нижний предел. Некоторые приложения / службы 32bti не будут использовать более 2 ГБ, даже если ОС позволит им, потому что их собственное управление внутренней памятью использует (или позволяет) 32-битные целые числа со знаком для всего.
Если ваш ЦП, контроллер памяти, ОС и приложение поддерживают PAE, это позволит использовать больше оперативной памяти для одного процесса. PAE поддерживается ядром Linux, и нет сомнений в том, что в репозиториях RHEL есть ядра предварительной сборки, в которых он включен (он не включен в большинстве ядер по умолчанию, так как это влияет на производительность) - я не знаю, будет ли поддержка MySQL хотя для этого.
Если вы используете более старое ядро, возможно, стоит изучить конфигурацию карты памяти - в то время как большинство новых ядер по умолчанию используют разделение 1G / 3G между ядром и отображенным адресным пространством пользовательского пространства внутри каждого процесса, в более старые времена (когда машины с ОЗУ близки к ограничение 32-битного адресного пространства было практически неслыханным) разделение 2G / 2G было по умолчанию, но могло быть изменено, если вам нужен был 1G / 3G.
Не углубляясь в тему, я предполагаю, что (если вы не используете более старое ядро, и это то, что накладывает ограничение на 2G, а не на 3G) MySQL не будет использовать более 2G без обновления до 64-разрядной версии. компилировать. Однако дополнительная оперативная память вряд ли будет потрачена впустую - ядро будет использовать ее для кеша / буферов, поэтому, в то время как MySQL, использующий ее напрямую, будет намного более эффективным (поскольку будет гораздо меньше случаев, когда кеш MySQL и кеш ОС содержат одни и те же блоки данных) он не будет простаивать, поэтому будет заметна некоторая выгода.
Большинство современных дистрибутивов и процессоров поддерживают PAE, набор инструкций Intel, позволяющий адресовать память за пределами 32-разрядного ограничения. PAE позволяет процессору обращаться к максимуму 64 ГБ ОЗУ. PAE имеет дополнительную нагрузку на ЦП.
32-разрядная версия Linux имеет ограничение на 3 ГБ для каждого процесса даже с PAE. Обычно ядро резервирует примерно 1 ГБ.
MySQL - это демон одного процесса. Таким образом, он не сможет обращаться за пределами 32-битного ограничения даже с PAE.
Некоторые полезные ссылки:
Я думаю, что каждый процесс может видеть (адресовать) 4 ГБ, но 2 ГБ из них - это пространство ядра и не могут быть заполнены данными приложения.
Поэтому я предполагаю, что MySQL потенциально может использовать 2 ГБ, умноженное на количество экземпляров MySQL, ГБ общей памяти (физическая память и пространство подкачки).