|
запрос работает неприлично долго | ☑ | ||
---|---|---|---|---|
0
Shur1cIT
06.09.21
✎
14:31
|
https://ibb.co/5GJSw5x
90 процентов выполнение запроса. реквизит рткЗаявкаНаТранспортДокументыОснования.Документ имеет тип "Документ" те все документы, те в результате запроса может быть любой документ, вопрос возник, как ускорить данный запрос? |
|||
1
Shur1cIT
06.09.21
✎
14:34
|
(0) есть гипотеза, с начало получить просто документы во временную таблицу, а потом уже нужные поля выдирать, но не уверен что поможет
|
|||
2
Мультук
гуру
06.09.21
✎
14:36
|
(1) Ты не пробуй дальше, особенно тут пробовать 5 мин переписать запрос
|
|||
3
Shur1cIT
06.09.21
✎
14:37
|
как понял в данном запросе запрос получает все документы, а потом уже накладывает условия, если бы можно было бы сразу условия при выборке наложить
|
|||
4
ads55
06.09.21
✎
14:37
|
(0) а зачем выбирать документ, если нужны только номер и дата?
|
|||
5
osa1C
06.09.21
✎
14:38
|
(0) А запрос в Функции, он не в цикл ли попал?
|
|||
6
Chai Nic
06.09.21
✎
14:39
|
Постгрес небось..?
|
|||
7
Shur1cIT
06.09.21
✎
14:39
|
(5) нет это реально одиночный запрос так долго обрабатывает, смотрел отладчиком.
(6) нет |
|||
8
ads55
06.09.21
✎
14:40
|
(0) много оснований для распоряжения. Да и через точку ещё. Сократить виды документов-оснований можно?
|
|||
9
Shur1cIT
06.09.21
✎
14:41
|
(8) нет к сожалению
|
|||
10
Shur1cIT
06.09.21
✎
14:42
|
(8) это давно уже до меня делали, задача ускорить насколько возможно
|
|||
11
osa1C
06.09.21
✎
14:42
|
(7) ну как в (4) документ тебе не нужен, тебе только номер и дата вроде нужна... убери документ из запроса
|
|||
12
MyNick
06.09.21
✎
14:46
|
(0) для получения представления поля Документ делается неявное соединение с таблицами всех документов.
|
|||
13
ads55
06.09.21
✎
14:46
|
(10) сделай регистр номера и даты оснований, пусть туда все номер, дата и ссылка на основание пишется. А запрос уже к нему делай.
|
|||
14
patapum
06.09.21
✎
14:46
|
(0) И реально там может быть любой документ из конфигурации, а не 5-6 разных типов? Не верю!
|
|||
15
Недопустимый
06.09.21
✎
14:49
|
(0) 90 процентов выполнение запроса.
90% от какого времени? |
|||
16
Megas
06.09.21
✎
14:53
|
ВЫБРАТЬ
&Ссылка ПОМЕСТИТЬ врТаб ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ врТаб.Ссылка.Дата, врТаб.Ссылка.Номер ИЗ врТаб КАК врТаб Даже так работает =) |
|||
17
acht
06.09.21
✎
14:55
|
(16) > ВЫБРАТЬ &Ссылка
Вот здесь ты неявно типизировал колонку, поэтому дальнейшее левое соединение будет только с одной таблицей. |
|||
18
Chai Nic
06.09.21
✎
14:59
|
В mssql очень неплохой профайлер, перехватывай запрос, смотри план
|
|||
19
Dmitrii
гуру
06.09.21
✎
15:00
|
(16) Ему нужны номер и дата не от &Ссылка, а от документов, которые лежат в реквизите Документ табличной части &Ссылка.ДокументыОснования.
|
|||
20
Dmitrii
гуру
06.09.21
✎
15:01
|
+ к (19) И полагаю, что тип у этого реквизита составной на множество различных ДокументСсылка.
|
|||
21
polosov
06.09.21
✎
15:02
|
(0) В таком случае, я бы сначала выбрал все типы в выборке, потом на основе этих данных динамически собрал бы запрос с ВЫРАЗИТЬ(рткЗаявкаНаТранспортДокументыОснования.Документ КАК ТвойТипДокумента).Дата/Номер - по всем типам из первого запроса. Да, в 2 запроса + код, но должно быть быстрее.
|
|||
22
1Сергей
06.09.21
✎
15:02
|
(20) Главное (0) не читай
|
|||
23
1Сергей
06.09.21
✎
15:03
|
Зачем в 2021 веке может понадобится дата и номер? В третью систему что-то выгружаете?
|
|||
24
Почему 1С
06.09.21
✎
15:03
|
(0) Какая архитектура такой и запрос, у тебя тут соединение со всеми документами конфигурации
|
|||
25
Ёпрст
06.09.21
✎
15:04
|
(23) печатная форма жешь..
|
|||
26
polosov
06.09.21
✎
15:06
|
(0) Или делай избыточность данных - в ТЧ добавляй поля Дата/Номер и заполняй их при создании документа.
|
|||
27
Почему 1С
06.09.21
✎
15:06
|
(0) Ответ, в момент записи документа записывай номер и дату основания в реквизиты документа, решение не очень но для такой продуманной архитектуры конфигурации пойдет
|
|||
28
Deal with it
06.09.21
✎
15:09
|
(0) вот ради интереса, если вообще не использовать запрос, а тупо перебрать циклом все документы в массиве/тз "рткЗаявкаНаТранспортДокументыОснования". Будет ли быстрее? У тебя есть ссылка на сам документ Заявки, а значит и доступ к реквизиту ДокументыОснования. Попробуй циклом перебрать.
|
|||
29
polosov
06.09.21
✎
15:10
|
(28) Запросы в цикле к каждому документу?
|
|||
30
УдавВПопугаях
06.09.21
✎
15:14
|
а сколько там данных в этой ТЧ? и 90% времени от скольки в секундах/минутах? + (1) и (16) надо попробовать то или как? логика в этом есть, если неявно преобразует и сделает только необходимые связи, то должно ускорить
|
|||
31
Deal with it
06.09.21
✎
15:15
|
(29) есть просто цикл типа
Для каждого Документ из ДокументыОснования Цикл Результат = Документ.Дата + "" Документ.Номер//или как там КонецЦикла; Может так быстрее будет Не всегда запрос эффективнее тупого перебора. |
|||
32
Deal with it
06.09.21
✎
15:16
|
(31) + точнее
ТЗ = рткЗаявкаНаТранспорт.ДокументыОснования.ВЫГРУЗИТЬ(); Для каждого Документ Из ТЗ цикл |
|||
33
polosov
06.09.21
✎
15:17
|
Тема - перепись говнокодеров.
|
|||
34
Deal with it
06.09.21
✎
15:17
|
прост если у всех документов есть эти 2 параметра, то нам даже на тип их проверять не надо.
|
|||
35
УдавВПопугаях
06.09.21
✎
15:18
|
(34) бывают документы без номера или даты?
|
|||
36
Deal with it
06.09.21
✎
15:18
|
(33) вопрос не говнокода, а производительности, если это будет быстрее, то это не говнокод, а вынужденная мера.
|
|||
37
Deal with it
06.09.21
✎
15:19
|
в общем я как вариант предложил, дальше ТС сам пусть решает
|
|||
38
УдавВПопугаях
06.09.21
✎
15:20
|
(33) по теме: + 1 в переписи
|
|||
39
Dmitrii
гуру
06.09.21
✎
15:20
|
Поэтому либо пробовать (1) и надеяться на то, что СУБД построит правильный план запроса, либо (13). Других способов нет.
Ну или извратиться с получением типов значений реквизита Документ, попавших в выборку, а потом в цикле собрать текст запроса, где уже обращаться к документам конкретных типов. Подойдёт только если количество различных типов документов, попавших в табличную часть одного конкретно взятого документа рткЗаявкаНаТранспортДокументыОснования невелико. По сути это аналог (31),(32). И кстати возможно, что (31) будет работать быстрее, если табличная часть ДокументыОснования небольшая (а весьма вероятно, что она небольшая). |
|||
40
ads55
06.09.21
✎
15:22
|
(33) самый скрепный штоле?
человек попросил помощь - он советы получил. Свой код покажи, раз обвиняешь. |
|||
41
polosov
06.09.21
✎
15:24
|
(40) Выше смотри, внимательно.
|
|||
42
arsik
гуру
06.09.21
✎
15:25
|
(0) Сначала выбери все документы без их реквизитов. Потом уже реквизиты получай через:
СтруктураРеквизитовДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Выборка.Документ, "Номер, Дата"); |
|||
43
ads55
06.09.21
✎
15:26
|
(41) в (38) - Точно!
|
|||
44
polosov
06.09.21
✎
15:28
|
(43) Вот жеж обиженка. По делу есть что?
|
|||
45
Shur1cIT
06.09.21
✎
15:30
|
Значительно ускорил выкинув Документ из полей получения, дальше как ускорять незнаю, другого варианта не вижу, странно что документ даёт такой тормоз это же по сути гуид и он такой же "общий" как номер и дата.
|
|||
46
Deal with it
06.09.21
✎
15:30
|
Вот интересно, предлагать добавить в уже существующий документ 2 реквизита, которые заполняются только при записи, а значит предложить ТСу перезаписать все уже созданные для этого документы,чтобы смочь их вытянуть запросом - не говноподход, а мой вариант сразу фи.
Само собой, что по хорошему это нужно было сделать еще на этапе проектирования этой доработки с документами основания, но мы имеем что имеем. |
|||
47
ads55
06.09.21
✎
15:30
|
(44) что было - сказал.
утверждение твое в (33) не понравилось. А так - без претензий. |
|||
48
banco
06.09.21
✎
15:33
|
(0) Пробуй ОбщегоНазначения.ЗначенияРеквизитовОбъектов()
|
|||
49
arsik
гуру
06.09.21
✎
15:33
|
(45) А если оставить только документ, без всех полей?
|
|||
50
ptiz
06.09.21
✎
15:34
|
(45) Сравни профайлером запрос до и после выкидывания.
|
|||
51
ads55
06.09.21
✎
15:36
|
(44) кстати, посмотри (4) и (45)
|
|||
52
acht
06.09.21
✎
15:37
|
(45) > это же по сути гуид
Нет. Это два поля - поле типа и поле двоичных данных ссылки. Добрая 1С скрывает это от тебя, но иногда строит запрос весьма пикантным образом. |
|||
53
polosov
06.09.21
✎
15:38
|
(51) Тупое ускорение, которое не может дать прироста.
У него в принципе запрос по одному документу, поэтому (42) хватит. |
|||
54
lodger
06.09.21
✎
16:58
|
(33) держи ещё один план выполнения задачи:
берем ссылку и пишем первый запрос по ней: выбрать документ как Доку типзначение(документ) как ТипДоку из ... где ... итоги по ТипДоку делаем выборку с итогами Результат = Неопределено; Пока ВыборкаТипов.Следующий() Цикл Запрос = новый Запрос(); Запрос.Текст = ФункияСборкиЗапросаПоТипу(ВыборкаТипов.ТипДоку); ПараметрЗапроса = новый СписокЗначений(); детальки = ВыборкаТипов.Выбрать(); пока детальки.Следующий() Цикл ПараметрЗапроса.Добавить(детальки.Доку); конеццикла; Запрос.УстановитьПараметр("Доки",ПараметрЗапроса); Если Результат = неопределено Тогда Результат = Запрос.Выполнить().Выгрузить(); Иначе Выборка = Запрос.Выполнить().Выбрать(); Пока выборка.Следующий() Цикл заполнитьзначениесвойств(Результат.добавить(),выборка); конеццикла; конецесли; конеццикла; |
|||
55
youalex
06.09.21
✎
17:47
|
по идее еще можно ТЧ выгрузить в ТЗ ,создать там доп. колонку с ОписаниеТипов - из конкретных типов, и цепляться уже по ней.
Как-то так:
|
|||
56
osa1C
07.09.21
✎
06:26
|
(51) и ещё плюс (11) :-)
|
|||
57
rphosts
07.09.21
✎
06:45
|
(0) Эээээ а если добавить в запрос ещё одно условие " И ТипЗначения(рткЗаявкаНаТранспортДокументыОснования.Ссылка) = ТипЗначения(&Ссылка)" легче запросу не станет?
|
|||
58
Мультук
гуру
07.09.21
✎
07:28
|
(57) У запроса нет проблем с полем "ссылка". у него проблема с полем "документ"
|
|||
59
rphosts
07.09.21
✎
07:45
|
(58) тогда таки типизация должна спасти отца русской демократии
|
|||
60
Вафель
07.09.21
✎
08:31
|
Если есть общий журнал какой то можно дату номер оттуда брать
|
|||
61
ИУБиПовиц
07.09.21
✎
09:37
|
Можно попробовать запросом во временную таблицу положить ТипЗначения(Документ)
А в запросе выборке 1. Соединиться со временной таблицей левой 2. Через объединить перечислить все типы документов где документ ССЫЛКА док1 объединить где документ ССЫЛКа док2. (ну и док, док.номер, дата обернуть в выразить) хз может будет побыстрее. т.е. через ссылку и выразить мы типизируем а связью по типам отсекаем ненужные соединения |
|||
62
lodger
07.09.21
✎
10:14
|
(61) делать такого кадавра в запросе выйдет дороже по ресурсам и километрам кода, чем просто запросить 2 раза.
можно замоддить (54) на постройку запроса с объединением для второй итерации. получится один запрос к ТЧ и типизации, второй запрос уже к конкретным таблицам с конкретными типами и ссылками. писать - одна страница кода. выполнятся будет - молниеносно, по сравнению с соединениями всех таблиц документов. |
|||
63
Малыш Джон
07.09.21
✎
10:15
|
(0) 90% - это, конечно, хорошо, а сколько раз он вызывается? а то может у тебя эта функция в цикле крутится
|
|||
64
Малыш Джон
07.09.21
✎
10:18
|
(62) а хз, сколько там типов документов по факту используется. А то может только 2-3 типа и есть в таблице. Тогда не кадавр, а вполне себе милый запросик получается.
|
|||
65
lodger
07.09.21
✎
10:25
|
(64) завтра приделают ещё один документ к этому делу.
через неделю ещё. в следующем году по закону обяжут сделать к каждому документу зеркальный. кадавр с каждой итерацией будет расти и тяжелеть в чтении, редактуре и исполнении, а самогенерирующийся код не устаревает, как Буханка, работает надежно, как АК, и быстро, как МиГ. |
|||
66
Малыш Джон
07.09.21
✎
10:32
|
(65) генерирующийся на ходу текст запроса весьма хренов в отладке (привет от ЗУП 3).
А раз в неделю документы не приделывают. Если несколько лет использовался только 2-3 вида документа - это значит схема отлажена и менять её на ходу не будут, а если будут, то изменить конкретно этот запрос - это вот прям самая небольшая проблема будет. Это же не регучет, это оперативный учет, внутренний для компании. |
|||
67
lodger
07.09.21
✎
10:41
|
(66) ты точно (0) читал? там именно внутренний упр учёт, который сегодня так, завтра директору жахнуло в голову сяк, а после отпуска он проспался и переиначил як.
когда есть ресурсы на перестройку цифровых бизнес процессов на лету - их перестраивают на лету. |
|||
68
Ботаник Гарден Меран
07.09.21
✎
10:46
|
В типовых для таких случаев есть регистр сведений ДанныеПервичныхДокументов
|
|||
69
Малыш Джон
07.09.21
✎
10:49
|
(67) читал. ТС немного неверно оценивает ситуацию. Если там МОГУТ БЫТЬ все типы документов, это не значит, что там ЕСТЬ все типы документов.
>>там именно внутренний упр учёт ну, во-первых, не управленческий, а оперативный; во-вторых, я так и написал: внутренний оперативный учет. >>который сегодня так, завтра директору жахнуло в голову сяк, а после отпуска он проспался и переиначил як. Все может быть. Я не говорю, что этого быть не может. Я говорю, что это комплексный процесс, который затрагивает не только конкретно этот запрос. И на фоне общих затрат на добавление нового типа документа, ресурсы на изменение конкретно этого запроса - это очень и очень немного. Хоть каждый раз по-новому его переделывай. |
|||
70
2mugik
07.09.21
✎
10:59
|
(0)Тоже кстати удивлялся что данных нет, а 100500 таблиц пустых время прямо капитально увеличивают. везде выразить теперь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |