Показано с 1 по 2 из 2
-
24.12.2013, 12:18 #1
- Регистрация
- 14.10.2010
- Сообщений
- 1
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
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 в 12:45.
-
05.01.2014, 00:25 #2
- Регистрация
- 28.06.2010
- Адрес
- Москва
- Сообщений
- 2
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Эта реализация вообще быстро работать впринципе не может. А на счет 6 млн. записей - это мизер для SQL.
Я так понимаю - это форма списка. Все формы списка в управляемых формах - это урезанная СКД. Вот отсюда и надо отталкиваться.
И ещё не очень понятны все эти конструкции с "ВЫБОР..."Последний раз редактировалось DmitryIV; 05.01.2014 в 00:34.
Социальные закладки