Ситуация, когда после обновления конфигурации или манипуляций с базой данных (например, загрузки из DT-файла) проведение документов начинает занимать неоправданно много времени, знакома многим администраторам и разработчикам 1С. Рассмотрим, как системно подойти к поиску причины этого замедления и что именно нужно предпринять для исправления ситуации.
Первое правило диагностики любых «тормозов» в системе — не гадать, а измерять. Прежде чем перенастраивать СУБД PostgreSQL или вносить изменения в код, необходимо точно понять, на каком этапе выполнения кода теряется время.
Для этого воспользуемся встроенным инструментом платформы — Замером производительности:
Анализируя полученный отчет, мы сможем увидеть, какие именно модули, процедуры или запросы занимают наибольшее время (процент от общего времени выполнения). Если основная нагрузка приходится на Запрос к базе данных, значит, проблема кроется в взаимодействии 1С с PostgreSQL.
При использовании PostgreSQL критически важным фактором является актуальность статистики оптимизатора запросов. После обновления конфигурации структура таблиц меняется, добавляются новые поля, а объемы данных растут. Если статистика устарела, PostgreSQL может выбирать неэффективные планы выполнения запросов.
Рассмотрим, что нужно сделать для нормализации работы:
PostgreSQL важно настроить autovacuum, чтобы табличная статистика всегда оставалась актуальной.DT-файла, индексы могут быть фрагментированы. Выполните полную реиндексацию таблиц базы данных средствами PostgreSQL. Не полагайтесь только на стандартное «Тестирование и исправление» из 1С, так как глубокая перестройка индексов на уровне СУБД работает эффективнее.Если замер производительности показал, что проведение упирается в «длинный» SQL-запрос, пришло время использовать Технологический журнал. Это мощный инструмент, который позволяет зафиксировать запрос, превышающий пороговое значение времени выполнения.
Настройте конфигурационный файл logcfg.xml следующим образом:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\Logs" history="24">
<event>
<eq property="Name" value="DBPOSTGRS"/>
</event>
<property name="Duration"/>
<property name="Sql"/>
</log>
</config>
</config>
Установив фильтр, например, на Duration > 5000000 (5 секунд), вы получите в логах чистый текст SQL-запроса. Получив такой запрос, вы сможете выполнить его непосредственно в консоли управления PostgreSQL с использованием команды EXPLAIN ANALYZE. Это покажет, как именно база данных обрабатывает запрос: использует ли она Index Scan или же прибегает к «тяжелому» Seq Scan (полному сканированию таблицы).
Чтобы окончательно решить проблему медленного проведения, придерживайтесь этого плана:
EXPLAIN ANALYZE в СУБД.PostgreSQL.Помните, что обновление версии 3.0.35.6 часто сопровождается изменением логики учета (например, НДС или себестоимости), что само по себе требует больше ресурсов. Иногда требуется оптимизация не только базы, но и самой логики проведения документа в новых условиях учета.