В предыдущей серии: Краткое содержание Части 1
Добро пожаловать в типичный ИТ-отдел крупной компании. Был тихий день: сеньор Михалыч флегматично чистил воблу, тимлид Антон Павлович пил кофе, а амбициозный 22-летний джуниор Данила (самопровозглашенный «Промпт-Архитектор») радовался жизни. Данила искренне верил, что ИИ уже заменил сеньоров, ведь нейросеть по его первому запросу сгенерировала синтаксически идеальный код для управляемых форм.
Идиллия рухнула, когда в отдел влетела менеджер по закупкам Таня с розовой флешкой. На ней лежал «маленький» прайс от китайских поставщиков на 300 000 строк Excel, который нужно было загрузить «быстренько и красивенько». Данила не растерялся и скормил ИИ новый промпт. Нейросеть авторитетно заявила, что для кроссплатформенной работы на Linux идеально подходит объект ТабличныйДокумент. Джуниор скопировал код, нажал кнопку «Загрузить» и… серверный процесс rphost сожрал все 64 ГБ оперативной памяти, нагрузил процессор на 100% и упал. База рухнула в разгар закрытия квартала у бухгалтерии, выкинув из системы главбуха Анастасию Марковну.
Опытный сеньор Михалыч отложил воблу, взял маркер и пошел к офисной доске и стал объяснять Даниле, как устроен реальный мир СУБД на физическом уровне.
Часть 2. Визит Анастасии Марковны - главбуха
Действующие лица:
Анастасия Марковна (Главбух) — 55 лет. Взгляд прожигает насквозь даже тимлида. Причёска в виде монолитного куба, зафиксированная лаком «Прелесть». Носит с собой огромные счёты как холодное оружие.
Таня — менеджер по закупкам. Мыслит категориями «красивенько», «быстренько» и «скидочки». При виде главного бухгалтера мгновенно вспоминает, что ей «срочно нужно забрать важные оригиналы документов на складе», и пытается боком, не поднимая глаз, просочиться к выходу из кабинета.
Джуниор (Данила). Медленно сползает под стол, судорожно имитируя бурную деятельность: делает вид, что проверяет надежность подключения сетевого кабеля к системному блоку, и мечтает остаться там жить до конца дня.
Сеньор (Михалыч) — резко убирает воблу на стол.
Тимлид (Антон Павлович) — судорожно пытается спрятать пустую кружку из-под кофе.
Акт 2. Данила завороженно смотрел на доску, где Михалыч только что закончил рисовать схему прохождения данных от клиента до физического диска.
В воздухе ИТ-отдела мгновенно запахло корвалолом. Порог кабинета переступила она — главный бухгалтер Анастасия Марковна...
Анастасия Марковна: (от ее крика дрожат даже стекла на окнах ) Так… Я не поняла. Кто у нас тут главный повелитель кремния и мышек? У меня до конца дня — сдача НДС за 3 квартал в налоговую горит. Я нажимаю кнопку «Сформировать декларацию», а мне пишет: «Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки!. Обратитесь к администратору сервера 1С.
Антон Павлович: Анастасия Марковна! Родненькая! У нас тут форс-мажор! Танюша из закупок принесла китайский прайс на 400 мегабайт, а Данила… Данила, пока я с Михалычем вышел из кабинета , поработал, и … сервер временно… прилёг отдохнуть.
Анастасия Марковна: (переводит взгляд на Данилу, тот сжимается до размеров 1С:Розницы) Данила, значит? Промпт-инженер? Слышь ты, нейросеть ходячая! Из-за твоего «хайпового» кода у меня сейчас декларация уплывёт прямо в руки налоговому инспектору! Ты мне штрафы как оплачивать будешь?!
Данила: (тихим голосом) Но Анастасия Марковна... я сделал за 5 минут кнопку «загрузить» и, между прочим, ИИ аргументировал это тем, что через Новый ТабличныйДокумент будет быстрее! Мы экономили такты процессора!
Анастасия Марковна: (медленно поворачивается к нему ) Такты процессора? Ты мне базу в «зависла», мамкин хакер! Знаешь, какие у меня будут «издержки», если до конца дня налоговая не увидит декларацию?! Я тебя самого в SQL-таблицу занесу! В колонку «Безвозвратно утраченные активы»!
Антон Павлович: (быстро прячет кружку в ящик стола и запирает на ключ) Я вообще чай пью! Исключительно зеленый, для нервной системы!
Сеньор (Михалыч): (разворачивается к клавиатуре, пальцы начинают порхать по клавишам) Так, отставить панику. Марковна, не кричи, серверу и так страшно. Этот юный падаван умудрился запустить транзакцию без разбиения на порции. TempDB на серваке раздуло так, что жесткие диски сейчас скрипят и просят пощады. База не просто висит, она сейчас в астрале.
Таня: (стоит у окна кабинета, смотрит на улицу, будто там есть ответ попроще) Ой, а если она в астрале, китайский прайс загрузится? Они же ждут подтверждения!
Михалыч: (открывает консоль кластера серверов 1С) Таня, солнце ты наше. Твой китайский прайс сейчас застрял где-то между оперативной памятью и астралом. (Смотрит в монитор). Ага, вот он. Сеанс Данилы. Сожрал 64 гигабайта оперативки и висит в статусе «Я познал бесконечность».
Данила: (с надеждой) Может, оно само отвиснет? Нейросеть писала, что нужно просто подождать...
Анастасия Марковна: (с грохотом ударяет костяшками счётов о край стола) Я тебе сейчас подожду! У меня НДС горит!
Михалыч: Умирает. Не отвиснет. Транзакционный лог забился. (Нажимает пару кнопок в консоли администрирования). Убиваю сеанс.
(На секунду в кабинете становится неестественно тихо. Даже гул кондиционера, кажется, замирает. На экране Михалыча выскакивает красное окно с ошибкой, затем консоль мигает).
Михалыч: Не понял. Сеанс не убивается. Этот скрипт от ИИ запустил фоновые задания, которые плодят сами себя! Данила, ты что туда скопипастил?!
Данила: (бледнея, вжимается в системный блок) Рекурсивный алгоритм самообучения... Чтобы цены сами подстраивались под рынок...
Тимлид: (хватается за голову) За что мне это?! У нас же просто оптовая торговля болтами! Какой рынок?! Какое самообучение?!
Анастасия Марковна: Я пошла к себе в кабинет если, Антон Павлович, через пять минут вы не оживите сервер, я за себя не ручаюсь.
Михалыч: (хрустит костяшками пальцев) До этого не дойдет, я здесь главный реаниматолог. (Подзывает к себе Данилу) Бери свой блокнот и пиши, что делать нужно в таком случае.
Бесконечное колесико ожидания — это не просто «1С думает». Это визуализация того, как сеанс пользователя встал в очередь к таблице СУБД. Пока СУБД не разрешит конфликт блокировок, интерфейс будет намертво висеть.
Михалыч решительно открывает рабочее окно, на экране разворачивается «СДР: Навигатор по конфигурации» — мощный профессиональный инструмент администратора. Чтобы не рисковать живыми данными в разгар аварии, Михалыч первым делом подключается к изолированной тестовой копии — показать джуниору механику работы. Это и есть та самая продвинутая консоль, вот ссылка на нее, которая позволяет увидеть всю изнанку информационной базы и мгновенно оценить ситуацию без долгого запуска Конфигуратора.
Сеньор Михалыч: Так, «промпт-архитектор», отставить панику. Смотри на экран и учись . Посмотри на верхний ряд серых вкладок (кнопок). Найди четвертую по счету вкладку — она называется «Активные сеансы». Кликни по ней мышкой.
Когда ты откроешь вкладку «Активные сеансы», перед тобой развернется список всех людей и фоновых заданий, которые прямо сейчас подключены к базе 1С. Там будет колонка «Имя пользователя», «Время начала» и, самое главное, технические параметры нагрузки.
Если база зависла из-за тяжелой транзакции, ты сразу увидишь его сеанс в этом списке — он будет выделяться аномально долгим временем выполнения или захватом ресурсов.
Прямо из этого окна (если у твоей учетной записи есть административные права) можно выделить зависший сеанс и нажать кнопку «Завершить сеанс» (или «Удалить»), чтобы мягко освободить базу СУБД, не перезагружая весь сервер целиком.
Данила: Ой, Михалыч, а почему тут пусто? Списки «Сеансы информационной базы» и «Соединения» вообще белые. База окончательно умерла?
Михалыч: База в коме, сейчас обе таблицы («Сеансы информационной базы» и «Соединения информационной базы») пустые, потому что консоль еще не подключилась к самому кластеру серверов 1С. Чтобы списки заполнились, нужно сделать одно простое действие.
Посмотри в самый верхний левый угол рабочего поля (под серыми вкладками). Там горит зеленая подчеркнутая ссылка: «Администратор кластера».
Кликни мышкой по этой зеленой ссылке «Администратор кластера».
У тебя откроется небольшое окошко запроса авторизации. Если у кластера 1С заданы имя администратора и пароль, введи их туда. Если администрирование без пароля, просто нажми «ОК» или «Подключиться».
Данила: Михалыч, а какой пароль?
Сеньор Михалыч: Пароль у нас на тесте пустой, так что просто дави «ОК».
Данила: Что произойдет после этого?
Михалыч: Как только консоль авторизуется в кластере, эта страница мгновенно оживет: в верхней таблице появится список всех активных сеансов (пользователей и фоновых заданий).
Если кто-то намертво повесит базу (как ты, Данила, со своими болтами), его строка подсветится в этом списке. И прямо здесь станет активной большая кнопка «Завершить сеансы...» (она сейчас серая и неактивная в верхней панели управления).
Данила: (судорожно сглатывает, наводит курсор на зеленую ссылку и кликает) Михалыч, я нажал! Окошко авторизации выскочило. Так, логин и пароль пустые, нажимаю «ОК». Пошло считывание! И что теперь?
Сеньор (Михалыч): Нажимай кнопку «Обновить».
Данила: (кликает мышкой) О, посмотрите! Я нажал «Обновить», и всё ожило! Консоль успешно считала данные с сервера 1С! Рядом с заголовком «Сеансы информационной базы» загорелась зеленая цифра (2) — это значит, что в базе прямо сейчас открыто ровно два подключения. Михалыч, а почему тут всего два сеанса? И всё так просто?
Сеньор (Михалыч): Да, сейчас всего два сеанса, потому что мы зашли на тестовую копию, чтобы разобраться в интерфейсе. Смотри, кто именно сейчас находится в базе:
• Первая строка (Конфигуратор): Кто-то зашел в базу через Конфигуратор.
• Вторая строка (Тонкий клиент): А вот это — наше текущее рабочее окно.
Ну давай, ради эксперимента выделяй вторую строку с Тонким клиентом и нажимай «Завершить сеансы...»! Тренируйся!
Данила: (затаив дыхание, наводит курсор и нажимает) Нажал! Михалыч, глянь, появилось то самое заветное окно подтверждения: «Отмеченные сеансы (1 шт) будут завершены. Продолжить?»
Михалыч: Нажимай «Да».
Данила: (ошарашенно) Я нажимаю «Да»! И всё так просто?.. Нажал одну кнопку, подтвердил — и процесс хирургически вырубился? Наш сеанс закрылся?
Сеньор Михалыч: В этой консоли — да, всё именно так просто, быстро и без лишней нагрузки на сервер. А теперь, когда ты понял механику и набил руку, переключаемся на наш боевой сервер кластера! Пора вычищать твои ИИ-шедевры из реальной базы, пока Анастасия Марковна не вернулась с тяжелыми счетами.
Данила: Но почему, если я нажал кнопку всего один раз, в консоли администрирования висит не триста тысяч строк из прайса, а несколько сотен зависших сеансов и процессов?
Михалыч: Данила, я открою тебе этот главный секрет «размножения» сеансов в 1С. Дело в том, что когда тяжелый код или неудачный скрипт от ИИ начинает выполняться на сервере, он порождает лавину процессов за кулисами.
Вот 3 основные причины, почему одно нажатие кнопки превращается в сотни зависших строк в консоли:
1. Фоновые задания (Background Jobs)
Ты написал код (или скопировал у ИИ), который не просто читал файл в один поток, а пытался ускорить процесс. Скрипт разбивал прайс на мелкие кусочки и на каждый кусок запускал метод ФоновыеЗадания.Выполнить(). В итоге одно нажатие кнопки породило сотни параллельных фоновых заданий, каждое из которых зарегистрировалось на сервере 1С как отдельная строка-сеанс!
2. Пул соединений СУБД (Connection Pooling)
Когда эти сотни фоновых заданий ломанулись в базу данных (MS SQL или PostgreSQL), СУБД не могла пропустить их через одну «дверь». Платформа 1С начала динамически открывать новые и новые физические соединения с SQL-сервером, чтобы параллельно записывать строки. В нижней таблице вашей консоли («Соединения информационной базы») в этот момент как раз и выстроились бы те самые сотни строк блокировок.
3. Рекурсивные повторы (Авто-рестарт)
Если фоновое задание в 1С падает по ошибке (например, не успело записать строку из-за блокировки Lock Timeout), кластер сервера по умолчанию пытается запустить его заново несколько раз. В результате старые зависшие сеансы еще не успевали закрыться в памяти, а сервер уже плодил новые попытки выполнить этот же китайский прайс.
Данила: Михалыч, как среди нескольких сотен зависших сеансов выбрать именно нужную строку чтобы удалить ее?
Михалыч: Если сервер намертво завис, в консоли висят сотни или тысячи процессов (сеансов), удалять их по одной вручную — это сизифов труд. К тому же, пока ты удаляешь одну строчку, сервер успеет расплодить ещё пять новых.
В реальной практике и в нашей консоли используется 3 главных правила, чтобы хирургически точно вычислить «виновника катастрофы» среди тысяч одинаковых строк. Пиши, Данила, эти правила прямо в блокнот:
Поиск «Пациента Зеро»: Как среди тысяч сеансов найти тот самый, который нужно убить?
Когда скрипт запустил лавину процессов, все строки в консоли кажутся одинаковыми — везде написано «Фоновое задание». Но для опытного программиста у каждой строки есть свой скрытый след.
Правило №1. Сортировка по времени («Кто первый встал — того и тапки»)
Запомни: блокировку всегда держит самый первый процесс, который зашёл в таблицу. Все остальные 299 строк — это просто безвинные жертвы, которые встали в очередь за ним и послушно ждут, когда им освободят дорогу.
Что делать в консоли: Нажми на заголовок колонки «Начало сеанса». Список отсортируется по времени. Тот сеанс, у которого время запуска самое раннее (например, он запустился на 5 минут раньше остальных), и есть наш «Пациент Зеро». Убивать нужно только его! Как только ты закроешь самый первый сеанс, вся остальная очередь из 299 строк мгновенно отвиснет сама за долю секунды.
Правило №2. Анализ колонки «Захват СУБД» или «Время вызова»
Тяжёлый и зависший процесс всегда выдаёт себя аномальным потреблением ресурсов серверов.
Что делать в консоли: Посмотри на колонки времени вызова (в твоей консоли можно настроить видимость колонок через кнопку Еще -> Изменить форму). Зависающий сеанс будет иметь колоссальное количество времени в графе «Время вызова (всего)» или «Захват СУБД», в то время как у остальных сеансов там будут нули или минимальные значения, потому что они просто спят в очереди.
Правило №3. Групповое хирургическое удаление (Массовый сброс)
А что делать, если ИИ-скрипт оказался настолько агрессивным, что фоновые задания продолжают плодиться быстрее, чем ты нажимаешь кнопку?
Что делать в консоли: В таком случае Senior-разработчики используют кнопку «Завершить сеансы...», но перед этим выделяют не одну строку, а используют комбинацию клавиш Shift или Ctrl+A, чтобы выделить весь куст фоновых заданий, и отправляют команду на массовое уничтожение.
(Михалыч отодвигает Данилу плечом, перехватывает мышку, мгновенно выделяет через Ctrl+A всю лавину зависших ИИ-сеансов на боевом сервере и решительно нажимает «Завершить сеансы...»)
Михалыч: Вот так это делается на боевой базе. Смотри на экран, Данила, база сейчас принудительно прерывает процессы и откатывает эту незавершенную транзакцию обратно.
(Проходит минута томительного ожидания. На экране бегут строки логов. Наконец, вентиляторы на сервере в углу сбрасывают обороты и начинают гудеть ровно и спокойно).
Михалыч: Всё. Служба поднялась. Транзакция откатилась. Кеш я почистил.
(Тут в кабинет заходит Анастасия Марковна, достает из кармана телефон и молча набирает кого-то из своих сотрудников)
Анастасия Марковна: Мариночка? Попробуй сформировать декларацию. Да, прямо сейчас. Жду.
(В кабинете повисает тишина. Данила практически не дышит. Через минуту из трубки доносится радостный, победный писк Марины)
Голос из трубки: Сформировалась! Ошибок нет!
Анастасия Марковна: (убирает телефон, тяжело выдыхает, и её монолитная прическа-куб кажется уже чуть менее пугающей) Слава тебе, Господи... Молодец, Михалыч! Порадовал.
Михалыч: Обращайся, Марковна! Мы всегда на страже. Но нам, Данила, этот китайский прайс всё равно придется грузить. Только теперь мы напишем нормальную обработку через правильное чтение файла и объектную модель 1С с разбиением на порции. Это будет выполняться чуть дольше, зато сервер даже не чихнет.
(Дверь за Главбухом закрывается) Антон Павлович достает свою пустую кружку, мечтая налить туда чего-нибудь покрепче ... черный кофе.
Новички, запомните: Главбух — это главный босс в любой конфигурации 1С. Если ваш код делает её несчастной, сервер не спасёт даже ChatGPT-6. В следующем акте Михалыч наконец-то возьмёт файл Excel, превратит его в ZIP.
Вступайте в нашу телеграмм-группу Инфостарт