TGViewer
Антон Дорошкевич | маяк в мире 1С и СУБД Антон Дорошкевич | маяк в мире 1С и СУБД @explorer1c · 2.02K subscribers
Post #57 2.68K
1️⃣🔤 🔤🔤🔤 Как ускорить загрузку DT в PostgreSQL

Давным давно, когда Postgres был мало знаком с 1С и их отношения только развивались DT в Postgres загружался гораздо дольше чем в MS SQL.

Те веремена прошли, а имидж остался.

Сегодня расскажу как ускорить загрузку DT в PostgreSQL, какие настройки нужно для этого поменять на PostgreSQL и что для ускорения загрузки было сделано со стороны лучшей в мире платформы 1С.

Этапы загрузки DT:
1. Создаём таблицы согласно схеме БД (константы, справочники, регистры и т.д.)
2. Заполняем таблицы данными
3. Создам индексы на таблицах, согласно схеме БД

Долгое время загрузка DT была однопоточной и в те времена (до версии 8.3.19) и главное падение скорости у PostgreSQL было на третьем этапе - Создание индексов.
Падение скорости было обусловлено тем, что MS SQL умел создавать индексы многопоточно, а PostgreSQL нет

Но теперь и 1С умеет многопоточно грузить DT и PostgreSQL умеет многопоточно создавать индексы и казалось бы это и есть максимальная скорость, но нет))

Дальше посмотрим какие настройки PostgreSQL могут ещё ускорить создание индексов и как сбалансировать скорость загрузки DT с мощностью сервера СУБД,

maintenance_work_mem - объём оперативной памяти в том числе и для создания индекса
max_parallel_maintenance_workers - количество параллельных потоков создания индекса

На время загрузки dt можно временно кратно увеличить эти значения

ALTER SYSTEM SET maintenance_work_mem = 2GB;
ALTER SYSTEM SET max_parallel_maintenance_workers = 2;
'select pg_reload_conf();


а после загрузки DT вернуть в исходное состояние

'ALTER SYSTEM RESET maintenance_work_mem;
'ALTER SYSTEM RESET max_parallel_maintenance_workers;
'select pg_reload_conf();


Тут важно подобрать параметры так, чтобы выставлять их минимально достаточными для максимальной скорости загрузки.
Какие именно будут параметры именно в вашем случае покажет только тестирование.
Но учтите, что количество потоков загрузки DT из конфигуратора = кол-ву ядер на сервере 1С.
Т.е. если у нас 12 ядер на сервере 1С и мы выставили параметры параллелизма в 2 и объём оперативной памяти в 2 ГБ, то мы должны обеспечить на сервере СУБД минимум 2*12=24 ядра и 2*12=24ГБ памяти только для этой процедуры.

Указать количество потоков загрузки dt можно только в пакетном режиме запуска конфигуратора с помощью параметра -JobsCount

Особо заметный эффект от настроек и балансировки будет, если в базе есть большие таблицы, как и в целом любой параллелизм хорошо себя показывает именно на больших данных, а на малых скорее вреден чем полезен.
  • 🔥 23
  • 👍 11
  • 👏 7
  • ❤ 1
  • 😢 1
More from @explorer1c
  1. Sep 21, 2026Можно ли сделать поведение PostgreSQL в отношении потребления памяти процессами более жест…
  2. Sep 11, 2026Сегодня ровно год первому сообщению в канале! Огромное спасибо всем вам! Честно - было оче…
  3. Sep 9, 2026Теперь на багборде можно легко и быстро сравнить версии платформы по изменениям! Уверен чт…
  4. Sep 7, 2026Начнём...)
  5. Sep 2, 2026Как собрать для анализа запроса все временные таблицы с их содержимым? Все мы хорошо знаем…
  6. Aug 26, 2026Небольшой анонс поездок и мероприятий с моим участием: 08-10/09 - Обучение по кластеру 1с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →