PostgreSQL. work_mem

Следующий параметр PostgreSQL для изучения – это work_mem.

Конфигурационные параметры PostgreSQL лежат в каталоге с данными (PGDATA) в файле postgresql.conf.

  • Параметр: work_mem
  • Раздел: Использование ресурсов / Память
  • Изменение: user, пользователи могут менять значение для своего сеанса (командой SET)
  • Принимаемое значение: integer
  • Минимальное значение: 4096 кБ
  • Максимальное значение: 2097151 кБ (почти 2 ГБ)
  • Значение по умолчанию: 4096 кБ
  • Особенность: Пользователи могут устанавливать данное значение прямо в сеансе с помощью команды:
    • SET work_mem=’1MB’.

И можно установить значение для текущей транзакции:

  • SET LOCAL work_mem = ‘4MB’;
  • Размер work_mem автоматически не выделяется.
  • Описание: В параметре work_mem задается объем памяти, который будет использоваться для сложных запросов.

Сложные запросы – это запросы, в которых используются сортировки (ORDER BY), выборка уникальных значений (DISTINCT) и соединения. На такие операции сначала тратится память из work_mem, если ее не хватает – создаются временные файлы на диске, что замедляет выполнение запроса. work_mem выделяется сверх shared_buffers, а не в нем.

work_mem выделяется под каждый сложный запрос. Например, если будет десять запросов с сортировкой, то под каждый из них будет выделен свой work_mem. Не знаю, сколько максимально будет выделено под это дело. Возможно, ограничивается доступной оперативной памятью. Я проводил эксперименты – у меня пользователя PostgreSQL отключал, если слишком много памяти забирал.

  • Как посмотреть
    • Команда SHOW work_mem:

work_mem1 

    • Запросом: select * from pg_settings s where name = ‘work_mem’:

work_mem2


Be the first to comment

Leave a Reply

Ваш Mail не будет опубликован.


*