Любовь. Быстродействие. 1С

26.05.22

База данных - HighLoad оптимизация

Несколько эпизодов на общую тему, собранные за последние полгода. Первый вариант, будет исправляться и дополняться.

Опорная инфраструктура.

Перед Новым Годом наши пользователи работали особенно активно, стала заметна медленная работа 1С, решено провести работы по оптимизации. Надежда на успех подпитывается наблюдением: в выходные апдекс 0.7 в будни апдекс 0.6 (пользователей и операций больше в десять раз). То есть быстродействие деградирует с ростом числа пользователей и операций, что свидетельствует о наличии в системе «узких мест». Для мониторинга ресурсов используем PRTG - это намного удобнее, чем Performance monitor. Хосты под управлением гипервизора удобно смотреть в разделе VMWareCenter.

  • Сервер СУБД на отдельном (физическом) хосте.
  • Сервер приложений на виртуальной машине. Выделено ровно 12 ядер, больше служба 1С не использует согласно лицензии.
  • Большинство клиентов располагаются на нескольких терминальных серверах, подключения к которым распределяет nginx. Терминальные сервера – виртуальные машины под управлением WMware. Вся архитектура построена до моего прихода, 1cFresh не используется.
  • В качестве накопителей данных все серверы используют промышленное  хранилище.

Беглый осмотр параметров производительности (сенсоров PRTG) не показал проблем: RAM достаточно, сеть не загружена, средняя загрузка CPU от 40 до 70%, очередь чтения/записи на диск отсутствует. Но проблемы были: при обычной работе в 1С экран зависал, становился неактивным. Через несколько дней размышлений, вспомнил курс 1С:Эксперт: возле самого медленного узла должны быть очереди. Стал смотреть не процент активности (доступности), а очередь:

  1. Очередь обращений к CPU на терминальных серверах необычно большие значения. Конечно, процессор быстрее жесткого диска, но любая очередь воспринимается пользователем как замедление. Было принято решение зарезервировать частоту виртуальных ядер, чтобы гипервизор не тратил времени на изменение частоты, а слабое ядро не зависало под нагрузкой. После резервирования частоты ядер, зависания на клиенте исчезли, хотя очереди остались. Виртуальные ядра искажали процент загрузки CPU. На графике до конфигурирования: загрузка 60, очередь 383.

 

 

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

При выводе графика нужно следить, чтобы период вывода соответствовал периоду сбора данных, иначе возможна большая разница из-за усреднения. В пиках до 871, а в среднем – 37. Обратите внимание: на выходных (06,07 февраля) очереди CPU нет - быстродействие по apdex значительно выше.

 

 

Затраты CPU на обслуживание гипервизора составляют около 10%. Накладные расходы виртуализации.

  1. Очередь к оперативной памяти – это файл подкачки. Оказывается, наши сервера его используют, даже когда свободно 200 Гб RAM. (Общая память хоста, которую может использовать каждая виртуальная машина) Запрещаем файл подкачки в настройках ОС Windows, если памяти достаточно. Например, для сервера приложений устанавливаем размер RAM виртуальной машины 60 Гб. Максимальный размер rphost будет равен 48 Гб (60 * 80% = 48). Оставшихся 12 Гб хватит для операционной системы. На сервере СУБД размер используемого RAM настраивается в свойствах СУБД. На своих серверах – думайте самостоятельно.
  2. Очередь к хранилищу данных на запись больше 1 для нас существенна. Потому что у нас пятый RAID. Нужно проверить расписание бекапов, терминальный сервер и сервер приложений можно архивировать гораздо реже, чем рабочую базу.
  3. Единственное устройство, для которого я не смог найти сенсора очереди – это сетевой интерфейс. Зато я понял, что измерения скорости и объема трафика должны быть для всего хоста, а не для отдельных виртуальных машин.

Появилось понимание, что можно улучшить в инфраструктуре. Подозрение на «узкое место» - CPU сервера терминалов. Проблема была решена: купили дополнительный процессор. Апдекс показал заметный положительный эффект.

Технологический журнал на клиенте.

Соберем технологический журнал. Конфигурационный файл logcfg.xml копируем в каталог conf на всех (клиентских) терминальных серверах.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
 <dump create="false"/>
 <log location="C:\Users\Public\Documents\Log" history="24">
  <event>
   <ne property="name" value=""/>
  </event>
  <property name="all"/>
 </log>
</config>

Анализ обращений к серверу.

При обращении к серверу возникают группы записей VRSREQUEST – SCALL – VRSRESPONSE с одинаковым контекстом, длительность события SCALL равна разности во времени VRSREQUEST –VRSRESPONSE. Данных о загрузке CPU или памяти в этих записях нет, но можно найти наиболее длительные события. Скрипт bash похож на скрипт для анализа событий CALL технологического журнала на сервере.

Проверка сетевых соединений.

00:14.041001-0,CONN,0,process=1cv8c,OSThread=95348,Txt='Ping direction statistics: address=ХХ.ХХ.ХХ.ХХ:1560,pingTimeout=15000,pingPeriod=3000,period=10047,packetsSent=4,avgResponseTime=0,maxResponseTime=0,packetsTimedOut=0,packetsLost=1,packetsLostAndFound=0'

00:54.303001-0,CONN,0,process=1cv8c,OSThread=95348,Txt='Ping direction statistics: address= ХХ.ХХ.ХХ.ХХ:1560,pingTimeout=15000,pingPeriod=3000,period=10063,packetsSent=3,avgResponseTime=0,maxResponseTime=0,packetsTimedOut=0,packetsLost=0,packetsLostAndFound=1'

Сначала пакет потеряли, потом все-таки нашли. Может ли это говорить о проблемах в сети ? Надо убедить администраторов проверить сеть утилитой iperf.

Проверка доступности лицензий.
Один из ключей 500 пользователей, использовано 216, ошибок нет.

02:22.429000-15993,HASP,2,process=1cv8c,OSThread=10188,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORG8B,,,,)->CurUsr=216,UsrLim=500,type=65535,remain=65535'

02:22.429002-1,HASP,2,process=1cv8c,OSThread=10188,Txt='NETHASP_LASTSTATUS(,prog=17,ser=ORG8B,,,,)->NStat=0,SysErr=0,stat=0,'

Но к сожалению, некоторые действия &НаКлиенте не оставляют след в технологическом журнале.
Например, этот код (не обращается к серверу).

&НаКлиенте
Процедура ПоказатьОтсчет(Команда)

Для Счетчик = 1 По 999 Цикл  
Состояние( Цел(Счетчик/10) );             
КонецЦикла;

КонецПроцедуры

Некоторые события (Например, сообщения СистемыВзаимодействия) выполняются на уровне платформы, не попадают в технологический журнал. Чем меньше таких событий – тем лучше. Подумайте несколько раз, нужно ли Вам использовать СистемуВзаимодействий. (Администрирование – Интернет-поддержка и сервисы – Обсуждения). Другая тяжелая операция - вывод сообщений, регистр «Напоминания пользователя». Удалите лишние записи регистра.

Наследие Огненной Лисы.

Запустим программу 1С в браузере, откроем меню Другие инструменты – Инструменты веб разработчика – Профайлер. Начнем запись, дождемся, пока откроется окно напоминаний в 1С, захватим запись. В профайлере доступна информация по состоянию окна (скриншоты), загрузка локальных ресурсов Network, GPU, CPU в разрезе pid процессов.

 

 

  1. Красная полоса указывает на проблемы с производительностью. В контекстной подсказке написано «performance problem». Обозначим первый период нагрузки ( 11.55, 11.80 ).
  2. На протяжении ( 11.55, 11.80 ) главное окно программы остается неизменным (смотрим миниатюры скриншотов), подготавливается вывод напоминания.
  3. После 11.80  – появляется окно напоминаний (смотрим миниатюры скриншотов), нагрузка падает.
  4. На протяжении ( 11.55, 11.80 ) загрузка CPU около 91% процесс pid 7512  (разноцветные горы Рериха на рисунке).
  5. Обозначим второй период нагрузки ( 11.85, 11.90 ). После 11.90 – в окне напоминаний появляется информационная строка (смотрим миниатюры скриншотов), нагрузка падает.
  6. На протяжении ( 11.85, 11.90 ) загрузка CPU около 94% процесс pid 7512  (разноцветные горы Рериха на рисунке).
  7. Так выглядит окно напоминания в типовой программе, которое мы открывали.

Полученные в профайлере результаты указывают, что на подготовку и вывод окна напоминания расходуется 91-94% CPU в течение 300 мс, даже если в нем только одна строка. Не буду указывать параметры своего CPU. Кто захочет – легко повторит. Событие напоминаний достаточно частое, чтобы вызвать зависания клиента, которые накладываются друг на друга, особенно если используется терминальная ферма.

Памятка для пользователей.

Начнем с отвлеченного примера. Пациент говорит врачу: «у меня болит все». Врач старается понять причину: назначает анализы, пытается перевести разговор в конструктивное русло. Если анализы не показывают ничего особенного, а пациент настаивает «у меня болит все», визит заканчивается: российский врач прописывает седативные, американский – антидепрессанты.

- Почему антидепрессанты – самые продаваемые препараты в мире?

- Потому что не на все вопросы можно найти ответы на этой земле, но неправильно заданный вопрос увеличивает шанс получить неполезный (вредный) ответ.

Итак, если «тормозит вся программа 1С» - перезагружаем компьютер. Проблема не ушла и у коллег тоже тормозит – позвоните.

Как правильно создать заявку ИТ, чтобы 1С стала работать быстрее?

Есть методика улучшения быстродействия, фирма 1С издала несколько книг и видео. Основа методики – разбить работу пользователя на ключевые операции и оценивать по времени каждую в отдельности. Примеры ключевых операций – «открыть окно подбора номенклатуры из документа заказ клиента», «найти клиента в списке клиентов по наименованию», «открыть документ заказ клиента» …

Для каждой ключевой операции фиксируем время секундомером до улучшения быстродействия, выполняем улучшения, снова фиксируем время. Ключевая операция «открыть окно подбора номенклатуры из документа заказ клиента» выполняется в среднем 20 секунд. Если мне удастся улучшить ее на 5 секунд – я буду счастлив. Освободятся ресурсы сервера и время пользователей. В перспективе нескольких лет фирма получит хорошую выгоду. В то же время, человек без секундомера разницу между 15 и 20 секунд почти не ощущает.

Нужны параметры ключевой операции. Подбор с остатками открывается дольше, чем подбор без остатков. Чем больше дополнительной информации, тем медленнее открывается подбор. Все справедливо.

Нужно знать имя пользователя, под которым запускается программа. Чаще всего, с полными правами не тормозит, но дать всем полные права – невозможно.

Нужен режим запуска программы: вебклиент или терминальное подключение. Например, для режима вебклиент, сигнал Москва - Владивосток всегда задерживается на 0,1 секунды. Один-единственный кабель длиной во всю страну, который невозможно заменить, невозможно улучшить. При открытии подбора, обмен данными между пользователем и сервером может происходить десятки раз, задержка вырастает до нескольких секунд.

Нужно знать время, когда ставился опыт, чтобы оценить состояние сервера, сети, интернет-соединения, технологического журнала в это время. У нас все ходы записаны. Контора пишет.

Немало требований, да? И это лишь минимально необходимый набор по методике 1С. Мне пришла удачная идея: снимать монитор пользователя во время ключевой операции на смартфон. Постарайтесь захватить верх монитора - заголовок программы, центр монитора - ключевую операцию с дополнительными параметрами, низ монитора – запущенные программы и время. Видео присылайте почтой, в заявке приложите ссылку.

Хорошие пользовательские истории.

Поиск партнеров по реквизитам.

Попросил пользователя снять на смартфон процесс поиска. Возможности поиска гибкие, можно было найти торгового партнера по части телефона или части наименования. Для того, чтобы найти все варианты, происходит сканирование справочника Партнеры, индексы не используются. Оказалось, пользователь ищет по точному наименованию партнера, со всеми пробелами и запятыми. Согласитесь, это было неожиданно, чаще всего используют часть наименования. Юридическое наименование может не совпадать с нашим внутренним. Вместо универсальной кнопки «Найти» сделал специальные варианты поиска, которые используют внутреннюю структуру базы данных, в прозрачном для пользователя варианте:

 

 

Для поиска по телефону сделал дополнительный регистр с перевернутыми номерами.

Выполнение запроса сделал в привилегированном режиме, без RLS, учитывая, что в запросе явно установлено ограничение по доступным подразделениям.

Убрал автоматический вызов поиска по вводу значения, оставил только по кнопке. (Хорошее правило: если тяжелую процедуру можно запустить вручную – она не должна запускаться автоматически.)

В результате поиск стал выполняться 2 секунды вместо 25 секунд.

Поиск партнеров из списка

 

 

В списке выполняли поиск по части наименования. Поиск занимал дольше 15 секунд. Только благодаря видео удалось заметить, что в списке есть «лишняя» сортировка, найдите ее. Как думаете, сколько раз я посмотрел это видео? Сортировку принудительно убрал в процедуре.

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Список.КомпоновщикНастроек.Настройки.Порядок.Элементы.Очистить();

КонецПроцедуры

Теперь поиск выполняется 2 секунды. Программисты могут взять на заметку эту особенность реализации динамических списков. Поиск в динамическом списке не является ключевой операцией в классическом смысле.

См. также

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    5163    ivanov660    12    

56

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9287    Evg-Lylyk    61    

44

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5110    spyke    28    

49

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    7591    vasilev2015    20    

42

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    12459    241    ZAOSTG    82    

115

HighLoad оптимизация Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5687    glassman    18    

40

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    14098    doom2good    49    

71
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SAShikutkin 14 26.05.22 08:43 Сейчас в теме
Только благодаря видео удалось заметить, что в списке есть «лишняя» сортировка, найдите ее
А где видео?
4. user1677685 26.05.22 09:06 Сейчас в теме
(1)
А где видео?

Так на скриншоте заметна сортировка по "Основной менеджер"
5. vasilev2015 2723 26.05.22 09:27 Сейчас в теме
(1) Здравствуйте !

Не смог прикрепить видео, оно содержит личные данные пользователя.
Но это самый популярный вопрос, многие спрашивают )))
2. user1216930 26.05.22 08:50 Сейчас в теме
Было принято решение зарезервировать частоту виртуальных ядер

Подскажите, как это реализовали на vmware?
7. vasilev2015 2723 26.05.22 09:43 Сейчас в теме
3. platonov.e 160 26.05.22 09:03 Сейчас в теме
Но почему не "Любовь. Смерть 1С"?)
vasilev2015; user1677685; maksa2005; +3 Ответить
6. starik-2005 3088 26.05.22 09:34 Сейчас в теме
Я так понял, что проблему решила покупка еще одного процессора для сервера терминалов? Это весь посыл статьи? Т.е. если у вас загрузка CPU высокая, то купите еще один процессор?
ЗЫ: APDEX вроде как должен быть 0.95+, не?
JetBrain; +1 Ответить
8. vasilev2015 2723 26.05.22 11:26 Сейчас в теме
(6) sarcasm detected ))
alsan; Созинов; starik-2005; +3 Ответить
9. JetBrain 76 26.05.22 21:41 Сейчас в теме
добрый день. вопрос наверное не уместный но видимо речь идет про управляемый режим работы баз 1С? ну, а поскольку ответ предсказуем, так обратимся к основам их реализации, а точнее к веб технология. если вам приходилось проводить оптимизацию веб сайтов, то вы увидите такой момент, как перенос всей кешируемой "хрени" в оперативную память (при этом еще и файлы помещены в специализированную СУБД) для того чтобы эти сайты начали "шевелится". 1С видимо забыли, что задействовали кеширование форм, и с появлением этой фишки, все базы этого типа превратились в постоянные проблемы с этим файловым кэшем. Предполагаю, что пути решения лежат в аналогичном направлении, а все остальные действия только действительно сводятся к апгреду железа.
10. vasilev2015 2723 26.05.22 22:24 Сейчас в теме
(9) Здравствуйте !

Да, управляемые формы, УТ11. Но у меня нет ощущения тупика (безысходности).

Удалось найти проблему: всплески загрузки CPU при низкой средней загрузке.

В профайлере видно, что одно из окон непомерно утилизирует CPU что может быть причиной.

Возможное решение: переписать окно с таблицы значений на макеты.

Просто меня никто не торопит с решением, а сам путь уже пройден интересный,
с претензией на новизну.

Много ли статей об анализе производительности 1С на клиенте с применением firefox profiler ?
11. JetBrain 76 26.05.22 22:31 Сейчас в теме
(10) статья упакована на отлично, как конфетка, но стоит ли ее разворачивать)
12. vasilev2015 2723 26.05.22 22:47 Сейчас в теме
(11) в каком смысле разворачивать ?

Надо понимать, эта статья для редкого любителя.

Тема быстродействия никогда не станет

так популярна, как отчеты СКД :-))
13. JetBrain 76 26.05.22 23:02 Сейчас в теме
(12) в том смысле, что разворачивать анализы cpu, gpu и прочего, если узкое место в 1с сама технология используемая, в нее затолкали то, что в локальной сети не востребовано.
YPermitin; +1 Ответить
21. Hatson 536 16.05.24 14:33 Сейчас в теме
(12) кажется, здесь должен быть мой комментарий)
разноцветные горы Рериха на рисунке очень понравились!
Удалите комментарий, если сильно оффтоп.
22. vasilev2015 2723 16.05.24 15:43 Сейчас в теме
(21) Привет ! Рад видеть здесь твой комментарий. Просто записываю свою работу. Старый стал, боюсь забыть.
14. evvakra 311 27.05.22 10:54 Сейчас в теме
Николай, спасибо за статью!
Подскажите, почему в свое время сделали выбор в пользу PRTG? Чем хороша данная система мониторинга по сравнению с остальными (PerfMon понятно почему не рассматривается, но к примеру почему не Zabbix)? Есть ли возможность мониторить с помощью этой системы какие то специфичные для 1С показатели, к примеру подключаться к RAS и черпать какие то метрики оттуда?
15. vasilev2015 2723 27.05.22 11:07 Сейчас в теме
(14) Здравствуйте !

За мониторинг отвечают наши администраторы.
Сенсоров в PRTG много, есть возможность создавать свои.
Подключаться к RAS не пробовал.
16. PerlAmutor 155 28.05.22 17:55 Сейчас в теме
А в какой части статьи про "Любовь" рассказывается?

Чтобы снизить нагрузку на ядра процессора, компании 1С уже давно пора перейти на использование LLVM, чтобы байткод 1С интерпретировать в машинный язык. Начать активней использование параллельных вычислений (не только на стороне сервера) и по возможности использовать ресурсы GPU (для того же расчета себестоимости или отрисовки форм в 2D, OpenGL ES/WebGL есть и в браузерах). Кроме того использовать Peer2Peer технологии для распределения нагрузки на сеть. Нет смысла скачивать один и тот же кэш из централизованного места, когда им могут поделиться соседи (возможно даже быстрее, т.к. находятся ближе чем сервер).
17. gzharkoj 520 29.05.22 13:39 Сейчас в теме
Сталкивались с такой же проблемой. Теперь если форма динамического списка тормозит, то сначала отключаем все подозрительные колонки, по которым по логике поиск вестись не должен и проверяем, как без них работает, если лучше, то дальше ход анализа понятен.
vasilev2015; +1 Ответить
18. i_lo 214 29.05.22 16:32 Сейчас в теме
Добрый день!
nginx распределяет подключения к терминалкам. Он работает, как reverse proxy? Пользователи подключаются к терминалкам по RDP? Далее идет речь о web-клиентах. Пользователи работают в них, тогда почему речь о терминалках?
Очередь к оперативной памяти - есть такой счетчик в RPTG? Он собирается по windows системам? Интересно как.
В windows для сетевого интерфейса есть счетчик с очередью на отправку. Его PRTG не забирает?
Про profiler в браузере интересно. Спасибо!
19. vasilev2015 2723 29.05.22 17:58 Сейчас в теме
(18) Здравствуйте !

Nginx распределяет пользователей по серверам терминальной фермы.

Предположил, что ресурсозатратная операция в вебклиенте будет затратной и для RDP.

То, что "не помещается" в оперативную память - пишется в файл подкачки.
Поэтому файл подкачки я образно сравнил с очередью доступа к памяти.

Меня интересовал счетчик не Windows, а VMWare
20. i_lo 214 29.05.22 22:59 Сейчас в теме
(19) Скомкано спросил. Попробую уточнить.
Я знаю nginx, как web-сервер/reverse proxy/балансировщик нагрузки. С другой стороны терминалки и rdp. Полагаю, что windows. Если nginx умеет распределять пользователей по windows терминальным серверам, да ещё и с балансировкой, то это для меня что-то новое. Нужно будет поизучать.
По ресурсозатратности есть нюансы. На rdp будет трудиться скорее всего Тонкий клиент, написанный на C++. web-клиент же 1С написан на JavaScript. Плюс среды исполнения различаются. Первый взаимодействует напрямую с системой. Второй с webkit-ом. Возможно, подобие будет, а может и нет.
Компенсация недостатка памяти в виде обмена с файлом подкачки - я также это понимаю и анализирую. В Мониторе ресурсов это видно. А известны ли вам счетчики windows, которые это показывают?
Оставьте свое сообщение