|
Очень долго выполняется запрос | ☑ | ||
---|---|---|---|---|
0
Kalina
27.02.20
✎
11:27
|
Здравствуйте 1с КА 1.1 она же УПП
вроде обычный запрос, Регистр Сведений НетДокументов - самодельный регистр - бухи помечают в нем есть у них бумажные документы или нет, 1 Измерение - Документ, 1 Ресурс - Булево (есть или нет), 6 Реквизитов - Контрагент, Сумма, Ответственный и т.д. база файловая, но это не отмазка - припроведении используется куча регистров, а тормозит тока на этом вызывается из Подписки На События - ПриЗаписи Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ | НетДокументов.Документ.Ссылка КАК Док |ИЗ | РегистрСведений.НетДокументов КАК НетДокументов |ГДЕ | НетДокументов.Документ.Ссылка = &Документ"; Буду признателен за подробный, разжеваный ответ :) С Уважением Kalina |
|||
1
butterbean
27.02.20
✎
11:28
|
для начала - убрать Документ.Ссылка, оставить просто Документ
|
|||
2
fisher
27.02.20
✎
11:31
|
(1) +1
И на всякий случай проверить наличие RLS по этому регистру. |
|||
3
butterbean
27.02.20
✎
11:32
|
(1)+ понять зачем вообще этот запрос и что он делает - в примере фигня, т.к. он просто выдает одну ссылку на передаваемый в качестве параметра документ
|
|||
4
fisher
27.02.20
✎
11:34
|
(0) НетДокументов.Документ.Ссылка - приводит к неявному соединению с таблицей документов. А так как вангую, что это измерение составного типа, то приводит к неявному соединению со ВСЕМИ таблицами регистраторов.
|
|||
5
Kalina
27.02.20
✎
11:36
|
(3) Запрос проверяет - есть ли запись про этот документ, если запись есть, то делает ничего
если нет - создает запись если Док помечают на удаление - удаляет запись из Регистра (4) ну да (Поступление и Реализация) и что делать ? |
|||
6
fisher
27.02.20
✎
11:37
|
(5) Тебе же сказали уже. Чукча писатель?
Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ | НетДокументов.Документ КАК Док |ИЗ | РегистрСведений.НетДокументов КАК НетДокументов |ГДЕ | НетДокументов.Документ = &Документ"; |
|||
7
Timon1405
27.02.20
✎
11:38
|
читать (1) до просветления
|
|||
8
novichok79
27.02.20
✎
11:39
|
план запроса в студию ёпт
|
|||
9
Kalina
27.02.20
✎
11:41
|
(6) сам чукча, ведм себя себя прилично
|
|||
10
novichok79
27.02.20
✎
11:42
|
RLS + убрать ссылку + план запроса.
что тут думать то |
|||
11
fisher
27.02.20
✎
11:44
|
(9) Чукча - это описание состояния. Иногда бываю и я, да. Если оскорбил - извиняюсь.
|
|||
12
Kalina
27.02.20
✎
11:51
|
(6) Ссылку убрал - ругается на условие
| НетДокументов.Документ = &Документ"; тип поля в РС.Документ - ссылка - в параметре &Документ тада тоже ведь ссылку надо ставить ? |
|||
13
palsergeich
27.02.20
✎
11:54
|
(12) ага
|
|||
14
fisher
27.02.20
✎
11:56
|
(12) Так и до этого надо было ссылку ставить. Не понимаю, почему у тебя раньше не ругалось, а тут вдруг начало.
|
|||
15
ДенисЧ
27.02.20
✎
11:56
|
(12) А ты что ставил? О_о
|
|||
16
Kalina
27.02.20
✎
11:56
|
Запрос.УстановитьПараметр("Документ", Документ.Ссылка);
Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ | НетДокументов.Документ КАК Док |ИЗ | РегистрСведений.НетДокументов КАК НетДокументов |ГДЕ | НетДокументов.Документ = &Документ"; вот так стал работать раза в 2 быстрее спасибо друзья мож еще что можно сделать для разгона ? :) |
|||
17
unenu
27.02.20
✎
11:58
|
самое лучшее закрыть тему и не позориться
|
|||
18
fisher
27.02.20
✎
12:00
|
(16) Ну, оптимизировать уже дальше некуда. Проверь наличие RLS и если их нет - только комп мощнее или регистр почистить, ежели так разбух, что даже индекс не шибко спасает.
|
|||
19
Галахад
гуру
27.02.20
✎
12:00
|
А медленно это сколько? В цифрах.
|
|||
20
Йохохо
27.02.20
✎
12:02
|
(16) передать в привилегированный модуль и выкинуть разрешенные
или регистр переименовать в НетРазрешенныхДокументов, а то суть не отражает |
|||
21
Kalina
27.02.20
✎
12:05
|
(19) 52 Документа 10-15 строк 80 сек ГрупповойОбработкойСпраовчниковДокументов
до этого было раза в 2 дольще |
|||
22
Галахад
гуру
27.02.20
✎
12:09
|
(21) Гм. Запрос сколько выполняется?
|
|||
23
FIXXXL
27.02.20
✎
12:10
|
Я бы выкинул запрос. Ибо "сначала проверяем, потом пишем".
Создавай НаборЗаписей, Прочитать(), если пустой Добавить()-Записать(), не пустой - ничего не делать |
|||
24
fisher
27.02.20
✎
12:16
|
(21) Зуб даю, что теперь у тебя узкое место не этот запрос. Сделай замер производительности.
|
|||
25
dmpl
27.02.20
✎
12:21
|
(16) Убрать запрос из цикла, и информацию по всем документам получать одним запросом.
|
|||
26
Kalina
27.02.20
✎
12:22
|
(22) если ты об этом
ОбщийМодуль.МоиДоработки.Модуль 224 Запись = Запрос.Выполнить().Выбрать(); 1 0,001916 0,33 (24) да, стало гораздо лучше спасибо но непойму почему, ведь Ссылку выбрать гораздо легче чем документ ? она уже хранится в Регистре (НетДокументов.Документ - тип знач - Ссылка) и в Условии ведь тоже ссылка используется ? |
|||
27
dezss
27.02.20
✎
12:29
|
(26) Потому что поле Документ в таблице этого регистра хранится, а поле Ссылка хранится в другой таблице, даже в 2-х, поэтому обращение через 2-ю точку делает неявное левое соединение с теми таблицами.
А вообще, на мой взгляд, (23) дело говорит. |
|||
28
hhhh
27.02.20
✎
12:29
|
(26) где в условии ссылка?
|
|||
29
fisher
27.02.20
✎
12:30
|
(26) А почему запрос выполняется 224 раза на 52 документа? Но все равно суммарное общее время - треть секунды.
Там уже и так ссылка. А любое обращение в запросе через точку от ссылки трактуется уже как обращение к связанной таблице-источнику. В результате вместо того, чтобы просто проверить та или не та ссылка в регистре, платформа сначала "цепляет" к регистру таблицы всех источников и уже в них ищет на совпадение ссылки как ключевого поля в этой таблице. |
|||
30
Курцвейл
27.02.20
✎
12:34
|
(29) Это номер строки в обработке
|
|||
31
Kalina
27.02.20
✎
12:36
|
(28)вот Запрос.УстановитьПараметр("Документ", Документ.Ссылка);
| НетДокументов.Документ = &Документ"; (29) номер строки |
|||
32
fisher
27.02.20
✎
12:38
|
Хм... А что такое тогда 0,001916 и 0,33?
|
|||
33
mzelensky
27.02.20
✎
12:38
|
А еще вопрсо по структуре регистра. Какие Измерения у него, в каком порядке расположены, есть ли индексирование полей ?
|
|||
34
goodprog
27.02.20
✎
12:39
|
(29) очень похоже на запрос в цикле) Доков всего 224, 52 из них без документов
|
|||
35
Kalina
27.02.20
✎
12:42
|
(29) Спасибо, кажется начинаю просветляться :)
(34) нет - вызывается один раз при записи документа - просто на групповой обработке удобнее отлаживать, да и проблема возникает тока при например восстановлении последовательности когда перепроводится одновременно много документов, я даже не сразу увидел эту проблему |
|||
36
fisher
27.02.20
✎
12:43
|
(32) +
По-моему, если не путаю, тогда одна из этих цифр - абсолютное время выполнения, а вторая - доля в общем времени выполнения. В общем, как ни трактуй, а дело уже не в этом запросе : |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |