Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Гайд 1С: Настройка расширения pg_stat_statements в PostgreSQL для профилирования

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Невозможно определить, какие конкретно запросы 1С создают максимальную нагрузку на процессор и диск в PostgreSQL.
  • Технологический журнал 1С фиксирует события длительных вызовов DBPOSTGRS без детальной серверной статистики буферов.
  • Необходимость непрерывного профилирования SQL-запросов на продакшене с минимальным оверхедом (< 1%).

1. Подключение модуля в postgresql.conf

Добавьте модуль в библиотеку предварительной загрузки:

shared_preload_libraries = 'pg_stat_statements'

# Конфигурация pg_stat_statements под нагрузки 1С
pg_stat_statements.max = 10000
pg_stat_statements.track = top
pg_stat_statements.save = on
track_io_timing = on  # Критично для учета времени чтения с диска

2. Перезапуск PostgreSQL и создание расширения

systemctl restart postgresql

# Подключение расширения в базе 1С под суперпользователем
psql -U postgres -d enterprise_base -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;"

3. Запрос поиска ТОП-10 тяжелых запросов по времени CPU

SELECT 
    round(total_exec_time::numeric, 2) AS total_ms,
    calls,
    round(mean_exec_time::numeric, 2) AS avg_ms,
    round((100 * total_exec_time / sum(total_exec_time) OVER ())::numeric, 2) AS percentage,
    shared_blks_hit,
    shared_blks_read AS disk_reads,
    query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
Практический опыт инженера: Обращайте первоочередное внимание на запросы с высоким отношением shared_blks_read к shared_blks_hit — именно они вымывают горячие данные 1С из оперативной памяти в дисковый своп.

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

Создает ли pg_stat_statements заметный оверхед на боевой базе 1С?

Нет. Расширение pg_stat_statements агрегирует одинаковые нормализованные запросы в хэш-таблицу в оперативной памяти ядра, создавая оверхед менее 1–2% CPU.

Зачем включать параметр track_io_timing = on?

Без этого параметра pg_stat_statements учитывает только общее время исполнения, но не детализирует время, потраченное именно на ожидание дискового ввода-вывода (read/write time).

Как очистить накопленную статистику pg_stat_statements после оптимизации запроса?

Выполните в базе данных SQL-команду: SELECT pg_stat_statements_reset();.

Почему тексты запросов от 1С отображаются с параметрами вида $1, $2?

Платформа 1С выполняет параметризованные запросы через PREPARE/EXECUTE, и модуль pg_stat_statements автоматически группирует их по шаблону запроса, заменяя литералы на позиционные параметры.