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

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

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

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 автоматически группирует их по шаблону запроса, заменяя литералы на позиционные параметры.

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