Только интересные технические подробности, кейсы, тесты, а также анонсы выступлений на мероприятиях
Никакой "воды" и рекламы
Вся информация в этом канале - это моё личное мнение и не является официальной позицией вендоров и рекомендациями к действиям
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 можно временно кратно увеличить эти значения
а после загрузки DT вернуть в исходное состояние
Тут важно подобрать параметры так, чтобы выставлять их минимально достаточными для максимальной скорости загрузки.
Какие именно будут параметры именно в вашем случае покажет только тестирование.
Но учтите, что количество потоков загрузки DT из конфигуратора = кол-ву ядер на сервере 1С.
Т.е. если у нас 12 ядер на сервере 1С и мы выставили параметры параллелизма в 2 и объём оперативной памяти в 2 ГБ, то мы должны обеспечить на сервере СУБД минимум 2*12=24 ядра и 2*12=24ГБ памяти только для этой процедуры.
Указать количество потоков загрузки dt можно только в пакетном режиме запуска конфигуратора с помощью параметра -JobsCount
Особо заметный эффект от настроек и балансировки будет, если в базе есть большие таблицы, как и в целом любой параллелизм хорошо себя показывает именно на больших данных, а на малых скорее вреден чем полезен.
Давным давно, когда 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














