|
Что дают пакетные запросы? | ☑ | ||
---|---|---|---|---|
0
vi0
06.09.17
✎
13:55
|
Видите ли вы преимущества пакетного запроса перед использованием нескольких запросов? Какие?
Известно, что временные таблицы можно передавать между запросами используя менеджер временных таблиц, т.е. по ВР вопроса не возникает. Допускаю, что при слабой связи, например в мобильном приложении или в веб-клиенте, есть смысл сократить количества обращений к серверу и делать пакетами. А в прочих случаях? |
|||
27
1dvd
06.09.17
✎
14:21
|
(15)
Процедура БезЦикла(КоличествоИтераций, Н = Неопределено) Если Н = Неопределено Тогда Н = 0; КонецЕсли; Н = Н + 1; Если Н<=КоличествоИтераций Тогда Сообщить(Н); БезЦикла(КоличествоИтераций, Н); КонецЕсли; КонецПроцедуры БезЦикла(15); |
|||
28
MrStomak
06.09.17
✎
14:23
|
Пакетный запрос имел смысл как способ оптимизации в обычном приложении, когда каждый вызов запроса обозначал передачу управления с клиента на сервер приложений.
Сейчас, на УФ, имеет смысл только для удобства, всё и так на сервере делается, а СУБД будет вызвана в любом случае несколько раз. |
|||
29
Ненавижу 1С
гуру
06.09.17
✎
14:23
|
(25) нет же, автоматическая сборка мусора, это прекрасно
в шарпе и яве тоже есть пустой указатель null, но не стоит его путать с NULL из SQL |
|||
30
1dvd
06.09.17
✎
14:24
|
(28) Если один запрос, и данные берутся только из него, то обращение к БД будет только одно. Не?
|
|||
31
ELEA26
06.09.17
✎
14:24
|
(27) вариант с перейти ближе к циклу. Не используется стек (стэк).
|
|||
32
Ненавижу 1С
гуру
06.09.17
✎
14:25
|
пакетный запрос это синтаксический сахар:
1. удобно редакктировать как единый запрос в конструкторе 2. тоже самое в СКд 3. не надо напрягаться с удалением временных таблиц |
|||
33
Fish
06.09.17
✎
14:25
|
(27) При относительно небольшом кол-ве итераций (сейчас не вспомню точное число, но что-то емнип около 40000) - 1С упадёт, не успев даже ругнуться :)
|
|||
34
1dvd
06.09.17
✎
14:25
|
(31) в определенных кругах за "перейти" пальцы прищемляют дверью
|
|||
35
1dvd
06.09.17
✎
14:26
|
(33) надо будет затестить
|
|||
36
MrStomak
06.09.17
✎
14:27
|
(30) Нет.
Более того, обращений к СУБД может быть несколько даже при 1 запросе (когда используются ВТ (особенно регистра бухгалтерии) или конструкции "В иерархии", ну и еще наверняка есть варианты) |
|||
37
ELEA26
06.09.17
✎
14:29
|
(34) а за рекурсию вместо цикла нет? НюНю...
|
|||
38
patapum
06.09.17
✎
14:29
|
Менеджер временных таблиц лучше пакетника, если к одной временной таблице обращаешься несколько раз. У меня таких задач не помню, чтобы было. А зачем еще?
|
|||
39
ELEA26
06.09.17
✎
14:30
|
(36) еще всякие срезы последних. 1 запрос 1С >= 1 запрос к БД :)
|
|||
40
1dvd
06.09.17
✎
14:31
|
(36) хотя, да. Помнится, пытался трасернуть штатную ОСВ, которая на СКД. И глаза разбежались...
|
|||
41
Lazy Stranger
06.09.17
✎
14:32
|
(21) в языке Фортран-4, которому меня учили на первом курсе, циклы примерно так и выглядели, через if и goto
|
|||
42
1dvd
06.09.17
✎
14:33
|
ну, вы ещё язык Ассемблера вспомните или маш.код
|
|||
43
Адинэснег
06.09.17
✎
14:34
|
нафига городить с созданием менеджера ВТ, когда можно выполнить пакетный?
|
|||
44
Fish
06.09.17
✎
14:34
|
(35) Я наврал. ОФ на 2.3.8 упала на 2025-й итерации :)))
|
|||
45
Адинэснег
06.09.17
✎
14:34
|
(43)->(0)
|
|||
46
MrStomak
06.09.17
✎
14:34
|
В Ассемблере даже не цикл, а просто условие через "goto" всё равно ;)
|
|||
47
Адинэснег
06.09.17
✎
14:35
|
(46) было в (2)
|
|||
48
MrStomak
06.09.17
✎
14:36
|
(47) Там речь про циклы!
|
|||
49
Fedor-1971
06.09.17
✎
14:36
|
(32) не совсем просто сахар. Есть оптимизатор SQL - ему проще получить пакет и построить план выбора данных для многих таблиц сразу, чем строить много планов
(43) из-за оптимальности: выбрали доки в ВТ, потом на её основании добираем нужную информацию |
|||
50
1dvd
06.09.17
✎
14:37
|
(44) тоже затестил. Упал на 2026 :)
1С:Предприятие 8.3 (8.3.8.2027) |
|||
51
aka MIK
06.09.17
✎
14:38
|
(38) если у тебя пакетный запрос, то юзать МВТ вообще без нужды
|
|||
52
MrStomak
06.09.17
✎
14:38
|
(49) Какое это имеет отношение к "Менеджер ВТ или пакетный запрос"?
И там и там много планов. |
|||
53
Адинэснег
06.09.17
✎
14:38
|
(49) так это ты реготчетность с закрытием месяца пишешь? держи его, пасаны!
|
|||
54
ELEA26
06.09.17
✎
14:38
|
А еще временные таблицы можно индексировать...
|
|||
55
Адинэснег
06.09.17
✎
14:39
|
а в пакетном нельзя?
|
|||
56
MrStomak
06.09.17
✎
14:40
|
(54) Индекс, кстати, всегда 1 и кластерный.
|
|||
57
Fedor-1971
06.09.17
✎
14:41
|
(52) Про оптимизатор почему-то забыли.
(53) к счастью нет. |
|||
58
MM
06.09.17
✎
14:43
|
(52) В пакетном запросе, теоретически, можно выполнять несколько запросов на СУБД одновременно, если они не используют данные друг друга.
|
|||
59
MrStomak
06.09.17
✎
14:43
|
(57) План составляется на каждый конкретный запрос. Всегда. Пакеты, не пакеты - пофигу. Или не составляется, если запрос вызывается через ХП и есть кэш.
|
|||
60
ELEA26
06.09.17
✎
14:45
|
(58) это если MS SQL и включен параллелизм? Тоже надо тестить... А реально было бы интересно. Если создаешь двумя запросами две разные ВТ, а потом с ними работаешь - было бы круто, если бы они формировались одновременно.
|
|||
61
MrStomak
06.09.17
✎
14:47
|
(60) Параллелизм работает внутри 1 запроса.
Запросы в пакете выполняются последовательно. |
|||
62
ELEA26
06.09.17
✎
14:50
|
(61) Это да. Согласен. Меня там больше на фантазии понесло.
|
|||
63
Buster007
06.09.17
✎
14:52
|
(0) Почему не рекомендуется использовать запрос в цикле?
Именно для этого и нужен пакетный запрос, а так ты можешь, конечно, и без пакетника. |
|||
64
MM
06.09.17
✎
14:52
|
(61) Выполняются последовательно 1С или MS SQL?
|
|||
65
lodger
06.09.17
✎
14:56
|
все такие умные. а где хранятся временные таблицы?
если явно объявлен менеджерВТ, то на стороне предприятия. и вся эта когорта передается из\в СУБД для дальнейших запросов. логично? пока да. а вот пакетный запрос. 1с готовит запросы и отдает их в СУБД для исполнения, при этом где времянки? в ТемпДБ СУБД? или они перекатываются в сервер 1с для обработки в 1с? судя по монитору ресурсов - rphost при запросе немножко тужится и высырает что-то в скуль. дальше скуль тужится и один раз отдает все скопом в рпхост. но запрос тем временем большой и пакетный... простите за сумбур. |
|||
66
MrStomak
06.09.17
✎
14:57
|
(65)
Временные таблицы хранятся на СУБД и никуда не передаются. Так что логика не очень. |
|||
67
lodger
06.09.17
✎
14:59
|
(66) а как это я ВТ могу помацать из отладчика если она на субд?
|
|||
68
ELEA26
06.09.17
✎
14:59
|
(65) ВТ все в tempdb...
|
|||
69
MrStomak
06.09.17
✎
14:59
|
(67) Отладчик запрос к субд на содержание ВТ делает. Точно также, как и наименование справочника ты можешь посмотреть из отладчика. Прикинь, он не хранит это в сервере ;)
|
|||
70
ELEA26
06.09.17
✎
15:00
|
(67) ты выборку с нее "мацаешь".
|
|||
71
lodger
06.09.17
✎
15:01
|
(69) наименование справочника это ж метаданные, они всегда на сервере есть.
|
|||
72
dezss
06.09.17
✎
15:02
|
(67) И как же ты ВТ "мацаешь"?
Делаешь Выгрузить(), правильно? А не замечал, как эта Выгрузить() подтормаживает в отладчике? |
|||
73
MrStomak
06.09.17
✎
15:03
|
(71)
Наменование основного средства не хранится в метаданных. А из отладчика, сюрприз!, видно. И дальше можно плюсиками раскрывать до чего угодно. |
|||
74
Адинэснег
06.09.17
✎
15:04
|
||||
75
Адинэснег
06.09.17
✎
15:05
|
Если Вы используете объект МВТ, то временные таблицы рекомендуется удалять одним из первых 2 методов, как только в них отпала необходимость, иначе они будут висеть в памяти сервера СУБД, пока процедура/функция не закончит работу, что не есть хорошо Источник: ©Курсы-по-1С.рф
|
|||
76
lodger
06.09.17
✎
15:06
|
(73) то о чем ты говоришь это реквизит, а Имя справочника это таки его метаданные.
|
|||
77
MrStomak
06.09.17
✎
15:09
|
(76) Тебе сказать по теме есть чего, кроме шокирующих открытий, что Имя справочника это оказывается таки его метаданные?
|
|||
78
Ненавижу 1С
гуру
06.09.17
✎
15:10
|
(76) правильно, реквизит хранится в СУБД, но его можно посмотреть в отладчике
|
|||
79
lodger
06.09.17
✎
15:11
|
(74) все. тему можно закрывать.
|
|||
80
vi0
06.09.17
✎
15:15
|
(63) ошибаешься
|
|||
81
VS-1976
06.09.17
✎
15:19
|
(46) Да ладно а что тогда в ассемблере loop?
|
|||
82
VS-1976
06.09.17
✎
15:28
|
(68) Хотя могли бы сделать через курсоры...
|
|||
83
spiller26
06.09.17
✎
16:03
|
Я отвечу - "Просто удобно"
|
|||
84
vi0
07.09.17
✎
04:42
|
(82) курсоры это совсем другая тема
|
|||
85
assasu
07.09.17
✎
04:55
|
(17) если ты свой код собираешься поддерживать и вносить исправления - делай всегда отдельные запросы.
если пишешь код "на от@@ись" - пиши один запрос с кучей пакетов. так в нем будет сложнее разобраться. |
|||
86
VladZ
07.09.17
✎
05:01
|
Не понял проблемы. Нужны пакетные - делаешь. Не нужны - не делаешь.
От себя: мне еще ни разу не понадобились. |
|||
87
vi0
07.09.17
✎
07:44
|
(85) (86) спасибо за мнение от представителей радикальной фракции
|
|||
88
Ненавижу 1С
гуру
07.09.17
✎
08:11
|
(86) ты наверное и писать то их не умеешь
|
|||
89
VS-1976
07.09.17
✎
08:53
|
(86) Есть к примеру ситуации, когда предварительные данные позже соединяются с разными таблицами. По этому пакетный запрос в каких то случаях может даже дать прирост производительности.
|
|||
90
dmpl
07.09.17
✎
09:10
|
(27) А БезЦикла(1000000) что дает?
|
|||
91
dmpl
07.09.17
✎
09:12
|
(34) А в других кругах перейти - единственный вариант ветвления. А за рекурсию без необходимости бьют везде.
|
|||
92
1dvd
07.09.17
✎
09:12
|
(90) см (50)
|
|||
93
1dvd
07.09.17
✎
09:13
|
(91) а можно пример когда перейти - единственный вариант ветвления?
|
|||
94
dmpl
07.09.17
✎
09:16
|
(63) Не рекомендуется, но используют. Даже инопланетяне (создатели типовых).
|
|||
95
dmpl
07.09.17
✎
09:20
|
(93) В микроконтроллерах нередко бывает что только jump по условию и есть.
|
|||
96
1dvd
07.09.17
✎
09:22
|
(95) вот это ты сейчас к чему вообще сказал?
|
|||
97
dmpl
07.09.17
✎
09:31
|
(96) Привел пример других кругов.
|
|||
98
lodger
07.09.17
✎
09:51
|
(85) просто вы не умеете их готовить. да и читать видимо тоже. большой запрос разбитый на пакеты в разы легче читается, отлаживается и редактируется, нежели мешанина закинутая в огромные вложенные запросы с десятками джойнов и юнионов.
|
|||
99
vi0
07.09.17
✎
09:52
|
(98) вопрос больше не про временные таблицы, а пакеты, которые могут быть и без временных таблиц
|
|||
100
lodger
07.09.17
✎
10:00
|
(99) ну т.е. когда запросы в пакете в общем то независимы друг от друга по больешй части, и потом разбираются через РезультатЗапроса[номер пакета]?
тут я бы посетовал на то что рпхост несколько раз будет общаться с субд и передавать тудой-сюдой данные. и лучше бы один раз получить их все. накладные расходы на каждый запрос так и сяк выше чем на один пакет. но кого нынче волнует оптимизация. лучше купить ссд, нарастить оперативку, да камней побольше, ПОБОЛЬШЕ! p.s. в отладке пакет с независимыми запросами ну ничуть не сложнее чем просто кучка запросов. |
|||
101
dmpl
07.09.17
✎
10:07
|
(98) С пакетами проблема в том, что если надо вставить запрос - потом придется еще и код после запроса менять. Так что приходится сначала все временные таблицы готовить, и только потом пакет выполнять.
|
|||
102
dmpl
07.09.17
✎
10:09
|
(99) Пакет с временными таблицами - зло. Ведь в результат запроса попадут и все временные таблицы. Даже уничтоженные (уничтожение, кстати, тоже даст элемент в массиве результатов).
|
|||
103
vi0
07.09.17
✎
10:16
|
(100) неверно
выше уже обсудили это |
|||
104
VS-1976
07.09.17
✎
10:52
|
(102) Это будет список "указателей". И твоё дело уже выгружать данные с базы данных или нет. Так что это не ужас, ужас, ужас...
|
|||
105
dmpl
07.09.17
✎
10:55
|
(104) Дык ресурсы сервера БД они занимать все равно будут. Даже когда уже не нужны от слова "совсем".
|
|||
106
VS-1976
07.09.17
✎
11:05
|
(105) Ну удаление есть временных таблиц в запросе. Можешь уничтожить объект пакет. А что ты считаешь что запрос ничего не потребляет? Понятно что для пакета требуется больше ресурсов, чем последовательное чтение того же самого. Но как я уже говорил выше, что есть случаи когда есть общие данные для последующей выборки разных данных это несколько ускоряет.
|
|||
107
vi0
07.09.17
✎
11:19
|
(106) > несколько ускоряет.
что замеры показывают? |
|||
108
Dmitry1c
07.09.17
✎
11:22
|
(86) много теряешь
|
|||
109
dmpl
07.09.17
✎
11:44
|
(106) Дык удаление в пакете оставляет данные временной таблицы. Поэтому и требуется схема с менеджером временных таблиц, когда на первом этапе готовятся все нужные временные таблицы, на втором этапе выполняется пакет, далее все временные таблицы убиваются, и на сервере остаются только нужные нам результаты запроса. Более того, эта же схема не сбивает нумерацию результатов запросов, потому как новый запрос добавляется в конец, а все требуемые для него временные таблицы выбираются на первом этапе.
|
|||
110
SiAl-chel
07.09.17
✎
11:47
|
(85) Вообще полный бред. Один текст запроса удобней для поддержки и дальнейшей разработки, чем портянки, склеенные в коде. Текст я беру целиком, иду в консоль запросов, там его дорабатываю, потом возвращаю все назад.
С лоскутной портянкой текста запроса, надо перед его выполнением смотреть Запрос.Текст только во время отладки. Потом после доработки сравнивать старую версию текста запроса с новой, а уж потом в лоскутки текста запроса вносить изменения. Трудоемкость возрастает как минимум процентов на 50. |
|||
111
vi0
07.09.17
✎
11:54
|
(109) > удаление в пакете оставляет данные временной таблицы
Откуда информация? |
|||
112
VS-1976
07.09.17
✎
12:23
|
(111) Он говорит о наверное о кэше данных в MS SQL :)
(107) Это логический вывод. К примеру ты фильтруешь контрагентов в зависимости от условий. И тебе нужна сальдо ( дебиторка ) по этим контрагентам так же последние операции по нему, а так же отдельно выписки. Это всё выгружается к примеру в личный кабинет клиента в различные структуры, к примеру csv. Это простой пример, бывает таблица, на которой в последующем строятся различные отборы вычисляется сложнее. Можно конечно через менеджер временных таблиц, только зачем? Тебе нужно всё вычислить и выгрузить и больше тебе не нужно иметь таблицу-основу последующих воборок. Последующие соединения могут идти в принципе параллельно. Сетевое взаимодействие с сервером базы данных в пакетном режиме может происходить быстрее, так как нет сильного разнесения по времени. К примеру выполнил пакетный запрос и что-то крутишь, вертишь, ну а позже запросил данные. За это время данные успели испечься. |
|||
113
ptiz
07.09.17
✎
12:25
|
(0) Когда в 8.1 появились пакетные запросы, временные таблицы и индексирование колонок в таблице значений - я плакал от счастья!
|
|||
114
vi0
07.09.17
✎
12:28
|
(112) это все слова, нужны замеры
|
|||
115
VS-1976
07.09.17
✎
12:29
|
(114) Замерь
|
|||
116
vi0
07.09.17
✎
12:38
|
(115) я замерял на простом примере, разницы не увидел
а разнесение во времени, о котором ты говоришь, измеряется миллисекундами, которым можно принебречь |
|||
117
VS-1976
07.09.17
✎
12:42
|
(116) А сервер баз данных как фокусник тебе данные мгновенно отдаёт? Если у тебя запрос к таблице с миллионами строк что тогда?
|
|||
118
vi0
07.09.17
✎
12:50
|
(117) не понял вопроса в контексте обсуждаемой темы
|
|||
119
Лефмихалыч
07.09.17
✎
12:51
|
(0) Вижу. Быстродействие.
Всегда имеет смысл их использовать хотя бы потому, что вложенные запросы усирают читабельность запроса в край. И работают часто гораздо медленнее, чем соединения с временными. |
|||
120
Мимохожий Однако
07.09.17
✎
12:58
|
ОФФ: Люблю такие ветки. Столько умных людей собираются в кучу)) Это как про типовые втирать.
|
|||
121
aka MIK
07.09.17
✎
13:07
|
(119) Кстати, MS SQL научился (не знаю в какой версии) передавать параметры отбора во вложенный запрос (как СКД прям), так что самое время прекращать любить временные таблицы
|
|||
122
Timon1405
07.09.17
✎
13:21
|
(121) а как же postgres и курс на импортозамещение?
|
|||
123
Лефмихалыч
07.09.17
✎
13:28
|
(121) за вложенные запросы надо по рукам линейкой бить
|
|||
124
VS-1976
07.09.17
✎
13:32
|
(123) Тут ты не прав, всё зависит от рук их готовящих. Никто ещё не отменял правило думать головой, а думать головой помогает теоретическая подкованность в данной области.
|
|||
125
Timon1405
07.09.17
✎
13:45
|
(123) так-то любой запрос к таблице остатков - вложенный. переписывать все на физ.таблицы теперь?
|
|||
126
dmpl
07.09.17
✎
14:01
|
(111) Из опыта. Попробуй выбрать данные из уничтоженной таблицы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |