TGViewer
Channel Public Channel
Антон Дорошкевич | маяк в мире 1С и СУБД

Антон Дорошкевич | маяк в мире 1С и СУБД

@explorer1c

Только интересные технические подробности, кейсы, тесты, а также анонсы выступлений на мероприятиях
Никакой "воды" и рекламы

Вся информация в этом канале - это моё личное мнение и не является официальной позицией вендоров и рекомендациями к действиям
Subscribers
2.02K
Photos
64
Videos
0
Links
46

Showing posts older than #58 · Back to latest

Older Posts 17 shown
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
Post #56 2.77K
Всем привет!

Впервые в ОЧНОМ формате в здании где сосредоточена вся мощь, ум и сердце Платформы 1С пройдёт 1C DevCon 2026 - конференция Разработчиков Лучшей в мире платформы 1С для Разработчиков на лучшей в мире платформе 1С!

Если вам интересно куда движется сама платформа 1С, 1С.Элемент, EDT, 1С.Напарник и т.д., то лучшего времени и лучшего формата просто не найти!

Приходите, будет интересно!
  • 👍 27
  • 😁 4
  • 👌 2
  • 😱 1
Post #55 3.25K
1️⃣🔤 Мифы о DT

Достаточно часто в работе даже с КОРП-клиентами сталкиваемся с тем, что на выгрузку/загрузку DT возлагаются неоправданные надежды основанные на давних мифах…

Давайте разберём некоторые из них:

1. Выгрузка dt происходит в тот каталог куда мы указали.
В итоге – да, но сам процесс выгрузки выглядит иначе, а именно:
- конфигуратор выгружает базу в файл с расширением .n1 и выгрузка эта происходит в каталог временных файлов пользователя процесса rphost
- после окончания выгрузки файл переименовывается и перемещается в каталог, который мы указали при выгрузке
❗️Для успешной выгрузки базы необходимо обеспечить достаточно места не только в каталоге выгрузки, но и в каталоге временных файлов пользователя процесса rphost

2. Большую базу невозможно выгрузить в dt
Тут всё просто – точно возможно, если прочитать п.1 и обеспечить достаточно места.
А вот сколько места – это вопрос интересный, но в среднем dt занимает в 8 раз меньше чем объём базы данных.
Если у вас PostgreSQL, то dt будет занимать примерно столько же сколько резервная копия базы, созданная через pg_dump, так как dt как и pg_dump не содержит индексы.

3. Выгрузка/загрузка dt поможет убрать ошибки учёта или «красные» ошибки
Точно нет, тут даже обсуждать особо нечего…
А вот пересчёт итогов, причём даже в пользовательском режиме без необходимости монопольного доступа, как в случае пересчёта через ТИИ, действительно может починить ОСВ (почему итоги могут испортиться – это отдельная история)

4. Выгрузка/загрузка dt пересчитает итоги
И опять нет, такое было только в 1С 7.7

5. После выгрузки/загрузки dt база станет работать быстрее
Тут уже интереснее – база может начать работать быстрее по двум причинам:
- Поскольку таблицы создались заново, то их распухание и фрагментация стремятся к нулю
- Индексы так же создались заново

Но всё то же самое можно сделать средствами PostgreSQL выполнив неблокирующий reindex concurrently (вместо реиндексации в ТИИ или dt) или выполниd vacuum full (вместо реструктуризации в ТИИ или dt)

В MS SQL распухание таблиц редкое явление и практически не влияет на скорость работы, а неблокирующую реиндексацию можно сделать с галкой «в сети»

6. Имена таблиц на СУБД останутся такими же как у базы с которой был выгружен dt
Это не так, имена нумеруются согласно ИТС и никакой гарантии что они останутся такими же нет.
Например, в базе было 3 справочника с именами на СУБД _Reference1, _Reference2, _Reference3
Затем один справочник удалил (_Reference2) и добавили другой (_Reference4)/
В итоге у нас в базу на уровне СУБД 3 справочника - _Reference1, _Reference3, _Reference4
При загрузки dt, выгруженного с той базы имена справочников будут пронумерованы с начала и идти по порядку и мы получим в новой базу имена - _Reference1, _Reference2, _Reference3.

7. Есть один очень интересный сценарий, когда именно выгрузка/загрузка dt ускорит базу кардинально.

Для этого изначальная загрузка dt в базу должна была пройти не до конца и не создать все индексы, при этом загрузив все данные.
В этом случае всё будет работать, но медленно.
Реиндексация ни средствами ТИИ ни средствами СУБД не поможет, так как эти команды реиндексируют только уже существующие на СУБД индексы, и не формируют новые согласно Схеме базы данных 1С.
Такой сценарий нужно предварительно расследовать, чтобы понять что действительно состав индексов на СУБД не соответствует схеме бд 1С, например развернув чистую конфигурацию на тестовой базе получить состав таблиц и индексов и сравнить с рабочей базой хотя бы по количеству.

8. Ну и наверное самый старый миф – является ли dt резервной копией?
Тут есть много споров, а есть рекомендации 1С https://its.1c.ru/db/metod8dev/content/2922/hdoc

Где описаны некоторые недостатки резервного копирования с помощью dt, основными из которых по моему мнению является то, что необходимо обеспечить монопольный доступ к базе и однопоточность создания dt.

Но с другой стороны, только монопольный доступ гарантирует бизнес-целостность резервной копии, а копия снятая средствами СУБД – это консистентная только на уровне транзакций СУБД копия.
  • 👍 36
  • 🔥 17
  • 🙏 5
  • ❤ 3
  • 😱 1
Post #54 2.62K
Игорь Апресов | Radio Ingvar 🔖 Как не дать конфигурации 1С положить сервер: профили, кластеры и логи Платформа 1С не превращает произвольный доверенный серверный код в идеальную песочницу. Но она умеет: ограничивать опасные возможности, уменьшать радиус поражения, разделять полномочия…
Выложены записи:
😉 Запись на YouTube
😄 Запись на VK Video
🥰 Запись на Rutube
Youtube - YouTube Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
  • 🔥 29
  • 👍 9
  • 🙏 2
  • 👏 1
Post #53 2.52K
Первый опыт прямого эфира
Если что, то 19:00 по Мск)
  • 👍 17
  • 🔥 10
  • 👏 1
  • 😱 1
  • 🎉 1
Post #52 2.62K

Forwarded from Игорь Апресов | Radio Ingvar

🔖 Как не дать конфигурации 1С положить сервер: профили, кластеры и логи

Платформа 1С не превращает произвольный доверенный серверный код в идеальную песочницу. Но она умеет: ограничивать опасные возможности, уменьшать радиус поражения, разделять полномочия и давать нормальные инструменты расследования

➡️ Что вообще считать опасным кодом в 1С
Вредоносный, чрезмерно доверенный, привилегированный, ресурсоубивающий.
➡️ Что реально ограничивает действия кода
Безопасный режим, профили безопасности, запрет опасных возможностей.
➡️ Что уменьшает ущерб, если код уже плохой
Разные пользователи ОС для компонентов кластера, разнесение центрального и рабочих серверов, выделенные сервера под тяжёлые/подозрительные сценарии, управление потреблением ресурсов.
➡️ Что управляет доступом, но не sandbox’ит код
Разделение админов, внешнее управление сеансами.
➡️ Что помогает после пожара
История данных, журнал регистрации, техжурнал, мониторинг кластера, дампы.
➡️ Что на счет отладки
Отладка на сервере или как дать злоумышленнику исполнить произвольный код

Приглашенный гость:
😶‍🌫️ Антон Дорошкевич, Руководитель проектов, ИнфоСофт

😉 Стрим на YouTube
😄 Запись после стрима
🥰 Запись после стрима

🗓 Дата: 17 марта в 19:00
  • 🔥 32
  • 👍 10
  • ❤ 2
  • 😱 2
Post #51 2.08K
🔤🔤🔤 Когда фоновый процесс обновления статистики может стать виновником блокировок и что с этим можно сделать?

Не смотря на то что в целом Автовакуум это неблокирующая операция, всё таки есть возможность получить таймаут на блокировке...

Тонкость состоит в том что автовакуум, даже когда он пришёл только лишь обновить статистику накладывает блокировку на схему БД.

Т.е. нельзя во время работы автовакуума с таблицей менять в ней состав колонок или удалять таблицу целиком.

И тут нам в мире 1С очень "повезло" так как это же операции реструктуризации как версии 1 так и версии 2.

В итоге мы при реструктуризации можем получить очень неприятную ситуацию:
1. Автовакуум (автообновление статистики) на таблице занимает более 20 сек
2. Реструктуризация как раз касается этой самой таблицы
3. Через 20 сек после попытки начала реструктуризации этой таблицы получаем ошибку таймаута блокировки и реструктуризация прерывается.

Что делать?

Если у вас планируется реструктуризация большой таблицы. а обновление статистики более 20 сек может быть только на очень приличной по объёму и количеству строк таблицы, то есть 2 варианта:

1. Отключить на время реструктуризации автовакуум на сервере:
ALTER SYSTEM SET autovacuum = off;
select pg_reload_conf();


после реструктуризации включить обратно:
ALTER SYSTEM SET autovacuum = on;
select pg_reload_conf();


либо, если по умолчанию автовакуум включен был, то
ALTER SYSTEM RESET autovacuum;
select pg_reload_conf();


2. Отключить автовакуум на конкретной таблице (_inforg38) на время реструктуризации
ALTER TABLE IF EXISTS public._inforg38 SET ( autovacuum_enabled = false);
select pg_reload_conf();


после реструктуризации включить обратно:
ALTER TABLE IF EXISTS public._inforg38 SET ( autovacuum_enabled = true);
select pg_reload_conf();


Хочется назвать это костылём, но большие таблицы/базы не живут без таких оптимизаций 😄

Ну и не лишним будет напомнить, что канал есть в MAX
MAX Антон Дорошкевич | маяк в мире 1С и СУБД Только интересные технические подробности, кейсы, тесты, а также анонсы выступлений на мероприятиях Никакой "воды" и рекламы Вся информация в этом канале - эт…
  • 🔥 30
  • 👍 9
  • ❤ 2
Post #50 2.88K
1️⃣🔤 Сервис проверки ТНФ

Всем привет!

10 лет к ряду постоянно сталкиваемся с некорректным пониманием того, как же на самом деле работают Требования Назначения Функциональности в кластере Лучшей в мире платформы 1С!

Поэтому вместе с командой РКЛ-ИнфоСофт написали сервис по проверке ТНФ на технологии 1С.Элемент и предлагаю вам им воспользоваться

https://lk-rkl.is1c.ru/tnf-checker-free

Что он умеет:
1. Анализировать файл реестра вашего кластера (никакие данные никуда не сохраняются, так что не переживайте!)
2. Визуализировать структуру вашего кластера со всеми ТНФ
3. Показывать как будет назначен сервис с учётом Объекта требования, имени базы и дополнительных параметров.
4. Можно выключать/включать сервера и затем проверять назначение
5. Можно добавлять/изменять/удалять ТНФ и опять проверять как сработает требование при новой структуре
6. Можно менять порядок следования ТНФ

❗️Сервис написан на основании описания ИТС и нашем опыте!

Если вы нашли неточность в определении пути требований сервисом в вашем кластере, то:
1. Пришлите мне в личку файл реестра кластера почистив его от паролей админов и субд.
2. Опишите в чём неточность

Мы всё посмотрим, и либо исправим неточность либо объясним почему ТНФ будут работать именно так как показал сервис.

Надеюсь сервис окажется очень полезным, так как красивый он уже 😄

Чуть не забыл главное!
Список требований отсортирован как и список баз! 😄
  • 🔥 61
  • 👏 13
  • 👍 7
  • 😱 3
  • 🙏 1
Post #49 2.77K
🔤🔤🔤 8.3.27.1989 (возможно что и 1964) Ошибка при запуска фонового

Если кто-то собирается обновиться на свежую 8.3.27, то нужно подготовиться!

Есть очень критичная проблема:
При запуске Фонового задания от пользователя, у которого не установлена возможность авторизации средствами 1С по логину и паролю, будет выходит ошибка как на скриншоте.

Такие Фоновые запускаются при Длительных операциях. например:
- Поиск в общем поле поиска
- Формирование ОСВ и т.д.

Есть зарегистрированная ошибка:
https://bugboard.1c.ru?state=prj-plt8gen-er-70139365

❗️Если обновление всё таки необходимо, то заранее проставьте у всех пользователей возможность авторизации средствами 1С и задайте очень большой и сложный пароль. Вводить его не придётся и пользователям его сообщать не надо.
  • 🔥 25
  • ❤ 19
  • 😁 6
  • 🤬 3
  • 😢 3
Post #46 5.6K
1️⃣🔤 Количество соединений на процесс

Есть такой параметр в свойствах Рабочего сервера 1С.
По умолчанию он равен 256, но в некоторых сценариях его необходимо менять и вот тут не всё так просто.

Кому можно менять этот параметр?
Всем, и ПРОФ и КОРП лицензии это позволяют (Многие путают этот параметр с параметром "Количество ИБ на процесс", вот он доступен только для КОРП)

Когда стоит менять этот параметр?

❗️Самый частый сценарий, это когда у вас на сервере 1С более одной NUMA-ноды.

Рабочий процесс работает только в рамках одной NUMA-ноды и если на сервере их 2, то мы получаем что сервер загружен максимум на 50% процессорной мощности, а при этом у пользователей ощущаются тормоза.

Распределением процессов по NUMA занимается операционная система и мы можем только увеличить вероятность равномерного распределения увеличив количество процессов.

Нам нужно настроить работу сервера 1С так, чтобы количество Рабочих процессов было хотя бы в 2 раза больше количества NUMA-нод.

Соответственно при 2х NUMA-нодах нам нужно обеспечить наличие минимум 4х Рабочих процессов при стандартной нагрузке на систему.

Практически единственный вариант это сделать – поменять количество соединений на процесс.

И вот тут начинаются тонкости:

1. Соединение не равно сеанс (рис. 1 и рис. 2). Т.е. ориентироваться на кол-во сеансов будет не совсем корректно, на рисунках мы видим что при 66 сеансах у нас 119 соединений
2. В свойствах Рабочего процесса есть поле «Соединений», на рис. 3 видим, что там 119 соединений, также, как и на рис. 2.
3. При этом в вычислении механикой Кластера 1С количества соединений для рабочего процесса НЕ учитываются соединения с номером 0

В нашем примере надо делить не 119 на 4, а 57 (именно столько соединений с ненулевым номером) и получим примерно 16.

❗️Менее частый сценарий - это когда количество соединений получается пограничное.
Т.е. у нас то чуть меньше 256, например 255 соединений, то чуть больше 256, например 259. Ну или чуть меньше и чуть больше текущего значения Количества соединений на процесс.

В итоге мы получаем очень частые старты Рабочих процессов для обслуживания новых соединений, свыше 256, а потом остановку этих же процессов, когда соединения закончили свою работу.

Старт рабочего процесса по требованию кластера это всегда старт с загрузкой контекста баз, а это достаточно тяжёлая операция для ЦПУ и соответственно "дорогая", и надо стремиться к тому чтобы таких операций было не много.

Тут уже подход к количеству соединений не по какой-то формуле, а просто в сторону НЕ кратного уменьшения или увеличения текущего количества соединений, чтобы Рабочие процессы если уж стартанули, то работали долго и счастливо.

Таким образом для корректной настройки параметра Количества соединений на процесс нужно взять только соединения с ненулевым номером.
Быстро это сделать можно выполнив экспорт списка соединений из консоли администрирования 1С в csv файл.

Имейте в виду эти тонкости при настройке своих серверов 1С для сбалансированной работы!
  • 🔥 44
  • 👍 26
  • 🙏 5
  • 👏 2
  • 👌 2
Post #44 2.87K
Всем привет!

Наверное многие заметили что Telegram в последние 2 дня сильно "замедлился"

Напоминаю, что канал есть в MAX https://max.ru/explorer1c

Но надеюсь что и текущий мессенджер тоже продолжит работать и радовать нас своим сервисом!
  • 👍 24
  • 👎 11
  • 😡 9
  • 🔥 4
  • 😱 3
Post #43 3.42K
Зарегистрирована ошибка 60029326
  • 🔥 22
  • 👍 11
  • 😱 3
  • 👏 1
Post #42 3.59K
🔤🔤🔤 8.5.1.1150 Толстый клиент

Новая мини-рубрика - срочно в канал!)))
В ней буду освещать критичные на мой взгляд ошибки, которые ещё не зарегистрированы.

Вот и пришло время обновиться на 8.5...

И поймали ошибку на скриншоте

Условие ошибки:
В конфигурации должен быть добавлен хотя бы один Элемент стиля
Подключаемся к ней на платформе 8.5.1.1150 в клиент-серверном режиме (в файловом всё работает)
Запускаем Толстый клиент
Авторизация 1С

❗️При этом конфигуратор запускается

Рецепты:
1. Не обновляться на 8.5, если используете Толстые клиенты
2. Перейти на прозрачную авторизацию AD, если давно собирались, но никак не находили для этого время
3. Указать логин и пароль в параметрах запуска, если это позволяет ваш сценарий

❗️Ну и главное - перед обновлением платформы максимально тестируйте все варианты запуска и работы 1С всех видов конфигураций, который у вас используется.
  • 🔥 19
  • 😱 10
  • 😡 4
  • 👍 3
  • 🙏 3
Post #41 2.48K
1️⃣🔤 Почему может не формироваться Технологический журнал 1С?

ТехЖурнал лучшей в мире платформы 1С (ТЖ) - это реальное отражение работы 1С с объективными цифрами и данными.

Он давно стал одним из основных инструментов в работе Экспертов, а уж при работе с КОРП клиентами по линии РКЛ это вообще незаменимая вещь!

При этом достаточно часто встречаемся с ситуацией, когда ТЖ "не хочет" формироваться и начинаются танцы с бубнами...

Ниже опишу основные причины этих танцев:

▫️Права на каталог сбора ТЖ.
Проблема проявляется когда есть процессы 1С, работающие из под разных пользователей операционной системы.
Например:
- Служба агента кластера (ragent, rmngr, rphost) 1С работает из под v81cuser, а служба Удаленного сервера администрирования (ras) работает под другим пользователем ras1c.
- Процессы кластера 1С (ragent, rmngr, rphost) работают под разными пользователями, каждый под своим
- Вместе с кластером 1С установлен также web-сервер с модулем публикации 1С, который тоже работает под своим пользователем

В итоге после настройки сбора ТЖ каталог будет создан с правами того пользователя чей процесс первым увидит и «осознает» новую или изменившуюся настройку, а остальным туда доступ на изменение будет закрыт. И мы получим, например, что у нас пишется ТЖ только процесса ras.

Рецепт: Необходимо заранее создать все каталоги размещения файлов ТЖ ( например log location="C:\TJ\RKL") и выдать им права на изменение всем пользователям всех процессов системы, которые могут писать ТЖ.

Ну и если уж совсем ничего не помогает, то создайте заранее каталог (C:\TJ), дайте на него все права всем и потом настройте сбор ТЖ в этот каталог.

▫️В файле conf.cfg текущей версии платформы прописали ConfLocation

Тогда система будет искать файл настройки ТЖ (logcfg.xml) именно в этом каталоге, а не каталогах по умолчанию %PROGRAMFILES%\1cv8\conf, /opt/1cv8/conf

Рецепт: либо расположить файл logcfg.xml в каталоге указанном в ConfLocation либо убрать эту строку из файла conf.cfg

▫️И наверное самое неочевидное – в файле logcfg.xml есть более одного тега log location и в одном из них указан несуществующий диск в системе Windows либо примонтированный каталог Linux

Тогда рандомно будет то записываться ТЖ, то нет, то от одних процессов, то от других.

Рецепт: во всех тегах log location файла logcfg.xml должны быть указаны существующие в операционной системе диски Windows либо примонтированный каталог Linux

▫️В каталоге сбора ТЖ находятся посторонние файлы

Тут сразу рецепт: в каталоге сбора ТЖ не должно быть ничего, кроме созданных согласно файлу настройки тж подкаталогов.
  • 🔥 25
  • 👍 11
  • ❤ 5
  • 🙏 4
Post #40 2.26K
Уже совсем скоро весенний Infostart Team Event

Ловите промокод для подписчиков на 10% скидки до 15.02.2026 23:59 мск

TEAM2026_DOROSHKEVICH
  • 🔥 24
  • ❤ 6
  • 👍 2
  • 🙏 2
Post #39 2.83K
🔤🔤🔤 OOMKiller - страшный сон Администратора баз данных.

Попробуем выяснить основные причины, неочевидные особенности работы Лучшей в мире платформы 1С и возможно ли с этим что-то сделать…
OOMKiller –система защиты Linux от перерасхода памяти.
Срабатывает, убивая самый «толстый» по памяти процесс в Операционной системе при приближении расхода памяти к 95%

Итак, в чём же вообще проблема?

В том, что неожиданно падает сервер PostgreSQL и по системным логам мы понимаем что он пал жертвой убийства со стороны OOMKiller.
Основной причиной такого поведения PostgreSQL является ошибка планировщика в том, где делать сортировку результата запроса.
Ошибка планировщика чаще всего возникает из-за отсутствия актуальной статистики по базе – это корневая причина

В итоге, при планировании запроса, планировщик уверен что сортировку можно произвести в памяти, так как по его прикидкам она влезет в параметр work_mem (например 256MB), так как получит на вход небольшое количество строк для сортировки и их размер тоже будет небольшим (например 100 строк, размером по 30КБ каждая). Эти данные планировщик получает из статистики.

Начав выполнение запроса СУБД уже не может ослушаться этой декларации планировщика и выполняет сортировку в памяти.
НО вместо предполагаемых 100 строк по 30КБ, что спокойно вмещается в 256МБ нам для сортировки прилетело 1,5млн строк по 30КБ, что уже занимает 42ГБ!
В итоге в процессе сортировки такого объёма в памяти, эта самая память или совсем закончится или её расход приблизится к уровню сработки OOMKiller-а.

Ситуацию усугубляется следующим:
❗️Убивать процессы нельзя! Это приведет к перезапуску всего PostgreSQL!
▫️work_mem устанавливается на каждое соединение. Т.е. у нас может сложится ситуация когда сразу несколько пользователей 1С сделают запрос к СУБД на такого рода сортировку…
▫️ Каждое соединение в PostgreSQL работает в отдельном процессе и при этом процесс не умеет худеть по памяти, он просто убивается как становится никому не нужным.
▫️ Платформа 1С удерживает idle соединения при необходимости (например в нём создавалась временная таблица и её можно будет переиспользовать) . Т.е. у нас может сложится ситуация, когда запрос выполнился, заняв 20ГБ RAM, при этом соединение удерживается и используется для других запросов, которым столько RAM не нужно.

Методы борьбы с этими негативными моментами:
❗️Убивать процессы нельзя! Это приведет к перезапуску всего PostgreSQL! А значит увидев что процесс работает (не idle) наш единственный шанс корректно завершить этот запрос, это отменить его выполнение на сервере 1С вычислив его по номеру соединения с СУБД.
▫️Необходимо содержать статистику в максимально актуальном состоянии. Настраивая агрессивный autovacuum, устанавливая нестандартные значения сработки autovacuum на больших таблицах, проводить vacuum analyze как регламентную операцию и т.д.
▫️Уменьшить work_mem, отслеживая как это повлияет и на план и на работу дисков
▫️Настроить OOMKiller. Чтобы он не убивал, а замораживал процесс OOMPolicy=continue, но это опасно, так как в итоге вся память может быть поглощена и работы вообще остановится.
▫️Отдельный пункт для борьбы с толстыми idle.
Мы можем вычислить ТОП-3 процессов, потребляющих память
ps -eo pmem,vsize,pid,cmd | sort -k 1 -nr | head -3

и увидеть такую картину:
6.6 12095572 2380533 postgres: postgres erp 10.27.24.1(64722) idle
6.6 12015844 2380844 postgres: postgres erp 10.27.24.1(64837) idle
6.4 12091534 2380682 postgres: postgres erp 10.27.24.1(64735) SELECT


Видим что в топе процессы с idle и только 1 с select.
В PostgreSQL есть параметр idle_session_timeout, по умолчанию 0.
Но мы можем выставить его в 3 сек, подождать 7 сек и обратно убрать в 0.
ALTER SYSTEM SET idle_session_timeout = 3000;
'select pg_reload_conf();
'ALTER SYSTEM RESET idle_session_timeout;


Таким образом мы корректно прервём соединения с 1С и СУБд сама корректно завершит наши объевшиеся процессы.
Негативный побочный эффект – временные таблицы платформе 1С придётся создать заново, но по сравнению с перезапуском СУБД это допустимо
  • 🔥 38
  • 👍 25
  • 👏 5
  • ❤ 3
  • 😱 3
Post #37 2.99K
❄️ 2025 - краткие итоги в цифрах

✈️ 28 перелётов, 2,5 раза облетел Землю по экватору (100 000 км в воздухе)

🎤 11 выступлений на 7 конференциях

🔤🔤🔤 144 часа обучения КОРП клиентов по PostgreSQL и Кластеру 1С

🧬 120 сотрудников КОРП клиентов в 5 городах обучены основам технологии 1С.Элемент

🏥 Проведено реанимационных мероприятий над упавшими продами - 5 шт

🦸‍♂️ Спасено 40+ баз на разрушенных СУБД без бэкапов 😢

⏩ Переведено на PostgreSQL 17 более 4 000 баз 1С

🚀 Ускорена масса запросов 1С с общей экономией серверного времени на их обработку более 3х лет за год

1️⃣🔤 В Лучшей в мире платформе 1С в рамках работ по РКЛ зарегистрировано:
27 недочётов - 10 уже исправлены
5 пожеланий и 4 исправления документации
❗️Рекорд - от написания обращения в КОРП ТП 1С по РКЛ до регистрации ошибки с получением её номера - 32 минуты

Канал в Телеграм, MAX и Dzen

❄️❄️❄️ Всех с Наступающим Новым Годом! ❄️❄️❄️
  • 🔥 99
  • ❤ 18
  • 👍 14
Older posts →
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 →