PostgreSQL checkpoints are occurring too frequently #800815


#0 by 2dolist
Добрый день. Глянул лог постгреса и увидел кучу предупреждений. checkpoints are occurring too frequently. Настройки по чекпоинтам не трогал - они типовые. Не могу толком найти по оптимальным настройкам чекпоинтов для 1с баз. На итс вот так: checkpoint_segments = 32..256   < 9.5 что это значит я не понял
#1 by 2dolist
Не, ну ясно, что до версии 9.5 советуют 32-256, но вот как конкретно расчитать
#2 by Йохохо
а что вот тут checkpoint_warning ?
#3 by Вафель
а сейчас сколько? поставь больше в 1.5 раза
#4 by 2dolist
сейчас 3 по умолчанию.
#5 by 2dolist
checkpoint_segments
#6 by 2dolist
поставил 32 как советуют минимум, но я не понимаю как рассчитать оптимальное значение
#7 by Вафель
может все таки нужно настроить
#8 by Вафель
checkpoint_timeout
#9 by Йохохо
checkpoint_timeout (integer) Maximum time between automatic WAL checkpoints, in seconds. The default is five minutes (5min) т.е. они считают, что 5 минут норм. И влияет это только на время восстановления после сбоя. Если диски справляются ставим побольше, не справляются поменьше. Наверное
#10 by Вафель
на самом деле чекпойнт происходит по достижению либо 1 либо 2 параметра
#11 by Йохохо
в смысле параметры checkpoint_segments надо подогнать чтобы чекпойнт случался где то раз в 5 минут или из других соображений. А убрать варнинг можно настроив checkpoint_warning
#12 by Вафель
Можно поставить заведомо большее значении, тогда будет раз в 5 мин
#13 by Йохохо
не зря же два параметра, варнинг как то осмысленно должен настраиваться
#14 by Вафель
2 параметра скорее всего ибо так исторически сложилось
#15 by Йохохо
врятли, может быть осмысленно для высоких пиковых нагрузок поставить, что при обычной нагрузке чекпойнт по таймауту триггерится, а при пике по сегментам, чтобы не выжрать какие то буферы/память
#16 by 2dolist
Ну вообще, при обновлении базы вывалилось: Out of memory for query result. Залез в лог чтоб разобраться что и как, а там только предупреждения по чекпоинтам. Не знаю, оно-нет.
#17 by Йохохо
не оно, лучше бы сразу написал ошибку
#18 by 2dolist
ну в логе больше нет ничего.
#19 by 2dolist
хз куда копать, думал может оно. А из-за чего может вообще так ругаться и не писать в логах?
#20 by 2dolist
нашёл, что есть ещё проблема с деградацией индексов на 9.4. А у нас как раз 9.4.
#21 by Йохохо
вбиваешь в гугл ошибку, тыкаешь искать только на русском. Еще перевести можно
#22 by 2dolist
ну так первым делом так и было. пробовал: - mergejoin = off - настройка work_mem и связанных с этим вещей - увеличение файла подкачки на диске с базами Ничего из этого не сработало. Что ещё не пробовал: - обновить платформу 1с. У нас 8.3.9.2033. Не думаю, что в этом дело - обновить postgresql. У нас 9.4. Возможно и в этом дело, как появится возможность, надо будет попробовать. - купить лицензию на 64-х битный агент сервера 1с - хочу сначала разобраться какой конкретно памяти не хватает прежде, чем отвалить xyz тыщь рублей.
#23 by 2dolist
Ну вот сейчас на rphost >2 гигов тратится.
#24 by sapphire
Потому что не надо работать с типовыми настройками! Вот где можно почитать и объясняется что и как:
#25 by sapphire
+ Настройка сервера: #настройка-сервера
#26 by Вафель
кстати на 9.5 этой проблемы нет
#27 by 2dolist
спасибо, обязательно читну. Было бы время
#28 by 2dolist
может и правда обновиться. 9.6 вроде последняя под 1с
#29 by sapphire
Для ленивых: Для увеличения интервала между контрольными точками нужно увеличить количество сегментов журнала транзакций через параметр checkpoint_segments. Данный параметр определяет количество сегментов (каждый по 16 МБ) лога транзакций между контрольными точками. Этот параметр не имеет особого значения для базы данных, предназначенной преимущественно для чтения, но для баз данных со множеством транзакций увеличение этого параметра может оказаться жизненно необходимым. В зависимости от объема данных установите этот параметр в диапазоне от 12 до 256 сегментов и, если в логе появляются предупреждения (warning) о том, что контрольные точки происходят слишком часто, постепенно увеличивайте его. Место, требуемое на диске, вычисляется по формуле (checkpoint_segments * (2 + checkpoint_completion_target) + 1) * 16 МБ, так что убедитесь, что у вас достаточно свободного места. Например, если вы выставите значение 32, вам потребуется больше 1 ГБ дискового пространства. Следует также отметить, что чем больше интервал между контрольными точками, тем дольше будут восстанавливаться данные по журналу транзакций после сбоя. Начиная с версии 9.5 checkpoint_segments был заменен на параметры min_wal_size и max_wal_size. Теперь система может автоматически сама решать сколько checkpoint_segments требуется хранить (вычислять по ранее приведенной формуле от указанного размера). Преимуществом этого является то, что вы можете установить max_wal_size очень большим, но система не будет на самом деле потреблять указанное количество места на жестком диске, если в этом нет никакой необходимости. min_wal_size устанавливает минимальный размер места, который будет использоваться сегментами (можно отключить такую автонастройку, установив для min_wal_size и max_wal_size одинаковое значение).
#30 by sapphire
Ну чо, нашел оптимальное значение?
#31 by ansh15
Последний пост в теме по ссылке. Под клиентом для PostgreSQL понимается сервер приложений 1С. Обнови до СУБД до версии 9.6.3-1.1C, она есть уже даже на users.v8.1c.ru
#32 by sapphire
Не то.
#33 by 2dolist
на чекпоинты-то ругаться перестал, но выдаёт: 2017-07-14 01:00:03 AZST STATEMENT:  SELECT tableoid, oid, nspname, (SELECT rolname FROM pg_catalog.pg_roles WHERE oid = nspowner) AS rolname, nspacl FROM pg_namespace 2017-07-14 01:00:03 AZST LOG:  Can't find mchar/mvarvarchar types: mchar=0 mvarchar=0 9.6.3 конечно хорошо, но pg_dump 9.6.3 does not dump the schema with this command: The missing 'public' schema was not an issue in 9.6.2.
#34 by 2dolist
про Can't find mchar/mvarvarchar types: mchar=0 mvarchar=0 вроде не смертельно - какая-то ошибка 1сного допила, связанная с интдексацией.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С