Продолжаю эксперименты с параметром PostgreSQL под названием shared_buffers. Ранее я уже провел большой эксперимент с shared_buffers, в котором было много действий, но можно наглядно посмотреть что будет, если в системе не будет хватать выставленного параметра shared_buffers.
А сейчас посмотрим что будет, если поставить слишком большое или слишком маленькое значение данного параметра.
Выделить много под shared_buffers:
У меня PostgreSQL крутится на виртуальной машине. Ей я выделил 1 Гб оперативной памяти. Удалось выделить под shared_buffers 1389 МБ (а иногда – даже больше, пока не понял, почему), и PostgreSQL с таким параметром стартовал и работает.
Почему? Посмотрел использование свопа (у меня он тоже 1024 Мб) – вроде как из выделенного на него используется чуть более 300 Мб, но это прямо в данный момент. Скорее всего, под shared_buffers можно выделить объем ОЗУ + Swap, но это нужно проверять точнее. Если читать инфу об ошибке при рестарте PostgreSQL, там про swap есть информация. Но её я буду проверять в следующий раз.
Если выделить под shared_buffers больше, то у меня сервер не стартует и выдает вот такую ошибку: could not map anonymous shared memory: cannot allocate memory. И подсказка появляется: «This error usually means that PostgreSQL’s request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size, reduce PostgreSQL’s shared memory usage, perhaps by reducing shared_buffers or max_connections».
Повторюсь, с этой ошибкой буду разбираться в следующий раз.
Выделить мало под shared_buffers:
Выделил под shared_buffers 120 кБ (15 страниц по 8 КБ, меньше разрешенного минимального значения). При рестарте появляется ошибка: «15 is outside the valid range for parameter “shared_buffers”».
В принципе, тут всё понятно и ожидаемо.
С первой ошибкой (когда не получается выделить много shared_buffers) можно будет поразбираться подробнее, так как довольно интересно – там всё нужное есть, но память не выделяется.
Leave a Reply