Архитектура ИТ-системы на базе 1С в крупной организации. Часть 2. Чудес не бывает
База данных - HighLoad оптимизация
Как то отвечая на комментарии предыдущей статьи (//infostart.ru/public/857978/) родилась идея следующей, которая позволит развернуто ответить на некоторые вопросы.
Основной комментарий, подтолкнувший к ниженаписанному таков:
Чудны дела, твои.... зависшие фоновые задания, сеансы и/или блокировки - известный бич, все его знают и в случае глюков сервера - чистят сеансовые данные. А вы говорите "не сталкивался". Поделитесь опытом, чтоль - как так пролучается у вас?
Я начну, пожалуй, с конца, то есть с вывода. Чудес не бывает. Да, именно так, астрология лженаука, благодатный огонь зажигают сами монахи, используя несложные химические фокусы, молния — это не гнев Зевса, а всего лишь электрический разряд.
В нашей, ИТ среде всё то же самое, чудес не бывает. К любой проблеме есть рациональное объяснение, поэтому, когда мы в Компании сталкиваемся с какой-то проблемой, первое, что мы делаем – стараемся максимально окружить её красными флажками, чтобы никто, не дай бог не нарушил шаткое равновесие работающей проблемы, после чего начинаем тщательно рассматривать её со всех сторон.
Немного отступлю от темы, так как текст данной статьи не согласован ни с моим руководством ни с компанией 1С я извещаю, что все нижеописанные примеры являются выдуманными от начала до конца.
Итак, что именно зацепило меня во фразе – «как вы боретесь с зависаниями системы». Но что такое зависания системы? Зависания клиента? Сервера? Медленно открывается форма — это зависание? Если да – то с какого момента мы начинаем считать зависание проблемой?
В части проблем я стойкий приверженец ITIL, несмотря на всю его академичность написан он исходя из реального опыта тысяч людей. Не буду вдаваться в теорию, просто скажу, что, по моему мнению, нельзя задавать вопрос – как вы боретесь с зависаниями. Правильней спросить – какое обходное решение вы используете для проблемы №739. Да, не все проблемные ситуации 1С фиксирует как дефекты, зачастую мы получаем сообщение – данная ситуация не является проблемной, но наша задача, как технических специалистов доказать в том числе и тех поддержке 1С то, что та проблема, которую мы зафиксировали именно проблема и её надо устранить, сначала предложив обходное решение.
Ладно, хватит теории, примеры.
История первая.
Всем работающим в сезонной рознице известно, что декабрь год кормит, так что любой сбой системы в декабре, особенно в заключительной декаде, зачастую приводил к увольнению даже топ-менеджеров от ИТ, что уж говорить об обычных админах. Так что, когда мы заметили, что наш application сервер уходит в 100% нагрузку началась лёгкая паника.
Итак, развитие событий.
1 декабря.

Небольшой пик, всё нормально, средняя нагрузка на уровне 80 процентов, нечего беспокоиться.
5 декабря. Нагрузка уже на уровне 90%.

10 декабря. Всё, мы уже в 100% и пользователи начинают испытывать проблемы с производительностью.

Сразу скажу, та авария многому меня научила и об этом в конце, а пока – что делать? Известно, что понять, чем занимается application-сервер невозможно, нет таких метрик ни в ТЖ ни в консоли (напомню, это 8.3.6). Принимаем единственно возможное решение, подключаем топов, выходим на специалистов из 1С, начинаем работать непосредственно с ними. Снимаем дампы, отправляем на анализ. Выясняется, что у нас есть кусок кода, в котором формируется текст запроса. Ну что то вроде: ТекстЗапроса = «Первая часть запроса» + «Вторая часть запроса» + «Третья часть запроса». Как мне потом говорили разработчики – это еще из типовой нам досталось, кусок по акционной механике, то есть данный код вызывается при каждом пробитии чека, причем несколько раз. Рекомендация 1С – заменить данный код на СтрСоединить.
Изменения в код были внесены 29 декабря. Результат виден на графике:

Выводы, которые мы сделали после той аварии:
- Запас мощности системы должен быть минимум 50%, лучше 100%, то есть система должна спокойно переживать двукратный рост нагрузки. Если какие-либо показатели превышают 50% от максимального значения – начинайте нервничать.
- У проблемы есть причина, при решении идите двумя путями, устраняйте последствия (поставьте еще один сервер, увольте 50% пользователей чтобы снизить нагрузку и т.п.), но параллельно ищите причину. Часто, устранив последствия, пропадает мотивация искать причину, всё же уже хорошо, поэтому иногда мы запрещаем устранять последствия обходным путём, если это стоит бизнесу не слишком дорого, а ищем причину сразу, не отходя от кассы.
- Если вам 10 человек сказали, что причина неизвестна и найти её не представляется возможным – ищите одиннадцатого.
История вторая.
Зависающее фоновое задание.
Появилось некое фоновое задание, которое могло длиться часами и не завершиться ничем. Причем судя по косвенным данным оно чем то занималось, причем весьма активно, так как после удаления сеанса нагрузка на application падала сразу на 10-20%, на SQL сессии естественно не было, иначе мы легко могли бы понять, что оно делает, что то крутилось именно внутри app.
Урок, который я извлек из этой истории таков. Любую (!!!) проблему с зависаниями можно решить с помощью технологического журнала. Если её нельзя решить с помощью ТЖ – значит её смогут решить только сотрудники 1С, так как тут требуется анализ дампов и доступ к исходникам. В нашем случае всё оказалось достаточно банально, в коде была ошибка, в результате которой задание уходило в пустой бесконечный цикл. Поправили код, еще одной загадкой стало меньше.
История третья.
Зависающие rphost-ы.
Периодически в системе возникала странная ошибка, пользователи не могли войти в неё, текст ошибки уже точно не помню, то ли «Нет доступных серверов» то ли что-то похожее, надо в почте порыться, но ситуация была странна тем, что те, кто уже зашёл в систему успешно продолжали работать. Некоторые пользователи всё-таки заходили, иногда с первого раза, иногда с пятого. Поиск ошибок по ТЖ показал, что все «неудачники» пытались подключиться к одному и тому же процессу, если этот процесс убить – проблема исчезала. Дальше схема уже стандартная по решению проблем. Ищем обходное решение и ищем причину проблемы. Ждать жалоб от пользователей, а потом убивать зависший процесс решение так себе. В итоге выяснили, что в ТЖ есть четкие записи – «вот плохой процесс, менеджер, убей его». Если в ТЖ одна такая запись – всё хорошо, менеджеру приказали, он убил, а вот если записей больше одной – это означает что менеджер попытался убить процесс, но у него не удалось и агент снова и снова приказывает убить отщепенца. Обходное решение – ставим данный процесс на мониторинг, в почту сообщаем о зависшем процессе, убиваем руками. Причина – дефект в движке, исправлено в 8.3.12. Справедливости ради скажу, что воспроизводится данный дефект по моей информации только у нас. У нас вообще в связи с объемами много такого, что не воспроизводится больше нигде, поэтому на всякий случай напоминаю – все случаи выдуманы!
История четвертая.
Зависающий клиент.
У нас порядка 8 тысяч работающих клиентов и вот появился ОН. При запуске система зависает. Висит окно запуска и всё, ни в какую, переустановка платформы не помогла, очистка кеша не помогла. В ТЖ всё очень аскетично.
17:25.704000-0,EXCP,0,process=1cv8c,OSThread=7856,setTerminateHandler=setTerminateHandler
17:26.297001-1,LIC,1,process=1cv8c,OSThread=7212,Func=initialize,txt='local Application, hasp HL SOFT local, ORGL8 local net, ORG8A local net, ORG8B local netBase local net'
17:26.297003-1,LIC,1,process=1cv8c,OSThread=7212,Func=getLicense,res=error,txt='0, client, error, local Application;
hard, local, Base, absent;
hard, net, Base, absent'
Делаем дамп процесса, отправляем в 1С – результат – система не может определить принтер по умолчанию. Проблема в драйвере принтера, попробуйте его переустановить.
Переустанавливаем, всё начинает работать. Что это было и почему в ТЖ пустота — это проблема, но мы сейчас пытаемся доказать, что это дефект в движке и зафиксировать его.
Как видите, все выше приведенные примеры разные, есть проблемы в движке, есть в коде, но на вопрос «что делать с зависаниями системы» у меня ответ один – разбираться, что именно зависает. Начните с анализа ТЖ, в 99% случаев вы найдете ответ там. Если ответа нет, нужно либо искать специалиста, обладающего достаточной квалификацией чтобы докопаться до причины либо передавать запрос в техподдержку 1С.
Чудес не бывает.
P.S. Начал перечитывать статью и понял, что не ответил на сам вопрос. Да. Мы чистим сеансовые данные, но не из-за глюков системы, а просто потому, что, когда 7 тысяч пользователей одновременно пытаются их прочитать, дисковая подсистема проседает и вместо запуска в течение 1 минуты пользователям приходится ждать по 10-15 минут. Когда обновление плановое, ночью, очищать сеансовые данные нет необходимости, нагрузка растет постепенно.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
HighLoad оптимизация Разработчик 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)
Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.
10.11.2025 15885 ivanov660 48
HighLoad оптимизация Разработчик 1С:Предприятие 8 1C:ERP Бесплатно (free)
Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.
18.02.2025 16492 ivanov660 39
HighLoad оптимизация Системный администратор Разработчик 1C:ERP Бесплатно (free)
Не всегда индексирование с дополнительным упорядочиванием полезно.
04.02.2025 15134 ivanov660 21
HighLoad оптимизация Разработчик Россия Бесплатно (free)
А вы знали, что сервер 1С при соединении с базой на сервере PostgreSQL самостоятельно устанавливает некоторые параметры? Это важно знать при настройке сервера и отладке долгих запросов. Предлагаю разобраться.
27.08.2024 10402 soulner 10
HighLoad оптимизация Технологический журнал Системный администратор Разработчик Бесплатно (free)
Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.
24.06.2024 19126 ivanov660 13
HighLoad оптимизация Разработчик 1С:Предприятие 8 Бесплатно (free)
Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.
06.06.2024 24976 Evg-Lylyk 73
HighLoad оптимизация Механизмы платформы 1С Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Сравним «Регистры сведений» с «Сервисами интеграции» и узнаем, кто быстрее!
28.03.2024 14634 dsdred 27
HighLoad оптимизация Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.
13.03.2024 14616 spyke 29
Ну начинается... Вы еще скажите, что 1С лучше САПа :)
Итак, автор утверждает, что "молния - это не гнев Зевса, а электрический разряд". Я с ним якобы не соглашаюсь и говорю что молния - это все же гнев Зевса, а САП - лучше чем 1С. Оба утверждения одинаково достоверны с "моей" точки зрения.
Что лучше?
1) Грейпфрут
2) Мандарин
3) Сэр Элтон Джон
4) Спагетти №7
5) Windows 10
Варианты ответов присылайте по адресу whocares@holywars.com
P.S. )))
P.P.S. sarcasm )))
P.P.P.S. любые совпадения с реальными объектами случайны!!!
Ну или прочитайте классику от Джоэла
(ухахахахахах)
в книге описывается пример конкатенации трех строк: рез = строка1 + строка2 + строка3 - при этом будет выделено 5 областей памяти (4 под переменные и одна для промежуточного значения строка1+строка2). Причина - строка является немутабельным объектом, который не может быть изменён на уровне платформы. Далее цитата с выводом:
Про СтрСоединить:
Про выделение памяти:
■ Размер – 40 байт для x86 и 64 байта для x64.
■ Может хранить короткие строки внутри себя (до 9 символов).
■ Для длинных строк используется дополнительная память размером 2*N символов.
только то, что учитесь делать дамп и отправлять его в техподдержку 1с.
в чем смысл иметь 7000 клиентов, и не иметь в штате крутого 1с-ника - который в отладке решит все вопросы с зависаниями и пиковыми нагрузками из-за кривого кода?
(15) вряд ли 1С примет к сведению такого рода ошибки - капля в море.
тоже самое касается таких поделок как ERP, я удивлен что 1С одной конфигурацией не попытались консолидировать вообще любое предприятие
если влияние двух или трех баз друг на друга еще как можно разобрать, то 50 разнородных баз с разнородной нагрузкой, а значит противоречивыми требованиями к дискам превращают всё в цирк
все умные, у всех попа прикрыта, только не работает и компания начинает нести убытки
у неискушенных руководителей шансов разобраться мало в том, откуда ноги растут, так как ошибка хоть и не слишком глубоко зарыта, но взять на себя ответственность учить подчиненных как организовывать ресурсоизолированность рискованно и вероятность сабатажа it-шниками такой инициативы 146%...
важно что можно было ли сделать по-другому и был бы другой вариант лучше
у вас что все пользователи используют данные всех других пользователей? нет конечно...
Что значит лучше? Тут же нет одномерной шкалы от -100 до +100, где -50 плохо, +36 нормально, а +90 хорошо.
Конечно большинство пользователей не использует данные друг друга, но возможность получать данные в онлайне для 1-2 ключевых пользователей, например для сайта оправдывает.... А что собственно оправдывает то? Какие варианты еще? РИБ?
а надо делать систему горизонтально масштабируемой, чтобы новые пользователи спокойно бы усаживались на дополнительный сервер
что делать - это уже следующий вопрос
у нас - 14 000 пользователей, мы делаем микросервисы, каждую функцию в отдельную базу закидываем, при этом это не лучший вариант
еще более правильней людей сажать в разные базы исходя из пересекаемости данных
можно делить не по функциям, а по ролям пользователей "модули"
к сожалению в 1С нельзя динамически добавлять таблицы (да еще бы хорошо не в одну базу данных), это главная проблема масштабируемости 1С
но я тут в двух словах быстро большую и сложную тему не смогу изложить
Как раз последний год, когда мы выросли с 3500 до 7000 пользователей (это был внеплановый рост, мы под него не закладывались) показал, что с горизонтальным ростом как раз всё хорошо, добавили app-сервера, вынесли регламенты на отдельный сервер, вот пожалуй всё, что потребовалось. А, ну и лицензии купили.
Было такое. Решил достаточно просто. Запустил конфигуратор, подключился к заданию отладчиком, нажал остановить. Прогнал код пару циклов и все стало понятно.
Вас обманули. Мы с этим дефектом живем уже пару лет.
А вот эта штука достаточно коварная. Частенько сталкиваемся с тем, что кто-то формирует печатную форму на одном компьютере, а потом переходит на другой и пытается сделать тоже самое там. Но настройки печати сохранены, в том числе и принтер по умолчанию и платформа падает/глючит, что угодно.
Спасибо за статью. Было бы интересно почитать еще с примерами анализа технологического журнала.
Запас мощности системы должен быть минимум 50%, лучше 100%, то есть система должна спокойно переживать двукратный рост нагрузки. Если какие-либо показатели превышают 50% от максимального значения – начинайте нервничать.
Вопрос к автору публикации: руководство также прониклось этой мыслью и выделило достаточное финансирование на реализацию этой идеи? Или...?
В том что мы не знаем, где стрельнёт. В 2016 году стрельнула смежная система, на которую мы завязаны, но на которую не можем повлиять.
В 2017 подготовились к ней, но стрельнуло в другом месте.
В итоге сейчас ставим нагрузочный стенд на 8 тысяч пользователей, но это достаточно трудозатратный процесс.
Надо мониторить за изменением нагрузки и ждать момента "беспокойства". А вот наличие аномалий, к примеру, внезапного серьезного падения производительности стоит исследовать незамедлительно с установкой сигнализации на такие ситуации.
Это означает что повышение нагрузки в 2 раза (на 100%) не приводит к остановке системы в связи с нехваткой ресурсов.
Про лишние расходы говорить не готов, с точки зрения бизнеса лучше (дешевле) платить год за недоиспользованные мощности, чем испытать часовой простой системы.
+1, причем только на проде, на тестовых повторить не получилось. В итоге мы то откатились на платформу на которой все еще было хорошо.
Поделитесь примером - в каком именно направлении вы смотрите, выявляя проблемные/зависшие сеансы?
Токмо вот с архитектурой скуля можно было поиграться да и... с серверами желтыми тож.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 858989
Создание 04.07.18 08:38
Обновление 04.07.18 08:38
Просмотры 19956
Загрузки 0
Рейтинг
86
Комментарии 74
Код открыт Да
Рубрики HighLoad оптимизация
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1С:Управление торговлей 11
Операционная система Не имеет значения
Страна
Россия
,
Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)