Здравствуйте. 1С:Предприятие 8.2 (8.2.19.130), "Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.14.01). Конфигурацию модифицированная по хотелкам пользователей. Сервер: VDS/VPS Xeon CPU E5-1650 v4 3,6GHz 4 ядра/ 8Гб / Windows Server 2008R2 Std 64bit / Диск С: = 120Гб по уверениям датацентра наш сервер располагается на SSD диске.
Проблема в следующем, периодически возникают притормаживания при подборе товара, которые выражается в задержке при наборе артикула (номера товара) в списке товаров в форме подбора, и при дальнейшем помещении товара (по нажатии Ввода) во временный элемент формы ТабличноеПоле. Задержка между нажатием Ввода и появлением товара в ТабличномПоле может до 30 сек. После подбора товаров и нажатии кнопки ОтправитьВДокумент содержимое временного ТабличногоПоля переносится в документ (Реализация, Поступление и т.д.) и в этом процессе также может быть притормаживание, в зависимости от количества позиций во временном ТабличномПоле.
P.S. Такие тормоза не являются постоянными, а возникают бессистемно в любой момент времени, в основном это период приходится на середину дня или вечер около 16:30, четкого графика нет, продолжительность таких подтормаживание может отличатся по продолжительности, так и по силе, но в основном длится минут 20-30. При этом диспетчер задач не показывает скачков загрузки процессора на процессах 1С - иногда у некоторых это значение на секунду может увеличиваться на 2-3%.
Несколько раз при возникновении тормозов звонил в поддержку, они смотрели и отмечали, что запускался бекап сервера, который видимо успешно не выполнился ночью, после этого они останавливали бекап, но тормоза еще какое-то время продолжались. Поддержка ДЦ - перевели нас на SSD диск, сняли лимит по операциям на диске, но не помогает, и говорят, что проблема не на их стороне и что это проблема в конфигурации.
Подскажите пожалуйста, как можно найти причину данной проблемы, чтобы ее устранить. Если потребуется какая-нибудь дополнительная информация, я постараюсь ее предоставить.
При этом диспетчер задач не показывает скачков загрузки процессора на процессах 1С
Смотреть надо не процессор, а диск. Скорее всего винда делает свои построения индексов. Есть пара служб в винде, которые надо отключать.
Я бы посмотрел всякими пингами и трейсроутами моменты когда все хорошо, и когда тормоза. Если скажем датацентр будет делать свой бэкап (не конкретно на вашем серваке), то этот процесс будет занимать больше 8 часов. В этот период будет нагрузка на их сетевую периферию, ну и естественно, пропускная способность трафика снизится.
logist @ 26.11.16, 19:17
, Да база файловая. Работает около 10 пользователей. Регламентных заданий нет, каждый час планировщик windows запускает 1С с выполнением внешней обработки, которая выгружает остатки товаров на сайт и закрывается. Этот процесс занимает где-то 159 сек с учетом архивирования csv файла и отправки его на сервер и загрузки в таблицу. Индексацию делал где-то месяц назад в разрезе ТиИ, думал, что тормоза связанны с ошибкой, но тестирование и исправление и индексацией не помогли.
Цитата(Acid @ 28.11.16, 9:52)
Смотреть надо не процессор, а диск. Скорее всего винда делает свои построения индексов. Есть пара служб в винде, которые надо отключать.
Сегодня тормоза особенно сильные, смотрел монитор ресурсов - большие пики в потолок по диску, позвонил в техподдержку, там посмотрели и подтвердили, что в настоящий момент уперлось в лимит по диску. Спросил, могут-ли "соседи" по серверу создавать какую-то нагрузку, которая приводит к тормозам - сказали, что нет не могут, т.к. мы были переведены на кластер (не совсем понял что это означает, то ли кластер серверов, то ли кластер дисков).
А можете уточнить, что это за службы, которые нужно отключать?
померял ping Обмен пакетами с 195.248.225.40 по с 32 байтами данных: Ответ от xxx.xxx.xxx.xx: число байт=32 время=33мс TTL=54 Минимальное = 32мсек, Максимальное = 34 мсек, Среднее = 33 мсек
и tracert в момент тормозов
1 <1 мс <1 мс <1 мс 2 17 ms 17 ms 17 ms 3 18 ms 18 ms 17 ms 4 18 ms 18 ms 17 ms 5 46 ms 33 ms 32 ms 6 33 ms 34 ms 33 ms 7 33 ms 33 ms 34 ms 8 33 ms 34 ms 34 ms 9 34 ms 33 ms 33 ms 10 34 ms 33 ms 43 ms
Вроде не такой и большой пинг учитывая число прыжков
А можете уточнить, что это за службы, которые нужно отключать?
Одну помню - superfetch. Вторую не помню/не знаю.
По тестам видно - провал по сети. Пинг не критичный, но по нему видно, что в данный момент на ихних серверах что-то глобальное происходит. Или бэкап или восстановление бэкапа, etc. **Сейчас модно делать виртуальные серверы и они впаривают туда по самые помидоры. Диски не справляются - наверняка очередь зашкаливает.
Acid @ Сегодня, 14:49
, Техподдержка ДЦ предлагают подключить разработчиков конфигурации для анализа, но т.к. конфигурация немного модифицирована меня мучают сомнения, что они откажут. В частности модификация заключалась в следующем, была доработана форма подбора номенклатуры (из видимых): было
стало
Теперь вся информация находится перед глазами и не нужно прыгать по закладкам, чтобы увидеть нужную информацию. ТабличноеПоле "ПодобранныйТовар" используется для накопления подбираемого товара и потом отправкой его всего в документ - очень удобно и быстро получилось, т.е. набрал артикул нажал Ввод, в вопросе указал количество и набираешь другой артикул...
Плюс верхнее дерево и сам список товаров пришлось кинуть на панель (без закладок), т.о. ограничил их от нижней панели с закладками и перенастроил привязки, т.к. постоянно нарушалось построение элементов на форме - элементы наползали одни на другие сбиваясь в кучу, для восстановления нужно было выбрать "Восстановить положение окна", но это было до следующего открытия.
Но это все не влияет на тормоза.
Единственно, что дает визуализацию тормозов при непонятных нагрузках на диск это функция определения допустимого остатка при выборе товара, которая при выборе товара выполняет запрос на остаток и кол-во уже выписанного в реализациях, но еще не проведенных.
Функция ДопустимыйОстаток(Артикул) Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул); Запрос = Новый Запрос; ПодразделениеТекущегоПользователя = ""; Если ТекСклад = 0 Тогда Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровКомпанииОстатки.Номенклатура, | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки( | , | Номенклатура = &Номенклатура) КАК ОстаткиТоваровКомпанииОстатки"; Иначе Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровКомпанииОстатки.Номенклатура, | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, | ОстаткиТоваровКомпанииОстатки.СкладКомпании |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(, Номенклатура = &Номенклатура) КАК ОстаткиТоваровКомпанииОстатки |ГДЕ | ОстаткиТоваровКомпанииОстатки.СкладКомпании.РегионПродаж = &РегионПродаж"; Запрос.УстановитьПараметр("РегионПродаж", ТекСклад); КонецЕсли; Запрос.УстановитьПараметр("Номенклатура", Товар); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Остаток = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Остаток = Остаток+ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЦикла; Если Остаток = 0 Тогда Возврат Остаток; КонецЕсли; // Найдем и узнаем сколько пользователь уже добавил товара в подбор НайденаяСтрока = ПодобранныйТовар.Найти(Товар.Артикул, "Артикул"); ПодобраноКоличество = 0; Если НайденаяСтрока = Неопределено Тогда Иначе ПодобраноКоличество = НайденаяСтрока.Количество; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровТовары.Количество, | РеализацияТоваровТовары.Номенклатура, | РеализацияТоваровТовары.Ссылка |ИЗ | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров КАК РеализацияТоваров | ПО РеализацияТоваровТовары.Ссылка = РеализацияТоваров.Ссылка |ГДЕ | РеализацияТоваров.Проведен = ЛОЖЬ | И РеализацияТоваров.Дата МЕЖДУ &ДатаНачала И &ДатаКонца | И РеализацияТоваров.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура) | И РеализацияТоваров.СкладКомпании.РегионПродаж = &РегионПродаж"; ДатаНач = ДобавитьМесяц(НачалоДня(ТекущаяДата()), -1); ДатаКон = КонецДня(ТекущаяДата())+1; Запрос.УстановитьПараметр("ДатаНачала",ДатаНач); Запрос.УстановитьПараметр("ДатаКонца",ДатаКон); Запрос.УстановитьПараметр("Номенклатура",Товар); Запрос.УстановитьПараметр("РегионПродаж",ТекСклад); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); ВыписаноВДокументах = 0; Пока Выборка.Следующий() Цикл Если Выборка.Номенклатура = Товар Тогда ВыписаноВДокументах = ВыписаноВДокументах+Выборка.Количество; КонецЕсли; КонецЦикла; ДопустимыйОстаток = Остаток - ПодобраноКоличество - ВыписаноВДокументах; Если ВыписаноВДокументах > 0 Тогда ПоказатьОповещениеПользователя("ПОИСК В ДОКУМЕНТАХ: ",ПолучитьНавигационнуюСсылку(Товар.Ссылка), Товар.Артикул+ " уже выписано в не проведенных документах "+Символы.ПС+ "в количестве: "+Строка(ВыписаноВДокументах)+" шт.",БиблиотекаКартинок.Информация); КонецЕсли; Возврат ДопустимыйОстаток; КонецФункции
Назначение функции следующее если на остатке числится 5 шт болтов, 2 болта уже выписаны одним из пользователей, но реализация еще не проведена, а другой пользователь пытается выписать 4 болта, то функция вычислит что допустимый остаток 5-2=3 шт, что меньше 4 и выдаст сообщение, что допустимо 3 и кто-то уже выписал болты.
ИМХО данная функция не должна создает большой нагрузки, но по задержке в ее выполнении можно судить о силе тормозов происходящих на сервере.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(bizisoft @ 28.11.16, 15:54)
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Остаток = Остаток+ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЦикла;
Цитата(bizisoft @ 28.11.16, 15:54)
Пока Выборка.Следующий() Цикл Если Выборка.Номенклатура = Товар Тогда ВыписаноВДокументах = ВыписаноВДокументах+Выборка.Количество; КонецЕсли; КонецЦикла;
Перенесите всё это в запрос, бессмысленные циклы одна из причин тормозов.
Личные бесплатные консультации не даю, для этого есть форум!
Ну как размещение кучи информации на одной закладке может не повлиять на тормоза?
Эта информация отображается для выбранного элемента в процедуре ПриАктивизацииСтрокии не выполняется для всей номенклатуры сразу. Получается выполняется всего четыре быстрых запроса/выборки: остаток, цены, аналоги и заказы поставщикам по одному выбранному товару.
Цитата(sava1 @ 28.11.16, 16:15)
Перебор ТЧ документов за месяц, номенклатура в иерархии (+ скажите, что функция вызиваетя в ПРиВыводеСтроки ) - вот Вам и тормоза.
Функция вызывается ПриАктивизацииСтроки а в качестве параметра в запрос идет выбранный товар.
Цитата(logist @ 28.11.16, 16:16)
Перенесите всё это в запрос, бессмысленные циклы одна из причин тормозов.
А можно попросить подсказочку, как это организовывается?
сразу получаетя как ВыборкаДетальныеЗаписи.КоличествоОстаток
Я так изначально пробовал делать, но так выдает ошибку "типа нельзя преобразовать в число...", поэтому и вставил цикл по ВыборкаДетальныеЗаписи.Следующий().
мучает сомнение относительно точки Номенклатура.Артикул? ),
так нормально. по поводу перебора ТЧ документа: я бы при записи дока писАл товар в регистр, при проведении убирал - выборка товара была бы "быстрее" и не надо "лепить" период с документами. + получение остатков перенести в приПолученииДанных.
А остальное в норме. (во второй выборке тоже перебора не нужно)
Кстати, если в запросах будут использоваться ВТ(временные таблицы), естественно будет еще дополнительная нагрузка на диск. Вместо ВТ переделайте на Вложенные Запросы.
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1435 раз
Рейтинг: 0
Можете ещё показать структуру регистра ОстаткиТоваровКомпании?
т.к. база файловая, то единицей блокировки данных при записи является вся таблица целиком. Если в этот момент в базе идет "интенсивная" запись в таблицу ОстаткиТоваровКомпании, то работа с этой таблицей может быть проблемной. Нет ли случайно запросов в транзакции на чтение этой таблицы?
Попробуйте проанализировать код документов, которые пишут в этот регистр. Предполагаю что там выполняется контроль остатков перед записью, что в свою очередь вызывает тормоза из-за ожиданий на блокировках.
ИМХО тут действительно нужно проанализировать конфу как предлагают в ДЦ. Можно попробовать увеличить скорость записи данных, возможно там выполняется какой-то код, который неоправданно увеличивает время транзакции записи. Вообще решением так же может быть переход на SQL (возможно есть возможность использования какой-то бесплатной lite версии в ДЦ), тогда единицей блокировки данных будет уже запись, а не таблица и проверить что все запросы попадают в индекс при выполнении.
Можете ещё показать структуру регистра ОстаткиТоваровКомпании?
Вот пожалуйста.
Цитата(Acid @ 29.11.16, 17:57)
Вместо ВТ переделайте на Вложенные Запросы.
А можно пояснить логику работы 1с с запросами, т.е. где в запросе видно, что используются ВТ т.к. не совсем понимаю откуда они там взялись, если я их явно не указываю (ПОМЕСТИТЬ / ПОМЕСТИТЬ В)?
Цитата(sava1 @ 29.11.16, 16:56)
по поводу перебора ТЧ документа: я бы при записи дока писАл товар в регистр, при проведении убирал - выборка товара была бы "быстрее" и не надо "лепить"
Вы имеете ввиду, создать свой регистр накопления например "УжеВыписаные" со структурой как у ОстаткиТоваровКомпании и писать в него при записи, а при проведении удалять?
Цитата(sava1 @ 29.11.16, 16:56)
+ получение остатков перенести в приПолученииДанных.
А почему перенести в приПолученииДанных, а не вызывать, когда пользователь делает выбор товара? Если я не ошибаюсь приПолученииДанных вызывается перед выводом строк и выполняется для всех видимых строк, поэтому мне кажется это не подойдет, т.к. нужно получить ДопустимыйОстаток в момент выбора товара и только для него.
bizisoft @ Сегодня, 11:40
,
А может на тормоза как-то влиять ЖурналРегистрации, если для некоторых пользователей в правилах и настройках для правила "Вести журнал изменений документов" установлено в Истина ?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!