1С 8.3. Тормозит запрос по поиску данных в справочнике с 6 миллионами записей
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Показано с 1 по 2 из 2
  1. #1
    Гость форума

    Регистрация
    14.10.2010
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    Question 1С 8.3. Тормозит запрос по поиску данных в справочнике с 6 миллионами записей

    Доброго времени суток, Уважаемые!

    Подскажите пожалуйста, как можно оптимизировать поиск в справочнике с количеством записи больше 6 миллионов записей:

    Платформа: 1С Предприятие 8.3.4.365 (сервер 64b)
    СУБД: MS SQL 2008 64b
    Железо - 1 сервер для Сервера приложения и СУДБ:
    2 x Intel® Xeon® E5-2407 2.2GHz, 4-core, 10MB L3 cache
    6 x 4GB PC3-10600E RDIMM ECC
    4 x HP 450GB SAS 6G 15000rpm 3.5" Hot Plug MDL HDD
    Количество пользователей: более 250 (интенсивных 200)
    Канал связи для удаленных пользователей (около 200) - 1Mbs


    Конфигурация самописная на управляемом приложении.
    Справочник "Контрагенты" содержит более 6 миллионов записей.
    Индексы установлены по полям - ИНН, ВидКонтрагента.
    Индексы с доп.упорядочиванием - Фамилия, Имя, Отчетство.

    Конфигурацией пользовались почти год на платформе 1С 8.2.15.294 (32b).
    Штатные средства сильно тормозили при поиске контрагентов.
    Написали запрос для поиска (ниже по тексту), которая очень быстро работала на платформе 8.2 все это время.
    Несколько недель назад перевели на платформу 8.3.4.317 (32b).
    После этого поиск начал сильно тормозить и зависать.
    Попробовали все перевести на 64 битный. Тоже не помогло.

    ПОДСКАЖИТЕ ПОЖАЛУЙСТА, как можно оптимизировать поиск для платформы 8.3 ИИ

    ЗАРАНЕЕ БЛАГОДАРЮ!!!!

    Текст запроса:

    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
       СправочникКонтрагенты.Ссылка,
       СправочникКонтрагенты.ВерсияДанных,
       СправочникКонтрагенты.ПометкаУдаления,
       СправочникКонтрагенты.Предопределенный,
       СправочникКонтрагенты.Родитель,
       СправочникКонтрагенты.ЭтоГруппа,
       СправочникКонтрагенты.Организация,
       СправочникКонтрагенты.Код,
       СправочникКонтрагенты.Наименование,
       СправочникКонтрагенты.ПолноеНаименование,
       СправочникКонтрагенты.Фамилия,
       СправочникКонтрагенты.Имя,
       СправочникКонтрагенты.Отчество,
       СправочникКонтрагенты.ВидКонтрагента,
       СправочникКонтрагенты.ИНН,
       СправочникКонтрагенты.Комментарий,
       СправочникКонтрагенты.КодОКОНХ,
       СправочникКонтрагенты.ДатаРождения,
       СправочникКонтрагенты.Пол,
       СправочникКонтрагенты.НеЯвляетсяРезидентом,
       СправочникКонтрагенты.Регион,
       СправочникКонтрагенты.ОКОПФ,
       СправочникКонтрагенты.Страна,
       СправочникКонтрагенты.ОсновнойРасчетныйСчет,
       СправочникКонтрагенты.ЯвляетсяПредоставляющимДокументы,
       СправочникКонтрагенты.Ответственный
    ИЗ
       Справочник.Контрагенты КАК СправочникКонтрагенты
       ГДЕ
          ВЫБОР
             КОГДА &ЕстьОтбор ТОГДА
                ВЫБОР
                   КОГДА &ОтбиратьПоВидуКонтрагента = 1
                      ТОГДА СправочникКонтрагенты.ВидКонтрагента = &ВидКонтрагентаДляОтбора
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                И
                (
                ВЫБОР
                   КОГДА &ОтбиратьПоФамилии = 2
                      ТОГДА СправочникКонтрагенты.Фамилия ПОДОБНО &ФамилияДляОтбора
                   КОГДА &ОтбиратьПоФамилии = 1
                      ТОГДА СправочникКонтрагенты.Фамилия = &ФамилияДляОтбора
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                ИЛИ
                ВЫБОР
                   КОГДА &ОтбиратьПоФамилии = 2
                      ТОГДА СправочникКонтрагенты.Наименование ПОДОБНО &ФамилияДляОтбора
                   КОГДА &ОтбиратьПоФамилии = 1
                      ТОГДА СправочникКонтрагенты.Наименование = &ФамилияДляОтбора
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                ИЛИ
                ВЫБОР
                   КОГДА &ОтбиратьПоФамилии = 2
                      ТОГДА СправочникКонтрагенты.Фамилия ПОДОБНО &ФамилияДляОтбораЛат
                   КОГДА &ОтбиратьПоФамилии = 1
                      ТОГДА СправочникКонтрагенты.Фамилия = &ФамилияДляОтбораЛат
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                ИЛИ
                ВЫБОР
                   КОГДА &ОтбиратьПоФамилии = 2
                      ТОГДА СправочникКонтрагенты.Наименование ПОДОБНО &ФамилияДляОтбораЛат
                   КОГДА &ОтбиратьПоФамилии = 1
                      ТОГДА СправочникКонтрагенты.Наименование = &ФамилияДляОтбораЛат
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                )
                И
                (
                ВЫБОР
                   КОГДА &ОтбиратьПоИмени = 2
                      ТОГДА СправочникКонтрагенты.Имя ПОДОБНО &ИмяДляОтбора
                   КОГДА &ОтбиратьПоИмени = 1
                      ТОГДА СправочникКонтрагенты.Имя = &ИмяДляОтбора
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                ИЛИ
                ВЫБОР
                   КОГДА &ОтбиратьПоИмени = 2
                      ТОГДА СправочникКонтрагенты.Имя ПОДОБНО &ИмяДляОтбораЛат
                   КОГДА &ОтбиратьПоИмени = 1
                      ТОГДА СправочникКонтрагенты.Имя = &ИмяДляОтбораЛат
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                )
                И
                (
                ВЫБОР
                   КОГДА &ОтбиратьПоОтчеству = 2
                      ТОГДА СправочникКонтрагенты.Отчество ПОДОБНО &ОтчествоДляОтбора
                   КОГДА &ОтбиратьПоОтчеству = 1
                      ТОГДА СправочникКонтрагенты.Имя = &ОтчествоДляОтбора
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                ИЛИ
                ВЫБОР
                   КОГДА &ОтбиратьПоОтчеству = 2
                      ТОГДА СправочникКонтрагенты.Отчество ПОДОБНО &ОтчествоДляОтбораЛат
                   КОГДА &ОтбиратьПоОтчеству = 1
                      ТОГДА СправочникКонтрагенты.Имя = &ОтчествоДляОтбораЛат
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
                )
                И
                ВЫБОР
                   КОГДА &ОтбиратьПоИНН = 2
                      ТОГДА СправочникКонтрагенты.ИНН ПОДОБНО &ИННДляОтбора
                   КОГДА &ОтбиратьПоИНН = 1
                      ТОГДА СправочникКонтрагенты.ИНН = &ИННДляОтбора
                   ИНАЧЕ ИСТИНА
                КОНЕЦ
             ИНАЧЕ
                ЛОЖЬ
          КОНЕЦ

    Search.png

    Текст модуля для отбора:

    PHP код:
    &НаКлиентеНаСервереБезКонтекста
    Функция ИспользоватьОтборСписка
    (ПараметрОтбораЭкспорт
       
       Если ТипЗнч
    (ПараметрОтбора) = Тип("Строка"Тогда
          Если ПустаяСтрока
    (ПараметрОтбораТогда
             Возврат 0
    ;
          
    Иначе
             ПараметрПодобно1   
    Найти(ПараметрОтбора"%");
             
    ПараметрПодобно2   Найти(ПараметрОтбора"_");
             
    ПараметрПодобно3   0;
             
    Если ПараметрПодобно1+ПараметрПодобно2+ПараметрПодобно3>0 Тогда
                Возврат 2
    ;
             
    Иначе
                Возврат 1
    ;
             
    КонецЕсли;
          
    КонецЕсли;
       
    ИначеЕсли ЗначениеЗаполнено(ПараметрОтбораТогда
          Возврат 1
    ;
       
    Иначе
          Возврат 0
    ;
       
    КонецЕсли;
       
    КонецФункции

    &НаКлиентеНаСервереБезКонтекста
    Процедура УстановитьОтборСписка
    (СписокПараметрыОтбора)
       
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтбиратьПоВидуКонтрагента",   ИспользоватьОтборСписка(ПараметрыОтбора["ВидКонтрагента"]));
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтбиратьПоФамилии",         ИспользоватьОтборСписка(ПараметрыОтбора["Фамилия"]));
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтбиратьПоИмени",            ИспользоватьОтборСписка(ПараметрыОтбора["Имя"]));
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтбиратьПоОтчеству",         ИспользоватьОтборСписка(ПараметрыОтбора["Отчество"]));
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтбиратьПоИНН",            ИспользоватьОтборСписка(ПараметрыОтбора["ИНН"]));
       
       
    Список.Параметры.УстановитьЗначениеПараметра("ВидКонтрагентаДляОтбора",      ПараметрыОтбора["ВидКонтрагента"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ФамилияДляОтбора",         ПараметрыОтбора["Фамилия"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ИмяДляОтбора",            ПараметрыОтбора["Имя"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтчествоДляОтбора",         ПараметрыОтбора["Отчество"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ФамилияДляОтбораЛат",         ПараметрыОтбора["ФамилияЛат"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ИмяДляОтбораЛат",            ПараметрыОтбора["ИмяЛат"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ОтчествоДляОтбораЛат",      ПараметрыОтбора["ОтчествоЛат"]);
       
    Список.Параметры.УстановитьЗначениеПараметра("ИННДляОтбора",            ПараметрыОтбора["ИНН"]);
       
    КонецПроцедуры

    &НаСервере
    Процедура УстановитьОтбор
    ()
       
       
    ПараметрыОтбора Новый Соответствие();
       
    ПараметрыОтбора.Вставить("Фамилия",         ФамилияПоиска);
       
    ПараметрыОтбора.Вставить("Имя",            ИмяПоиска);
       
    ПараметрыОтбора.Вставить("Отчество",      ОтчествоПоиска);
       
    ПараметрыОтбора.Вставить("ФамилияЛат",      ФамилияПоискаЛат);
       
    ПараметрыОтбора.Вставить("ИмяЛат",         ИмяПоискаЛат);
       
    ПараметрыОтбора.Вставить("ОтчествоЛат",      ОтчествоПоискаЛат);
       
    ПараметрыОтбора.Вставить("ИНН",            ИННПоиска);
       
    ПараметрыОтбора.Вставить("ВидКонтрагента",   ВидКонтрагентаПоиска);
       
    УстановитьОтборСписка(СписокПараметрыОтбора);
       
    КонецПроцедуры   


    &НаКлиенте
    Процедура ФамилияПоискаПриИзменении
    (Элемент)
       
       
    ФамилияПоискаЛат   КонвертацияСКиррилицыВЛатиницу(ФамилияПоиска"рус");
       
       
    УстановитьОтбор();
       
    КонецПроцедуры 
    Последний раз редактировалось fox019; 24.12.2013 в 11:45.

  2. #2
    Гость форума
    Аватар для DmitryIV
    Регистрация
    28.06.2010
    Адрес
    Москва
    Сообщений
    2
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию

    Эта реализация вообще быстро работать впринципе не может. А на счет 6 млн. записей - это мизер для SQL.
    Я так понимаю - это форма списка. Все формы списка в управляемых формах - это урезанная СКД. Вот отсюда и надо отталкиваться.
    И ещё не очень понятны все эти конструкции с "ВЫБОР..."
    Последний раз редактировалось DmitryIV; 04.01.2014 в 23:34.

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •