Статистика 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 используются более оптимальные для такого количества строк операторы соединения.
Список открывается практически мгновенно.
Еще можно посмотреть
Похожие записи
- Подключение репозитория под ОС 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С