Статистика PostgreSQL при работе с 1С:Предприятием
В этой статье поговорим о статистике в PostgreSQL.
1. Симптомы неактуальной статистики в базе.
2. Как обновляется статистика в PostgreSQL и надо ли ее обновлять принудительно?
3. Как обновить статистику в PostgreSQL вручную?
Симптомы неактуальной статистики в базе.
В какой-то момент(в какой именно теперь уже не вспомнит никто) тестовая база начала сильно тормозить, при низкой загрузке оборудования.
При чем некоторые действия продолжали выполняться с приемлемой скоростью, а некоторые могли выполняться ну очень долго. .
В частности, открытие списка одного из документов выполнялось 8 часов.
Для исключения из эксперимента времени работы на сервере 1С:Предприятия(формирование формы и т.д.) – мы выполнили запрос динамического списка в консоли запросов(БЕЗ вывода результата запроса в табличный документ).
Окончательно убедившись, что бОльшая часть времени выполнения – это время, которое было потрачено на выполнение запроса СУБД, мы выполнили сбор плана запроса в технологическом журнале.
По плану запроса мы увидели некоторую особенность: изобилие операторов nested loop:
При ближайшем рассмотрении можно увидеть, что в таблице сканирования индекса при оценке количества строк есть колоссальное расхождение с фактически полученным числом строк:
Это связано с тем, что по данным статистики оптимизатор предполагал, что получить всего 1 строку. Поэтому им в качестве оператора был выбран nested loop. А в результате получил 15215 строк. Использование nested loop на таком количестве строк и привело к деградации производительности.
Могло ли такое случиться при включенной настройке autovacuum? Ведь в этом случае команда ANALYZE выполняется автоматически…
Но не все так просто.
Как обновляется статистика в PostgreSQL и надо ли ее обновлять принудительно?
Команда ANALYZE выполняется автоматически (при настройке autovacuum=on) после существенных изменений содержимого таблицы. Но в некоторых случаях происходят такие изменения в таблицах, которые не влияют на статистику по критичным для работы системы столбцам.
То есть, автоматический запуск ANALYZE зависит только от количества вставленных или изменённых строк. Как при этом измененные строки влияют на статистику – не учитывается.
Поэтому в некоторых случаях может понадобится запуск обновления статистики вручную.
Как обновить статистику в PostgreSQL вручную?
Авторизуемся под postgres.
1 |
sudo su postgres |
Заходим в терминал PostgreSQL.
1 |
psql |
Подключимся к базе.
1 |
\с base |
Выполним команду сбора статистики по интересующим таблицам.
1 2 3 4 5 6 7 8 9 |
ANALYZE VERBOSE _InfoRgSL76350; ANALYZE VERBOSE _InfoRgSL75221; ANALYZE VERBOSE _InfoRg71721; ANALYZE VERBOSE _Document47725; ANALYZE VERBOSE _InfoRg74398; |
Либо в целом по базе:
1 |
ANALYZE VERBOSE; |
В результате после выполнения сбора статистики план открытия списка документов оказался следующий:
Видим, что вместо nested loop используются более оптимальные для такого количества строк операторы соединения.
Список открывается практически мгновенно.
Еще можно посмотреть
1C тормозит и возникают ошибки. С чего начать расследование?
Когда мы читаем о том, как настраивать и анализировать технологический журнал 1С на предмет «узких» мест, мы не всегда представляем себе, что это отнюдь не первое, что нужно сделать, когда сталкиваемся с падением производительности и стабильности работы системы. Прежде чем «бросаться» собирать технологический журнал и его парсить, изначально рекомендуется провести первичный сбор информации о проблеме: […]
Что такое PG_TEMP в PostgreSQL для 1С
pg_temp — это пространство СУБД PostgreSQL для временных таблиц, то есть таблиц, существующих в пределах жизни одного соединения (в терминах СУБД) или сеанса (в терминах кластера 1С). Такие таблицы мы можем увидеть в тексте запроса СУБД, если в запросе на языке запросов 1С присутствует конструкция ПОМЕСТИТЬ, которая и помещает выборку во временную таблицу. Таким образом […]
Пропажа индексов дескрипторов в 1С:Документообороте
Пользователи копии продуктивной базы начали жаловаться на полное падение производительности в 1C:Документообороте на PostgresPro Enterprise + Linux. С их слов 1С сильно тормозила и это проявлялось везде: при входе в базу, открытии документов, списков, справочников, задач. При анализе происходящего из консоли администрирования 1С в момент запуска системы видим, что зависание начинается в момент обращения к […]
Анализ технологического журнала 1С регулярными выражениями. От простого к сложному.
Что делать, если у пользователя возникают ошибки, «все тормозит» или возникают другие неясные проблемы, а разработчик не знает где искать проблему в коде? С этой статьи мы начинаем нашу рубрику по расследованию проблем производительности и стабильности работы систем на базе 1С:Предприятия. Речь пойдет о реальных примерах анализа технологического журнала 1С экспертами с помощью регулярных выражений. […]
Настройка и сбор логов для анализа проблем производительности систем 1С на Linux
Для осуществления мониторинга за качеством работы систем на базе 1С, а также для анализа проблем с производительностью, необходимо уметь настраивать сбор логов, дампов. Настройка сбора логов 1С под Linux имеет ряд особенностей. О них мы и поговорим в данной статье. Описание приводится для ОС Linux дистрибутивов RHEL/CentOS 7. 1. Как настроить и включить технологический журнал […]
История одного конфликта блокировок 1С
В определенный момент времени, пользователи информационной базы, которые ранее работали без проблем — начали жаловаться на возникновение ошибок при записи элемента справочника. В нашем распоряжении оказались скрины и тексты ошибок, переданные пользователями. Без возможности самостоятельного воспроизведения проблемы в этой или каких-либо других тестовых базах данных. 1. Знакомимся с текстами ошибок. 2. Парсим технологический журнал 1С […]
Технологический журнал 1С и бесконечный цикл в коде 1С
Несмотря на то, что проблема в статье История одного конфликта блокировок 1С , казалось, была решена, ее повторное появление не заставило себя долго ждать. Пользователь Лапкина вновь приступила к работе и ее сеанс снова парализовал работу пользователей системы с блокируемым справочником. Описание ошибки: Пользователь создает элемент справочника и при записи система 1С:Предприятия «повисает». Сеанс закрывается пользователем, […]
Похожие записи
- Подключение репозитория под ОС Linux
- Ошибка 1С:Предприятие «Потеряно соединение»
- Расследование конфликтов управляемых блокировок (TTIMEOUT) 1С:Предприятия
- Что такое PG_TEMP в PostgreSQL для 1С
- НАСТРОЙКА PG_PROFILE ДЛЯ POSTGRESQL 1.
- Очистка кэша: серверного и клиентского для 1С:Предприятия
- Настройка непрерывного архивирования (point-in-time-recovery, PITR) в PostgresPro 11 Linux
- Пропажа индексов дескрипторов в 1С:Документообороте
- Технологический журнал 1С и бесконечный цикл в коде 1С
- История одного конфликта блокировок 1С