Можно ли запустить сервер Oracle без подкачки?

Официальные документы Oracle говорят, что для машины с более чем 16 ГБ ОЗУ нам необходимо выделить 16 ГБ подкачки.

Наши серверы RHEL 7 и имеют 256 ГБ ОЗУ.

Администраторы баз данных не хотят видеть системный обмен, поэтому они хотят, чтобы мы очень агрессивно отслеживали 16-гигабайтный обмен.

Я предложил удвоить объем оперативной памяти до 512 ГБ (расходы утверждены) и отключить обмен. Однако это противоречит рекомендации Oracle о наличии 16 ГБ ОЗУ, хотя мы удваиваем объем ОЗУ.

Честно говоря, я не понимаю, как имеет смысл иметь 3% подкачки или почему, если я добавляю больше оперативной памяти, чем у нас было подкачка, мы должны сохранить своп.

Итак, есть ли хорошие аргументы, которые я могу использовать, чтобы оправдать запуск Oracle без подкачки?

PS Единственная причина, по которой я упоминаю удвоение ОЗУ, - это продемонстрировать нелепость аргумента, с которым мне трудно спорить. Что я действительно ищу, так это аргументы в пользу отключения свопа.

4 ответа

Решение

Отключение свопа - хорошая идея, если

  • Ваше программное обеспечение может корректно работать с нехваткой памяти или ограничивать себя, чтобы избежать ситуаций с OOM
  • постоянная производительность имеет решающее значение (когда ваша система меняет время ожидания, увеличивается задержка, которая может быть достаточно плохой, чтобы сделать ее бесполезной для многих приложений)

Подобные вещи часто случаются с базами данных. Я вижу это больше с базами данных noSQL, но реляционные базы данных могут столкнуться с той же проблемой.

В ОС нет ничего, что требовало бы замены, чтобы быть там. Linux справляется с этим довольно изящно, убивая последний процесс, который запрашивал память. Вы не хотите переходить к этому моменту, поэтому убедитесь, что вы настроили Oracle на использование только ~90% памяти, чтобы оставалось некоторое количество для системных демонов и поля для ошибок. "Свободная" память также используется для буферизации дискового ввода-вывода, что является огромным выигрышем в производительности, поэтому попытка потреблять больше памяти самой базой данных в конечном итоге приведет к снижению общей производительности системы, что приведет к обратным результатам.

Даже с системами, которые имеют долю памяти от вопроса, является ли приложение базой данных или кешем или подобной системой, я бы по умолчанию не поменял местами на этом этапе.

Власти

Так что вы не просто полагаетесь на мое слово:

Cassandra

Datastax объясняет для Кассандры:

Вы должны полностью отключить своп. Невыполнение этого требования может серьезно снизить производительность. Поскольку Cassandra имеет несколько реплик и прозрачное переключение при сбое, предпочтительно, чтобы реплика была убита немедленно, когда памяти мало, а не переходила в режим подкачки. Это позволяет немедленно перенаправлять трафик на работающую реплику, вместо того чтобы продолжать попадать на реплику с высокой задержкой из-за подкачки. Если в вашей системе много DRAM, перестановка по-прежнему значительно снижает производительность, поскольку операционная система выменяет исполняемый код, так что для кэширования дисков доступно больше DRAM.

Riak

Башо объясняет Риаку, что вы должны:

В идеале, вы должны отключить обмен, чтобы гарантировать, что страницы процесса Riak не поменяются местами. Отключение подкачки позволит Riak аварийно завершить работу в ситуациях, когда ему не хватает памяти. Это оставит файл аварийного дампа с именем erl_crash.dump, в /var/log/riak каталог, который можно использовать для определения причины использования памяти.

MySQL

Перкона сидит на заборе и дает полезные предостережения для обеих сторон вопроса. MariaDB не согласен с отключением свопа:

Хотя некоторые вообще отключают подкачку, и вы, конечно же, хотите избежать использования процессов базы данных, разумно оставить некоторое пространство подкачки, чтобы, по крайней мере, позволить ядру грациозно перевернуться в случае резкого скачка. Наличие экстренного обмена, по крайней мере, дает вам возможность убить все запущенные процессы.

ServerFault

Хорошо полученный ответ здесь включает в себя:

Лично я нахожу систему подкачки хуже, чем сбойная система. В случае сбоя системы резервный сервер запускается гораздо быстрее. И в активно-активной (или в настройке с балансировкой нагрузки) сбойная система будет выведена из ротации гораздо раньше. Снова победа для системы без обмена.

Этот ответ имеет 22 голосов сегодня и ему 4 года. Вы также можете увидеть некоторые другие ответы, восхваляющие значение swap, но нет никаких признаков того, что они используют базы данных. У них тоже не так много голосов. :)

Кальмар

Хотя они явно не рекомендуют отключать своп, ребята из Squid говорят:

Squid имеет тенденцию быть чем-то вроде памяти. Он использует память для множества разных вещей, некоторые из которых легче контролировать, чем другие. Использование памяти важно, потому что, если размер процесса Squid превышает объем оперативной памяти вашей системы, некоторые фрагменты процесса должны быть временно перенесены на диск. Обмен может также произойти, если в той же системе работают другие приложения, требующие памяти. Обмен приводит к очень быстрому снижению производительности Squid.

Это то, что вы не хотите случиться с вашей базой данных.

Redis

В то время как Redis официально рекомендует swap, пользователи не покупают его:

Сначала отключите swap - Redis и swap не смешиваются легко, и это, безусловно, может привести к замедлению.

Hadoop

Как видно в этом ответе с наибольшим количеством голосов в сообществе hortonworks:

Для подчиненных / рабочих / хостов данных, которые имеют только распределенные сервисы, вы можете отключить своп. С распределенными сервисами предпочтительнее позволить процессу / хосту быть уничтоженным, а не подкачкой. Уничтожение этого процесса или хоста не должно влиять на доступность кластера. Сказано по-другому: вы хотите "быстро потерпеть неудачу", а не "медленно ухудшаться".

[....]

Для мастеров своп также часто отключается, хотя это не установленное правило от Hortonworks, и я предполагаю, что будут некоторые обсуждения / разногласия. С мастерами можно обращаться так же, как с мастерами в других средах, отличных от Hadoop.

Опасность отключения свопа на мастерах заключается в том, что событие OOM (нехватка памяти) может повлиять на доступность кластера. Но это все равно произойдет даже при настроенном свопе, это займет немного больше времени. Хорошей практикой для администраторов и операторов было бы следить за доступностью ОЗУ, а затем исправлять любые проблемы, прежде чем закончится ее использование. Таким образом, поддержание доступности без ущерба для производительности. Тогда обмен не нужен.

Мне это нравится, потому что речь идет о Java-приложении, но он приходит ко многим из тех же выводов, которые упоминались выше о базах данных. Также упоминается мониторинг, который очень полезен при настройке высокопроизводительных приложений. Если у вас нет цифр для сравнения, все основано на чувствах, которые сложнее сравнивать. Создавайте графики для каждого измеримого показателя - задержки на уровне приложения и пропускной способности для графиков ЦП, дисков, памяти и сети. Они предоставляют основную часть реальных данных, по которым вам необходимо принимать решения.

Почему бы не оставить разумный объем подкачки для неиспользуемых страниц и изменить давление в кеше vfs, чтобы поменять местами подкачку только в случае условия OOM. Также вы можете прикрепить процессы оракула к основной памяти, чтобы они никогда не касались диска. Это удовлетворяет базу данных, на которую не влияют удары по медленным системам ввода-вывода, а также позволяет освободить мусор из основной памяти для использования базой данных, а также буферами и кешем. Это лучшее из обоих миров.

У Алекса в Linux есть интересное прочтение на эту тему: "Своп против свопа" http://www.alexonlinux.com/swap-vs-no-swap

Суть в том, что без свопа:

  • Ваша система будет менее стабильной.
  • Скорость доступа к диску в вашей системе будет ниже, чем в системе с разделом подкачки. Кроме того, скорость доступа к диску будет со временем падать.

Эта тема всплывает часто. Своп - это просто расширение оперативной памяти, так что давайте купим больше оперативной памяти, верно? Неправильно. Настройка с 16 ГБ подкачки и 512 ГБ ОЗУ имеет идеальный экономический смысл. Позволь мне объяснить.

Если вы хорошо знаете основное программное обеспечение, вы знаете, сколько "глупой" памяти он занимает достаточно точно. Какая "глупая" память? Различный код и данные, которые первоначально отображаются в ОЗУ, но больше никогда не понадобятся. То есть производительность, которую видит пользователь, никогда не пострадает, потому что этот материал не всегда доступен в памяти.

Вместо того, чтобы исправлять программное обеспечение, вы можете просто дать ему тот объем свопа, но не больше этого количества. Да, пусть он использует 100% своп. В этом-то и дело. Не увеличивайте своп, иначе вы рискуете, что некоторые критические вещи случайно окажутся там. Документируйте это, чтобы люди не сходили с ума, увидев 100% использование свопа. В случае Oracle эта сумма составляет 16 ГиБ, и я могу судить по своему опыту, что она будет использоваться даже на блоке 700 ГиБ, и вы не почувствуете скачка, влияющего на производительность.

В результате вы получаете 16 ГБ ОЗУ, чтобы выполнять реальную работу и приносить пользу своим пользователям. По состоянию на 2017 год это снижает стоимость вашей организации примерно на 50 долларов США. Если ваш сервер имеет 256 ГБ ОЗУ, вы настраиваете своп и экономите 50 долларов. Если ваш сервер имеет 10 ТБ ОЗУ, вы настраиваете своп и экономите... 50 долларов. Увидеть? Все тот же.

В настоящее время всегда безопасно иметь нулевой своп. Это просто стоит вам этих маленьких 50 долларов, вот и все.

Если ваша организация не в состоянии справиться со 100% использованным свопом (например, отдельной группой мониторинга и т. Д.), Не делайте этого. Если вы заставите кого-то задуматься над этой проблемой, вы уже потратили впустую 50 долларов своего времени.

Некоторые производители действительно имеют нулевую потерю памяти. И некоторые поставщики не чувствуют себя достаточно уверенно, чтобы оценить количество "глупых" распределений, поэтому они говорят "нулевой своп", чтобы избежать неизвестных проблем, просто чтобы сэкономить кучу ваших долларов. Тоже норм! Я бы просто поверил поставщику в этом, они поддерживают установки, они знают свое дело.

Другие вопросы по тегам