Гайд 1С: Настройка расширения pg_stat_statements в PostgreSQL для профилирования
- Невозможно определить, какие конкретно запросы 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; Частые вопросы (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 автоматически группирует их по шаблону запроса, заменяя литералы на позиционные параметры.