Имя: Пароль:
1C
1С v8
Критерии отбора. Производительность. Как ускорить?
0 Beduin
 
10.08.23
12:58
Сам запрос. Полностью типовой. Конфигурация ЕРП.

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СвязанныеДокументы.Ссылка КАК Ссылка
ИЗ
    КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СвязанныеДокументы.Ссылка КАК Ссылка
ИЗ
    КритерийОтбора.СвязанныеДокументы(&ОбъектРасчетов) КАК СвязанныеДокументы

Выполняется от 10 до 30 секунд.
В обоих параметрах просто ссылка на документ. Документов много. Как пример заказов, больше 100 тысяч.
1 lubitelxml
 
10.08.23
16:28
(0) а что тут оптимизировать собственно? Если это специализированная задача, то можешь попробовать по типу ограничения сделать, но не факт что сильно ускорит (так собственно в типовых и делается).
2 H A D G E H O G s
 
10.08.23
16:43
(0) Под полными правами/привелегированном режиме?
3 lodger
 
10.08.23
16:58
(0) если битые ссылки не пугают, то можно выполнять запрос в привилегированном режиме без слова "РАЗРЕШЕННЫЕ" в запросе.
4 Beduin
 
10.08.23
17:02
(2)(3) Я в консоли делал, под админскими правами. Тоже долго исполняется запрос.
5 ptiz
 
10.08.23
17:21
(0) Может сервер слабоват?
6 lodger
 
10.08.23
17:23
а не пробовал все поля где "документ основания" поставить в  "Индексировать с доп. упорядочиванием"?
7 Timon1405
 
10.08.23
17:26
долго выполняется запрос или долго выводится в консоль? выбрать Количество(*) также долго работает? если выполнить на скл и 1с время сопоставимо?
8 RomanYS
 
10.08.23
17:27
(6) по идее смысл КО как раз в том, что платформа сама создаст нужные индексы

"Важно учитывать, что критерий отбора всегда выбирает все искомые данные. Ни в списке, ни в других режимах не поддерживается динамическая выборка, так как информация выбирается путем объединения данных из разных таблиц. Формируемый для критерия отбора индекс позволяет сделать это достаточно быстро, но если данных в выборке окажется очень много, то выборка не будет формироваться эффективно. Поэтому целесообразно создавать критерии отбора по данным, имеющим большой разброс значений, чтобы выборки получались не очень большие. В противном случае теряется смысл такого отбора и снижается его эффективность.

Таким образом, критерий отбора является сервисной возможностью, предлагаемой разработчику конфигурации. Фактически, он позволяет интерактивно описать условие выборки, автоматически создать необходимые индексы, автоматически сформировать сложный запрос, включающий обращение к большому количеству данных и автоматически задействовать выборку по данному критерию в интерфейсе прикладного решения."
9 shuhard
 
10.08.23
17:28
(4) критерий не храниться в СУБД, это UNION ALL всей помойки, входящей в СвязанныеДокументы
смотри план запроса, либо регламенты не запущены, либо добавлено что-то без индексов
10 ptiz
 
10.08.23
17:30
(9) "либо добавлено что-то без индексов" - там же индекс автоматом добавляется, при включении в критерий.
11 H A D G E H O G s
 
10.08.23
17:35
(9) на erp так просто его не посмотришь. Действительный план профайлер скиппнет, там адова портянка будет. Забавно, но и запись плана в файл не всегда помогает.
12 lodger
 
10.08.23
18:05
(8) согласен, НО платформа какое-то время назад научилась комбинировать индексирование которые задает архитектор в КО и в реквизитах.

КО добавляет Индексирование по нужному полю, если его ещё нет.
если индексирование в реквизите уже включено, то КО юзает его.
если индексирование в реквизите сделать с доп.упорядочиванием, то КО будет искать по нему.

для меня остаётся загадкой, будет ли заметна разница. понимает ли КО поле порядка.

(0) сделай уже свой критерий отбора, с меньшим числом заюзанных документов.
13 shuhard
 
10.08.23
18:10
(11) поймал в ERP выборку из критерия, построил план, заняло пару минуи
в запросе UNION по 142 табличкам
используются кластеризованные и не кластеризованные индексы по шапкам и ТЧ документов
самый длинный 9%


что будет у ТС - хз
у меня заказов поставщику всего 30 000, запрос к критерию менее секунды
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший