Имя: Пароль:
1C
 
Быстродействие запроса к остаткам - баг или фича?
,
0 Sasha_1CK
 
30.12.14
05:33
Собственно сабж
был запрос вида


     ВЫБРАТЬ
     |    ХозрасчетныйОстатки.Счет,
     |    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
         |    ХозрасчетныйОстатки.Субконто2 КАК Договор,
     |    ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
     |    ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаДолг
     |ИЗ
     |    РегистрБухгалтерии.Хозрасчетный.Остатки(
     |            &Дата,
     |            Счет =&Счет ) КАК ХозрасчетныйОстатки
     |ГДЕ
     |    ((ХозрасчетныйОстатки.Субконто1     = &Контрагент)

Работал, работал - и тут в один прекрасный день начал тормозить не по детски.
После плясок с бубном вокруг базы и вывода о том, что база и железо не причем.
был переделан текст запроса на

     ВЫБРАТЬ
     |    ХозрасчетныйОстатки.Счет,
     |    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
         |    ХозрасчетныйОстатки.Субконто2 КАК Договор,
     |    ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
     |    ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаДолг
     |ИЗ
     |    РегистрБухгалтерии.Хозрасчетный.Остатки(
     |            &Дата,
     |            Счет =&Счет,  ХозрасчетныйОстатки.Субконто1     = &Контрагент) КАК ХозрасчетныйОстатки


После чего запрос тупо залетал.

Это так и должно быть?
1 probably
 
30.12.14
05:37
(1) да
2 SeraFim
 
30.12.14
05:40
Да. Сначала база у тебя была маленькая, поэтому все работало быстро.
При запросе выгребались и считались остатки по всем контрагентам а условие накладывалось уже после подсчета остатков. Но так как их было мало - все было быстро.
Со временем их стало много и стало тормозить.

После того как ты переделал - остатки стали считаться только по одному контрагенту, вот отсюда и быстродействие
3 Web00001
 
30.12.14
06:01
Вот так еще один человек узнал, про параметры виртуальной таблицы.
4 Sasha_1CK
 
30.12.14
06:18
(3)  ну да видимо - как то так  это и происходит.

но концепция писалась еще в файловом варианте - где, насколько я понимаю, это было по фиг.

Но раз разбираться - то до конца.

1. не понятна резкость впороса - когда база потихоньку растет - и все потихоньку замедляется - это понятно, непонятно почему вчера это занимало секунд 30-40 ( а банк они разносят ежедневно)  - а сегодня резко стало 5-7 минут.

2 не очень понятна связь между объемом базы и таблицей остатки -  с одной стороны - база растет и объем ее увеличивается - с другой стороны - таблица остатков же рассчитывается и хранит промежуточные итоги - соответственно зависимость между объемом базы и таблицей остатков не должна быть линейной - ведь по факту - у меня как на начало года было где тысяч 30 записей по долгам 62 счета, и на конец года - примерно эти же 30 тысяч записей и остались - только аналитика изменилась .
5 Помогите
 
30.12.14
06:33
(4) А количество контрагентов разве не растет? Ели растет, то и таблица остатков тоже растет.
6 Andrewww123
 
30.12.14
06:36
(4) В SQL-сервере обновление статистики и прочие регламентные процедуры делаются?
7 Trier
 
30.12.14
06:56
Стаж: 8 лет 3 месяца 10 дней

Офигеть
8 Trier
 
30.12.14
06:57
Представляю, как ты удивишься, когда узнаешь еще, что субконто в запросе можно еще выражать
9 Sasha_1CK
 
30.12.14
07:03
(5)  нет регион закрытый - изменение активной базы за год -+ 2-3%
(6) да .
(7) можешь еще года 4 добавить  ))
(8) а нельзя ли поподробнее как  это поможет с точки зрения производительности запроса?
10 ejiki
 
30.12.14
07:19
Ващеееееее %)

При отборе Через "Где" Запрос собирает все данные, а потом накладывает на них отбор. А в параметрах указав ты отбираешь только с данным значением.
11 dk
 
30.12.14
07:37
(9) раз все пофигу - вытащи тогда и фильтр по счету наружу - посмотри как это будет пофиг ))
12 vitanimka
 
30.12.14
08:48
ТС, почитай книжку по запросам (забыл как точно называется) от 1С, узнаешь много нового.
13 Casey1984
 
30.12.14
08:52
Может еще в параметрах ХозрасчетныйОстатки.Субконто1 выразить? Что там теория говорит?
14 Escander
 
30.12.14
08:57
(0) все условия пихать в параметры виртуальной таблицы - это основа основ
15 Поpyчик-4
 
30.12.14
09:02
(0) Особенность запросов к остаткам и оборотам, известная со времён 8.0.
16 hhhh
 
30.12.14
09:06
(13) не, это если бы было Субконто1.Реквизит, тогда да, Выразить, а так пофигу.
17 Sasha_1CK
 
30.12.14
09:12
(15)   вот как раз за 8.0 то я вообще не успел, как и за 8.1  - когда народ более менее на 8-ку начал переползать - уже 8.2 и 8.3 случились.
Так что эти нюансы от меня как то ускользнули.

Впрочем я сейчас замерил на файловой копии базы (17 гб) - для счета и контрагента  в параметрах виртуальной таблицы - замер показал 0.9 сек, если указать их через "где" - то 3 сек.

А так что бы реально увидеть и осознать разницу - вот только сейчас на одном предприятии база доросла до соответствущих размеров.
18 Бертыш
 
30.12.14
09:31
(17) Кстати. Итоги рассчитаны на когда? А то может она у тебя крутит для выдачи итогов расчет с 01.01.1980 ну или с когда Вы там начали работать :)
19 Лефмихалыч
 
30.12.14
09:33
(0) отбор по видам субконто еще воткни, а потом пересиль себя и прочитай "Профессиональную разработку" хотя бы самую первую - для 8.0/8.1