Имя: Пароль:
1C
1С v8
Ускорить получение остатков
,
0 Ivan Bezdomnyi
 
31.03.14
07:25
Приветствую!

Подскажите, можно ли каким-то образом ускорить получение остатков при проведении?


РЕГИСТР НАКОПЛЕНИЯ "ОстаткиТоваров" (порядок измерений и ресурсов сохранен):
Измерения
- Номенклатура (+Индексировать) `около 100'000 наименований
- Подразделение `около 20 штук
- Организация `несколько
- КатегорияТовара `несколько
Ресурсы
- Количество
- Сумма

ЗАПРОС
"ВЫБРАТЬ
|    ТоварныйЧекТовары.Номенклатура КАК Номенклатура,
|    ТоварныйЧекТовары.Номенклатура.Производитель КАК Производитель,
|    ТоварныйЧекТовары.КатегорияТовара КАК КатегорияТовара,
|    ТоварныйЧекТовары.Количество КАК Количество,
|    ТоварныйЧекТовары.Цена КАК Цена,
|    ТоварныйЧекТовары.Всего КАК Всего,
|    ТоварныйЧекТовары.Сумма,
|    ТоварныйЧекТовары.Акция
|ПОМЕСТИТЬ ВТ
|ИЗ
|    Документ.ТоварныйЧек.Товары КАК ТоварныйЧекТовары
|ГДЕ
|    ТоварныйЧекТовары.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ВТ.Номенклатура,
|    ВТ.Производитель,
|    ВТ.КатегорияТовара,
|    ВТ.Количество,
|    ВТ.Цена,
|    ВТ.Всего,
|    ВТ.Сумма,
|    ВТ.Акция,
|    ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
|    ЕСТЬNULL(ОстаткиТоваровОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
|    ВТ КАК ВТ
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
|                &Момент,
|                Номенклатура В
|                        (ВЫБРАТЬ
|                            ВТТовары.Номенклатура
|                        ИЗ
|                            ВТ КАК ВТТовары)
|                    И Подразделение = &Подразделение
|                    И Организация = &Организация) КАК ОстаткиТоваровОстатки
|        ПО ВТ.Номенклатура = ОстаткиТоваровОстатки.Номенклатура
|            И ВТ.КатегорияТовара = ОстаткиТоваровОстатки.КатегорияТовара";
1 Wobland
 
31.03.14
07:29
Номенклатура В
|                        (ВЫБРАТЬ различные
как минимум
2 Ivan Bezdomnyi
 
31.03.14
07:42
(1) минимум не помогает, да и не удивительно, потому что в товарном чеке зачастую 2-3 позиции, и куча проверок, чтоб нельзя было добавить две строки с одинаковой номенклатурой...
3 ИС-2
 
naïve
31.03.14
07:43
провести пересчек итогов на SQL - помогает. Проверить как закрыты регистры
4 Ivan Bezdomnyi
 
31.03.14
07:55
(3) это Тестирование и исправление через конфигуратор? Или как-то прям через SQL?
5 butterbean
 
31.03.14
07:56
(4) да, это ТиИ, но вряд-ли поможет, хотя...
6 dk
 
31.03.14
08:01
а просто запрос по остаткам быстро или медленно формируется?
7 rphosts
 
31.03.14
08:12
1.сделать второй запрос в пакете в котором отбирать из первого в отдельную таблицу номенклатуру, подразделение, организацию.
2.в условии на ВТ Остатки переписать на
(Номенклатура, Подразделение, Организация) В (Выбрать ВТТовары2.Номенклатура, ВТТовары2.Подразделение, ВТТовары2.Организация ......)
8 Ivan Bezdomnyi
 
31.03.14
08:13
(5) да, ТиИ пробовали - не помогает.

(6) если просто в консоли выполнить этот запрос = 0.047, если убрать соединение с товарным чеком и оставить только по остаткам = 0.015

это, конечно, наверное даже быстро, но просто заказчик когда массовым перепроведением занимается - говорит "хочу быстрее, оптимизируйте!", а мы уже месяц в ответ говорим что дальше уже некуда оптимизировать)
9 Aleksey
 
31.03.14
08:14
(8) ну так пусть железо апгрейдит
10 Wobland
 
31.03.14
08:15
(8) ага, массовое проведение занимается большей частью этим запросом, да?
11 Ivan Bezdomnyi
 
31.03.14
08:22
(7) если всё правильно понял - попробовал, тратится чуть больше времени, чем на изначальный

(10) сделал замер производительности - больше 30% времени тратится на этот запрос
12 Ivan Bezdomnyi
 
31.03.14
08:26
Как-то слышал, что порядок измерений может влиять на скорость, только не помню как. Думал может по этому поводу кто что скажет.
13 Ymryn
 
31.03.14
08:35
Попробуй в ВТ проиндексировать по "Номенклатура" + возможно, надо замерять еще и "КатегорияТовара".
14 ivanovnm
 
31.03.14
08:36
(0) Засунь отбор по категории товара в виртуальную таблицу

|                (Номенклатура, КатегорияТовара) В
|                        (ВЫБРАТЬ
|                            ВТТовары.Номенклатура,
|                            ВТТовары.КатегорияТовара
|                        ИЗ
|                            ВТ КАК ВТТовары)
15 ivanovnm
 
31.03.14
08:38
(0) Таблицу ВТ проиндексируй по Номенклатуре и Категории товара, хотя если в документах реально по 2-3 строки то вряд ли поможет.
16 ivanovnm
 
31.03.14
08:39
(0) Поищи добавленные умельцами подписки на события документа ПриЗаписи(), ОбработкаПроведения(). Если кривые - оптимизируй.
17 ivanovnm
 
31.03.14
08:41
(12) По всем измерениям сверху должен быть указан отбор. Тут отбор по всем измерениям присутствует, так что все вроде ок.
18 rphosts
 
31.03.14
08:44
(17) нет, нужно что-бы отбор был по первым, т.е. если измерения 1,2,3 то отбор по измерениям 1 + 2 - нормально, а если 2 + 3 - индекс ничем не поможет
19 ivanovnm
 
31.03.14
08:46
(18) сверху = по первым, не так выразился. но ведь все ок?
20 Ivan Bezdomnyi
 
31.03.14
08:49
(14) ок, так и сделаем.

Ладно, всем спасибо(!), если ни у кого больше замечаний нет, то "теперь мы точно сделали всё что могли")
21 Alex S D
 
31.03.14
08:54
а использование итогов регистров выключали перед перепроведением?
22 Alex S D
 
31.03.14
08:55
смысл оптимизировать этот запрос, если дело не в запросе
23 ivanovnm
 
31.03.14
08:55
(20) Ну и еще правилом хорошего тона считается группировка табличной части с суммированием количества, тогда не нужны будут многочисленные проверки на дублирование строк.
24 ivanovnm
 
31.03.14
08:55
(22) Как определил что дело не в запросе?
25 Alex S D
 
31.03.14
08:56
(24) соотнеси время выполнения запроса со временем  проведения документа...
26 ivanovnm
 
31.03.14
08:57
(21) Если отключить итоги, то как получить остатки?
27 Ivan Bezdomnyi
 
31.03.14
08:59
(21)(22) я не утверждал, что дело в запросе, просто привел и регистр и запрос, и спросил мысли людей)
попробовать УстановитьИспользованиеИтогов()?
28 Alex S D
 
31.03.14
08:59
(26) хотя да.. тут не прокатит
29 ИС-2
 
naïve
31.03.14
08:59
(13) не те объемы для индексирования
30 ivanovnm
 
31.03.14
08:59
(25) При проведении документа могут быть десятки обращений к СУБД, никто не говорит что время выполнения запроса и время проведения документа будут совпадать.
31 Alex S D
 
31.03.14
09:00
(30) я к тому, что это может не самое узкое место. Замер производительности делался?
32 Bober
 
31.03.14
09:01
(0)
1. Выполнили средствами 1с (через конфигуратор) полный пересчет итогов.
2. Выполни перестроение индексов и обновление статистики на SQL сервере.

PS странно, зачем в регистр остатков добавили измерение Организация.
33 Bober
 
31.03.14
09:03
(0) RLS используется?
34 Ivan Bezdomnyi
 
31.03.14
09:03
(30) да, писал выше, что больше 30% времени всего перепроведения тратиться на этот запрос..
35 Ivan Bezdomnyi
 
31.03.14
09:06
(32) а 2ой пункт именно на SQL сервере надо? Галочка о переиндексации в конфигураторе в Тестирование и исправление - не то?
36 Ivan Bezdomnyi
 
31.03.14
09:07
(33) RLS не используется
37 ДенисЧ
 
31.03.14
09:13
Я бы лично поймал бы этот запрос в профайлере и покрутил бы его в студии.
Проверил бы на хинты по индексам, на планы выполнения...
38 Широкий
 
31.03.14
09:15
(0) На мой взгляд, запрос вполне корректный.
Как вариант я бы попробовал сделать без временки.
39 neckto
 
31.03.14
09:19
(8) У тебя проблема не с проведением одного документа - запрос выполняется быстро, проблема с массовым перепроведением - вот и решай ее. Попробуй реализовать обработку перепроведения таким образом, чтобы запрос к остаткам выполнялся один раз.
40 Ivan Bezdomnyi
 
31.03.14
09:26
(39) так то да, но это малореально, потому что перепроводятся не только Товарные чеки, но и все остальные документы. И проведение каждого, оказывает влияние на остатки при проведении следующего..
41 neckto
 
31.03.14
09:49
(40) При списании товара по-средней себестоимость не изменяется. Для того, чтобы узнать остаток на момент текущего документа - зачем выполнять запрос к таблице остатков, если известен остаток на начало предыдущего документа и известно, на сколько он уменьшился?
42 ivanovnm
 
31.03.14
09:51
Проще тогда на РАУЗ пересесть