| 
    
            
         
         | 
    
  | 
Ускорить получение остатков | ☑ | ||
|---|---|---|---|---|
| 
    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    
     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    
     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 
 | 
         
        Проще тогда на РАУЗ пересесть     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |