Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PG_STAT_STATEMENTS_1C 1С:Предприятие и СУБД

PostgreSQL для 1С: как найти тяжелый запрос, повесивший сервер (модуль pg_stat_statements)

Обновлено: 26.08.2026 · Официальная документация ↗
  • Программа 1С зависает у всех пользователей при проведении документов или формировании отчетов.
  • Процессор сервера загружен на 100% процессами postgres.exe или postgres в Linux.
  • База данных перестает отвечать, а перезапуск службы 1С помогает лишь на несколько минут.
  • Непонятно, какой именно пользователь или отчет отправляет тяжелые SQL-запросы в СУБД.

Что это такое простыми словами?

Когда в 1С формируют огромный отчет (например, за 5 лет без фильтра), 1С отправляет в базу данных PostgreSQL сложный SQL-запрос. Сервер базы начинает перебирать миллионы строк, из-за чего процессор раскаляется до предела, а у остальных сотрудников всё «висит». Модуль pg_stat_statements — это встроенный «черный ящик» PostgreSQL, который протоколирует каждый запрос, время его выполнения и количество обращений к диску.

Шаг 1. Включение модуля в конфигурации PostgreSQL

Откройте файл postgresql.conf (обычно находится в папке с данными базы) в Блокноте или любом редакторе и добавьте в конец строки:

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all

Шаг 2. Перезапуск службы PostgreSQL

Для вступления изменений в силу перезапустите службу через оснастку Windows services.msc (служба postgresql-x64-XX) или в консоли Linux:

sudo systemctl restart postgresql

Шаг 3. Активация расширения в рабочей базе 1С

Откройте программу pgAdmin или консоль psql, подключитесь к вашей базе 1С и выполните команду:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

Шаг 4. Поиск запроса-вредителя

Чтобы увидеть топ-5 самых долгих запросов, выполните в окне SQL-запросов:

SELECT 
    round(total_exec_time::numeric, 2) AS total_time_ms,
    calls,
    round(mean_exec_time::numeric, 2) AS avg_time_ms,
    substr(query, 1, 150) AS query_preview
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 5;

По первым строкам вы сразу увидите имя таблицы 1С (например, _Document123 или _AccumRgTn), что позволит программисту 1С точно понять, какой документ или регистр перегружает базу.

💡 Практика специалистов: Если среднее время avg_time_ms у запроса небольшое, но показатель calls исчисляется миллионами — это значит, что в коде 1С написан запрос внутри цикла. Это грубейшая ошибка разработки, которую необходимо устранить программисту.

Частые вопросы (FAQ)

Сильно ли модуль pg_stat_statements замедляет работу PostgreSQL?

Практически нет. Накладные расходы составляют менее 1-2% производительности, поэтому его держат включенным на всех рабочих серверах 1С.

Как сбросить накопленную статистику, чтобы начать замер заново?

Достаточно выполнить команду: SELECT pg_stat_statements_reset(); — вся прошлая статистика обнулится.

Что делать, если база зависла прямо сейчас и не откликается?

Выполните запрос SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state = 'active' AND now() - query_start > interval '5 minutes'; чтобы принудительно снять зависшие операции без перезагрузки сервера.

Почему имена таблиц в запросах выглядят как _InfoRg123, а не как в 1С?

1С хранит данные во внутренних таблицах с техническими именами. Чтобы сопоставить их с привычными объектами, программисты используют функцию 1С ПолучитьСтруктуруХраненияБазыДанных().

Полезные материалы
Рекомендуем