Workmem и pgsql_tmp


#1

хозяйке на заметку

Вводные

  • PG.Pro для 1С редакции 9.6 и выше
  • Базы - 3-7 штук баз для 1С на платформах 8.3.12 и выше
  • linux - Centos/Debian

Необходимые условия

переходим в каталог /var/lib/postgresql/<PGVERSION>/main/base или то место где у вас хранятся базы

определяем отношение всего размера каталога к каталогу pgsql_tmp

%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Если размер большой

Если размер pgsql_tmp близок к размеру остальных ВСЕХ каталог - например все базы 40Gb - а размер временных файлов на кластер 31Gb. Это не есть хорошо.

Как исправить

не бегите закупать новый SSD или новую дисковую полку. Сделайте следующее

откройте файл postgresql.conf и увеличьте параметр work_mem на 1 (один) Kb
в ближайший регламент - сделайте

service postgresql restart

посмотрите на изменение места - а точнее на размер pgsql_tmp

Что будет ?

Если размер pgsql_tmp уменьшится координально - на 50%-80% - то у вас косячный work_mem. Увеличивайте ;-).

Если размер pgsql_tmp НЕ уменьшился - у вас косяк с отсутствие регламентного вызова vaccuumdb -f -z -a. Создавайте план обслуживания.

P.S.

vaccuumdb -f -z -a - эту команду лучше вызвать сразу после указанного изменения на 1Kb, то есть 2 операции:

  1. изменение work_mem на 1Kb
    1.1 рестарт сервера
    1.2 контроль размера pgsql_tmp

  2. вызов команды sudo su postgres
    2.1. vaccuumdb -f -z -a
    2.2 контроль размера pgsql_tmp

P.S.S

наблюдалось на системах УНФ, БП, “сампописка на базе БСП”, а также на базе Gitlab


#2

То есть указанное поведение вообще-то нормальное и не зависит от 1С или не 1С.