#0
by Demetres
Всем добрый день!!! Подскажите как можно оптимизировать работу RLS? Есть динамический список с более чем 10000 записей. У пользователя стоит RLS на чтение такого типа «ГДЕ Ссылка В(&ДоступныеГруппыДоступаРесурсов)». ДоступныеГруппыДоступаРесурсов это параметр сеанса который заполняется при запуске базы, данные получаются запросом, не сильно большим, но требующим использование виртуальных таблиц. От пользователей поступила жалоба на медленную работу списка и нужно что-то сделать, от RLS отказаться нельзя :( У кого-нибудь есть идеи как оптимизировать RLS, если да то поделитесь пожалуйста
#1
by mikecool
>>ДоступныеГруппыДоступаРесурсов это параметр сеанса который заполняется при запуске базы, данные получаются запросом, не сильно большим, но требующим использование виртуальных таблиц. это не влияет на дин. список
#3
by Demetres
я понимаю, просто описал ситуацию, и чтобы было понятно что нельзя перейти на RLS типа ГДЕ Ссылка В(#ДоступныеГруппыДоступаРесурсов) т.к. необходимы вирт. таблицы
#7
by ptiz
Попробовать заменить В(...) на соединение с регистром сведений, куда и писать доступные значения вместо параметров сеанса.
#8
by Demetres
РС сведений добавлять не очень хочется, потому что RLS не для всех пользователей. У некоторых пользователей есть просто права на чтение без RLS.
#10
by kiruha
Нужно понимать , как работает динамический список - он выбирает данные по индексу, в основном - по коду или наименованию для справочников. Соответственно вместо ДоступныеГруппыДоступаРесурсов ДоступныеГруппыДоступаРесурсовКод - те же ссылки ввиде кода условие «ГДЕ Код В(&ДоступныеГруппыДоступаРесурсовКод)» И сортировка только по коду
#11
by Demetres
Код не всегда уникальный, а ссылка это аналог УникальногоИдентификатора и он всегда уникален в рамках одного справочника. Кстати забыл сказать, что это динамический список у справочника.
#13
by erp20
Ты сам конечно смотри, но перед тем как наложить фильтр в запросе по параметру сеанса, имеющему тип значений массив - 1С передает эти данные СУБД, они впоследствии собираются в таблицу операциями constant scan. Трудозатраты растут пропорционально количеству строк из которых таблица формируется. Можно обойтись без промежуточной передачи данных, если их хранить в СУБД, например в регистре сведений с двумя измерениями: Пользователь / Группа Доступа Ресурсов в RLS выбирать не из параметра сеанса, а из физической таблицы в БД.
#14
by Demetres
Получается что быстрее было бы если использовать РС типа (Ресурс: Пользователь; Измерение: Группа Доступа Ресурсов) а РЛС переделать на ГДЕ Ссылка В(#ДоступныеГруппыДоступаРесурсов) ДоступныеГруппыДоступаРесурсов - Это шаблон из этого РС?
#15
by erp20
Как то так: ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ГДЕ ИЗ В регистре ОграниченияДоступа хранишь списки доступных групп по пользователям. Пользователь и ГруппаДоступа должны быть измерениями!!Первым идет Пользователь, а потом Группа доступа!! Тогда получишь кластерный индекс, позволяющий мгновенно выбирать все группы доступа пользователя. Без передачи их с сервера 1С на сервер СУБД. А вообще ты уверен что именно в РЛС проблема?
#16
by erp20
Да, если у тебя группа доступа, в справочнике который ты фильтруешь по РЛС находится не в реквизите "Ссылка" (это пример) то этот реквизит должен быть проиндексирован.
#18
by Demetres
Похоже что кроме РС ничего придумать не получиться. Ребята большое спасибо за советы, вы мне очень помогли!!!
#19
by kiruha
Есть еще вариант, если данные только из группы доступа - использовать источник для таблицы проиндексированную "группу доступа" типа регистра с левым соединением к уже справочнику. Т.е. будет динамический список источник - произвольный запрос Небольшой геморрой с оформлением
#20
by kiruha
А вообще 10 000 записей в справочнике это вообще не о чем. Пол сек работы запроса для полной выборки
#21
by banco
еще вариант, не изобретать велосипед и использовать подсистему Управление доступом из БСП
#22
by Demetres
Переделал заполнение параметра и изменил RLS ГДЕ Не (Не (Владелец В (&ДоступныеГруппыДоступаРесурсов)) И Не (Ссылка В(&ДоступныеГруппыДоступаРесурсов))) Теперь получается в параметре всегда 1-3 значения. Как вы думаете то что я использую Не (Не [Условие1] И Не [Условие2]) вместо Условие1 Или Условие2 дает какой-то бонус по скорости?
#23
by Demetres
Если не ошибаюсь в запросах рекомендуют не использовать ИЛИ в ГДЕ потому что это равносильно разбиению на два запрос с ОБЪЕДИНИТЬ ВСЕ
#24
by Fragster
проблема именно в этом. вторая часть наоборот - рекомендуют использовать два запроса с объединить, ибо индексы и вся фигня, которая инкому не интересна
#25
by Fragster
нужно регламентно (или при записи или еще как, например обновлять параметр сеанса) переделывать иерархический список в плоский и в шаблонах уже его использовать
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Формирование КуДиР в Комплексной Автоматизации 1.1
- Убрать пустые колонки в отчете СКД
- Конвертация. Копирование ПКО.
- v7: Астор, ошибка смс узла
- Комплексная автоматизация 8. Начисление и выплата зарплаты
- УПП РАУЗ - АоПУ и РСВ не цепляет стоимость материалов
- Перестали заполняться документы на основании
- программно сформировать осв из обработки и сохранить в excel
- УТ11.1 - выгрузить из Заказа покупателя только товары в наличии
- Выгрузка и загрузка файлов конфигурации
- Сканер ШТРИХ-КОДА. Datalogic PBT 7100 не сканирует.
- зуп 2,5 - отчет личная карточка Т-2, вопрос зачем в макетах отчета -
- ЗУП начисление отпуска, вопрос по вычету
- как посчитать количество документов и вывести в СКД
- СКД - расшифровка по регистратору
- Вопрос по использованию /LogUI и "Преобразование журнала действий пользователя"
- при реализции в регистр накопления "Продажи себестоимость" как считаются?
- Вывод картинок на управляемую форму
- Как из ДанныеФормыСтруктура получить Структура?
- Обновление конфигурации поставщика с нередактируемыми объектами поставщика