|
Предложите способ увеличения быстродействия следующего куска кода. | ☑ | ||
---|---|---|---|---|
0
narayanan
24.07.19
✎
18:15
|
День добрый, на работе поступила такая задача. Подскажите с какой стороны к ней подступиться?
Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1 КАК Субконто1, | ХозрасчетныйОстатки.Субконто2 КАК Субконто2, | ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет.Код = ""60.01"", , Организация = &Организация) КАК ХозрасчетныйОстатки"; Запрос.УстановитьПараметр("Организация",Организация); Выборка=Запрос.Выполнить().Выгрузить(); |
|||
1
lodger
24.07.19
✎
18:19
|
убрать ".Выгрузить();"
работать с выборкой. |
|||
2
Пузан
24.07.19
✎
18:23
|
Счет передать как параметр, но не код, а ссылку, которую получить через предопределенный элемент плана счетов.
|
|||
3
Пузан
24.07.19
✎
18:24
|
Т.е. "... Счет = &Счет..." или "... Счет = ЗНАЧЕНИЕ(ПланыСчетов.НужныйПланСчетов.НужныйСчет)..."
|
|||
4
RomanYS
24.07.19
✎
18:24
|
Обязательно указать параметр вид субконто
|
|||
5
PiotrLoginov
24.07.19
✎
18:24
|
цитировать, так всё. а то может сложиться впечатление, что значение параметра Период устанавливать мы не будем.
|
|||
6
Пузан
24.07.19
✎
18:26
|
(4) Это если планируется получить конкретный вид субконто, то да.
|
|||
7
Buster007
24.07.19
✎
18:29
|
(0) а зачем тебе тут что-то оптимизировать? Чем не устраивает?
|
|||
8
narayanan
24.07.19
✎
18:38
|
(1)
Да согласен, Пока Выборка.Следующий - так лучше |
|||
9
narayanan
24.07.19
✎
18:38
|
(2)
Да тоже об этом подумал, что передача счета через параметр будет правильнее |
|||
10
narayanan
24.07.19
✎
18:40
|
(4) спасибо
|
|||
11
H A D G E H O G s
24.07.19
✎
18:40
|
Никак.
|
|||
12
Вафель
24.07.19
✎
18:41
|
(1) выборка ничуть не лучше.
все это пережитки старых лет |
|||
13
narayanan
24.07.19
✎
18:41
|
(5) Да, параметр период так же надо указывать
|
|||
14
H A D G E H O G s
24.07.19
✎
18:44
|
Как только мы получаем неоперативные остатки в разрезе Субконто, мы идем еще в 2 таблицы - Движений и ЗначенийСубконто и наш план запроса превращается в какашку.
|
|||
15
narayanan
24.07.19
✎
18:47
|
(14) Возможно это так и есть, тут я вам доверяю больше чем своему опыту.
Но тут в запросе мы не уточняем про неоперативные остатки, поэтому речь идет в целом об оптимизации запроса) |
|||
16
ДенисЧ
24.07.19
✎
19:12
|
Ctrl-A, Del, Ctrl-S, F7
|
|||
17
novichok79
24.07.19
✎
19:18
|
(0) я бы шел так:
1) установить видысубконто, чтобы субконто1 и субкотно2 всегда были чем-то одним. 2) убрать Счет.Код и заменить на предопределенный элемент в запросе 3) Выборка=Запрос.Выполнить().Выгрузить() заменил бы на Выборка=Запрос.Выполнить().Выбрать() |
|||
18
novichok79
24.07.19
✎
19:19
|
пересчет итогов разумеется может помочь еще
|
|||
19
novichok79
24.07.19
✎
19:24
|
а вынести в память таблицы, добавить железа на сервер, и т д
|
|||
20
H A D G E H O G s
24.07.19
✎
19:25
|
Ничего не поможет.
|
|||
21
H A D G E H O G s
24.07.19
✎
19:29
|
Как только мы выбираем остатки по высокооборотистым счетам 40.01, 60.01, 62.01, НА ДАТУ, запрос забивает на некластерный индекс с отбором по счету по таблице движений и использует кластерный индекс без отбора по счету, так как ему нужна сумма оборотов, которой нет в некластерном индексе - тоесть, запрос выбирает движения по всем счетам.
|
|||
22
novichok79
24.07.19
✎
19:30
|
(21) вот это уровень знаний, круто.
|
|||
23
narayanan
24.07.19
✎
19:33
|
(21) Очень глубокие знания работы запроса, еще раз спасибо!
|
|||
24
mistеr
24.07.19
✎
20:40
|
(21) Ты забыл добавить "когда оптимизатор ошибается, опираясь на неактуальную статистику".
|
|||
25
mistеr
24.07.19
✎
20:41
|
(24) И еще "кроме тех случаев, когда план-какашка действительно лучший".
|
|||
26
Волшебник
24.07.19
✎
22:37
|
Нужно сделать запрос к регистру накопления Взаиморасчеты
|
|||
27
lodger
24.07.19
✎
22:41
|
(26) а если стоит задача сверить РН взаиморасчеты и счет 60.01?
|
|||
28
Волшебник
24.07.19
✎
22:49
|
(27) Тогда не стояло бы задачи ускорить. Регистры бухгалтерия — сущность неторопливая. Они нужны для богатства аналитики, развёрнутого учёта. Они не могут работать быстро.
|
|||
29
palsergeich
24.07.19
✎
23:14
|
(24) Сколько и чем статистику не актуализируй - результат один, полная Ж. Спасибо поел уже.
(28) Все это богатство аналитики вполне себе реализуется и на оборотных РН, смотри ЕРП ббюджетирование например. Просто архитектурно сделать 2 таблицы было красиво, а о том, что записей могут быть миллионы - тогда никто не подумал. Вроде в 15 релизе они что то да поправили в этом плане, сцдя по анансу или индекс или еще поле в таблицу добавили, сам еще не смотрел |
|||
30
breezee
25.07.19
✎
07:46
|
(0) Распечатать ведомость по взаиморасчетам после закрытия месяца и смотреть на бумаге. Быстрее запроса будет)
|
|||
31
rphosts
25.07.19
✎
07:49
|
(12) нет, это зависит от того сколько выгребается и сколько рамы.
|
|||
32
rphosts
25.07.19
✎
07:51
|
(24) структура ИБ важнее статистики, а тут всё именно в структуру упирается
|
|||
33
Вадя
25.07.19
✎
08:19
|
Все, что насоветовали предыдущие ораторы - наведение внешнего лоска на запрос и на параметры, придание нетленке товарного вида (актуально для Нерезиновска).
Единственный способ ускорить работу - выбирать данные частями. Правильный ответ - использовать отборы по Субконто. |
|||
34
Rovan
гуру
25.07.19
✎
10:06
|
(0) мои 5 копеек:
Запрос=Новый Запрос( ТУТ ТЕКСТ ЗАПРОСА); |
|||
35
Glup0sti
25.07.19
✎
11:07
|
если работает медленно при отсутствии конкуренции за ресурсы:
Что говорит замер по поводу Выполнить() и Выгрузить()? Какая из этих операций дороже? Если Выполнить() - если СУБД ms sql, включить параллелизм + надо все равно взглянуть на план запроса...да и чтобы опровергнуть (21) Если Выгрузить() - каталог временных файлов пользователя службы 1С на быстрый диск По крайней мере стоит попробовать максимально загрузить железо распараллеливанием: выбрать всех контрагентов(Субконто1), стартануть N потоков, закидывая свою порцию контрагентов отбором для этого запроса в этом потоке + обработать, результат собрать вместе. Если данный запрос выполняет ограниченное кол-во пользователей, то можно повысить их приоритет(и не только), используя регулятор ресурсов ms sql Обслуживание итогов + обслуживание СУБД &Период не должен быть МоментомВремени + (3) http://catalog.mista.ru/public/975144/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |