Автор Тема: Исследование: почему файловая база 1С УТ11 медленно работает по сети  (Прочитано 5387 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ЖекаАвтор темы

  • Member
  • Карма: 0
    • Просмотр профиля
Столкнулся я с тем, что выбор из справочника Характеристик номенклатур открывается по 30 секунд.
Оказалось, что при моём размере справочника Номенклатура считывается около 38 МБ блоками по 4 КБ каждый раз при выборе характеристики.


Чтобы передать такой объем информации по сети требуется около 61 тыс. TCP-пакетов.
Средний размер пакета 897 байт.
Передано 55 МБ (с учётом накладных расходов).
Средняя скорость:
- 5,5 Мбит/сек по Wi-Fi
- 13 Мбит/сек по витой паре


Т.о. по  Wi-Fi вообще нереально работать, характеристика открывается 80 секунд!!!
По витой паре терпимее, "всего" 33 сек. // реально без сниффера процентов на 25 быстрее
 


Среди всех TCP-пакетов 40% занимает SMB-протокол.
Статистика по размерам пакетов:
40-79 байт -- 12248, 20%
80-159 байт -- 12322, 20%
1280-2559 байт -- 36635, 60%



Если просто качать файл по сети, то среди всех TCP-пакетов 4% занимает SMB-протокол.
Статистика по размерам пакетов:
40-79 байт -- 1976, 32%
80-159 байт -- 1166, 2%
1280-2559 байт -- 39223, 64%



По сети файл считывается первый раз и кэшируется компом, на котором лежит база.
При каждом обращении просто по сетевому интерфейсу отдаются всё те же 38 МБ, но только уже из кэша.



90% времени выполняется процедура ЗаполнитьДеревоОтборов() модуля формы выбора справочника ХарактеристикиНоменклатуры.
Она вызывается из процедуры ПриСозданииНаСервере()

 См. Приложене 1.

В том запросе считывается Справочник.ХарактеристикиНоменклатуры по переданному ВидуНоменклатуры
Т.к. владельцами этого справочника являются справочники ВидыНоменклатуры и Номенклатура, то
по-сути, он считывается весь, чтобы отфильтровать по виду номенклатуры владельца:
  ХарактеристикиДополнительныеРеквизиты.Ссылка.Владелец.ВидНоменклатуры = &ВидНоменклатуры



Такой размер справочника, потому что НаименованиеПолное -- Строка(1024) + у каждого элемента мин 2 строки в таб.части
23 тыс. элементов в справочнике
Ном-ра 6 тыс. элементов, у каждой по 3-4 свойства, вот и получается 23 тыс. элементов справочника характеристик.
Это из-за того, что в виде ном-ры выбираем использовать характеристики индивидуальные для номенклатуры.



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

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

Выполняется быстрее, т.к. исполняется другой запрос, который находится в процедуре ОбработкаПолученияДанныхВыбора модуля менеджера справочника ХарактеристикиНоменклатуры.
См. Приложене 2.

Этот запрос проще, т.к. выполняется фильтрация справочника по наименованию в конструкции ПОДОБНО,
а она, благодаря индексу, исполняется значительно быстрее.



В итоге получается 21 тыс. пакетов, 18 МБ, что в 3 раза меньше (и по времени, соответственно, всего 13 сек)





Приложение 1.

   Запрос.Текст =
   "ВЫБРАТЬ
   |   РеквизитыБыстрогоОтбораХарактеристик.НомерСтроки            КАК НомерСтроки,
   |   РеквизитыБыстрогоОтбораХарактеристик.Свойство               КАК Свойство,
   |   РеквизитыБыстрогоОтбораХарактеристик.ИмяРеквизита           КАК ИмяРеквизита,
   |   РеквизитыБыстрогоОтбораХарактеристик.ПредставлениеРеквизита КАК ПредставлениеРеквизита
   |ПОМЕСТИТЬ СписокСвойств
   |ИЗ
   |   Справочник.ВидыНоменклатуры.РеквизитыБыстрогоОтбораХарактеристик КАК РеквизитыБыстрогоОтбораХарактеристик
   |ГДЕ
   |   РеквизитыБыстрогоОтбораХарактеристик.Ссылка = &ВидНоменклатуры
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |   ХарактеристикиДополнительныеРеквизиты.Свойство               КАК Свойство,
   |   ХарактеристикиДополнительныеРеквизиты.Значение               КАК ЗначениеОтбора,
   |   ХарактеристикиДополнительныеРеквизиты.Свойство.Представление КАК ИмяРеквизита,
   |   ЛОЖЬ                                                         КАК Отбор
   |ПОМЕСТИТЬ СписокЗначенийОтбора
   |ИЗ
   |   Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиДополнительныеРеквизиты
   |ГДЕ
   |   ВЫБОР
   |      КОГДА ТИПЗНАЧЕНИЯ(ХарактеристикиДополнительныеРеквизиты.Ссылка.Владелец) = ТИП(Справочник.ВидыНоменклатуры)
   |         ТОГДА ХарактеристикиДополнительныеРеквизиты.Ссылка.Владелец = &ВидНоменклатуры
   |      ИНАЧЕ ХарактеристикиДополнительныеРеквизиты.Ссылка.Владелец.ВидНоменклатуры = &ВидНоменклатуры
   |   КОНЕЦ
   |   И ХарактеристикиДополнительныеРеквизиты.Свойство В
   |         (ВЫБРАТЬ
   |            СписокСвойств.Свойство
   |         ИЗ
   |            СписокСвойств)
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |   СписокСвойств.НомерСтроки                            КАК НомерСтроки,
   |   ХарактеристикиДополнительныеРеквизиты.Свойство       КАК Свойство,
   |   ХарактеристикиДополнительныеРеквизиты.ЗначениеОтбора КАК ЗначениеОтбора,
   |   ХарактеристикиДополнительныеРеквизиты.ИмяРеквизита   КАК ИмяРеквизита,
   |   ХарактеристикиДополнительныеРеквизиты.Отбор          КАК Отбор
   |ИЗ
   |   СписокЗначенийОтбора КАК ХарактеристикиДополнительныеРеквизиты
   |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокСвойств КАК СписокСвойств
   |      ПО ХарактеристикиДополнительныеРеквизиты.Свойство = СписокСвойств.Свойство
   |УПОРЯДОЧИТЬ ПО
   |   НомерСтроки
   |ИТОГИ ПО
   |   Свойство";




Приложение 2.

   Запрос = Новый Запрос("
   |ВЫБРАТЬ
   |   СпрХарактеристики.Ссылка КАК Характеристика,
   |   СпрХарактеристики.Наименование КАК ХарактеристикаПредставление
   |ИЗ
   |   Справочник.Номенклатура КАК СпрНоменклатура
   |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
   |   Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики
   |ПО
   |   СпрХарактеристики.Владелец = ВЫБОР КОГДА СпрНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ОбщиеДляВидаНоменклатуры) ТОГДА
   |         СпрНоменклатура.ВидНоменклатуры
   |      КОГДА СпрНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ИндивидуальныеДляНоменклатуры) ТОГДА
   |         СпрНоменклатура.Ссылка
   |      ИНАЧЕ
   |         ЛОЖЬ
   |      КОНЕЦ
   |ГДЕ
   |   СпрНоменклатура.Ссылка = &Номенклатура
   |   " + ?(СтрокаПоиска = Неопределено, "", "И СпрХарактеристики.Наименование ПОДОБНО &СтрокаПоиска") + "
   |УПОРЯДОЧИТЬ ПО
   |   ХарактеристикаПредставление
   |");




 :ps:  В релизе платформы 8.2.18 эту ситуацию вроде бы улучшили.
Справочник считывается 1-ый раз весь и кэшируется на приёмной стороне, поэтому выбор из него 2-ой раз происходит практически сразу.

 

Поиск