Статистика 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 используются более оптимальные для такого количества строк операторы соединения.
Список открывается практически мгновенно.
Еще можно посмотреть
Настройка и сбор логов для анализа проблем производительности систем 1С на Linux
Для осуществления мониторинга за качеством работы систем на базе 1С, а также для анализа проблем с производительностью, необходимо уметь настраивать сбор логов, дампов. Настройка сбора логов 1С под Linux имеет ряд особенностей. О них мы и поговорим в данной статье. Описание приводится для ОС Linux дистрибутивов RHEL/CentOS 7. 1. Как настроить и включить технологический журнал […]
Технологический журнал 1С и бесконечный цикл в коде 1С
Несмотря на то, что проблема в статье История одного конфликта блокировок 1С , казалось, была решена, ее повторное появление не заставило себя долго ждать. Пользователь Лапкина вновь приступила к работе и ее сеанс снова парализовал работу пользователей системы с блокируемым справочником. Описание ошибки: Пользователь создает элемент справочника и при записи система 1С:Предприятия «повисает». Сеанс закрывается пользователем, […]
Анализ технологического журнала 1С регулярными выражениями. От простого к сложному.
Что делать, если у пользователя возникают ошибки, «все тормозит» или возникают другие неясные проблемы, а разработчик не знает где искать проблему в коде? С этой статьи мы начинаем нашу рубрику по расследованию проблем производительности и стабильности работы систем на базе 1С:Предприятия. Речь пойдет о реальных примерах анализа технологического журнала 1С экспертами с помощью регулярных выражений. […]
ЧТО ТАКОЕ TTIMEOUT 1С:ПРЕДПРИЯТИЯ И КАК ЕГО НАЙТИ?
В этой статье мы поговорим о том, что такое таймаут на управляемых блокировках 1С:Предприятия и как расследовать причины его возникновения. При управляемом режиме , помимо управляемых блокировок 1С:Предприятия, на стороне СУБД в этот самый момент могут действовать также свои блокировки СУБД, обеспечивая изоляцию на более низком уровне. Блокировки СУБД при этом, в общем случае, осуществляются […]
Пропажа индексов дескрипторов в 1С:Документообороте
Пользователи копии продуктивной базы начали жаловаться на полное падение производительности в 1C:Документообороте на PostgresPro Enterprise + Linux. С их слов 1С сильно тормозила и это проявлялось везде: при входе в базу, открытии документов, списков, справочников, задач. При анализе происходящего из консоли администрирования 1С в момент запуска системы видим, что зависание начинается в момент обращения к […]
ЧТО ТАКОЕ PG_TEMP В POSTGRESQL ДЛЯ 1С И КТО ИХ СОЗДАЕТ?
pg_temp — это пространство СУБД PostgreSQL для временных таблиц, то есть таблиц, существующих в пределах жизни одного соединения (в терминах СУБД) или сеанса (в терминах кластера 1С). Такие таблицы мы можем увидеть в тексте запроса СУБД, если в запросе на языке запросов 1С присутствует конструкция ПОМЕСТИТЬ, которая и помещает выборку во временную таблицу. Таким образом […]
1C тормозит и возникают ошибки. С чего начать расследование?
Когда мы читаем о том, как настраивать и анализировать технологический журнал 1С на предмет «узких» мест, мы не всегда представляем себе, что это отнюдь не первое, что нужно сделать, когда сталкиваемся с падением производительности и стабильности работы системы. Прежде чем «бросаться» собирать технологический журнал и его парсить, изначально рекомендуется провести первичный сбор информации о проблеме: […]
Похожие записи
- Подключение репозитория под ОС Linux
- ОШИБКА 1С:ПРЕДПРИЯТИЯ «ПОТЕРЯНО СОЕДИНЕНИЕ»
- ЧТО ТАКОЕ TTIMEOUT 1С:ПРЕДПРИЯТИЯ И КАК ЕГО НАЙТИ?
- ЧТО ТАКОЕ PG_TEMP В POSTGRESQL ДЛЯ 1С И КТО ИХ СОЗДАЕТ?
- НАСТРОЙКА PG_PROFILER ДЛЯ POSTGRESQL 11.
- Очистка кэша: серверного и клиентского для 1С:Предприятия
- Настройка непрерывного архивирования (point-in-time-recovery, PITR) в PostgresPro 11 Linux
- Пропажа индексов дескрипторов в 1С:Документообороте
- Технологический журнал 1С и бесконечный цикл в коде 1С
- История одного конфликта блокировок 1С