Имя: Пароль:
1C
1С v8
тормозит запрос
0 MikhaDi4
 
26.06.13
20:49
Привет! Есть Розница 2.0.4.5 на платформе 8.2.16.368 (клиент-серверный вариант - mssql). Жутко медленно выполняются запросы к РС СебестоимостьНоменклатуры.

Следующий запрос выполняется почти 50 секунд, при этом в таблице среза последних этого регистра всего около 22 тыс. записей:

ВЫБРАТЬ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СебестоимостьНоменклатурыСрезПоследних.Номенклатура) КАК Номенклатура
ИЗ
   РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних КАК СебестоимостьНоменклатурыСрезПоследних
   
   


Структура регистра себестоимости такая:
Периодический(подч.регистратору), имеет три измерения:
Магазин (спр.Магазины, Ведущее)
Номенклатура (спр.Номенклатура, Ведущее)
Характеристика (спр.ХарактеристикаНоменклатуры)
и ресурс:
Цена (число)


Подскажите, как ускорить работу с запросами по этому регистру?
ЗЫ: запросы к другим регистрам (н-р накопления) достаточно быстры.
1 exwill
 
26.06.13
20:51
(0) Попробуй обращаться не к срезу последних, а ко всему регистру.
2 Рэйв
 
26.06.13
20:53
(0)Не удивительно.
Сначала он тебе ваяет таблицу Различные и только потом считает Количество.
Ты его еще в космос запусти
3 МихаилМ
 
26.06.13
20:54
+ различные заменить на группировку
4 vs1c
 
26.06.13
20:55
Не холивара ради, а интереса для. "Розница ... клиент-серверный вариант" - у меня резануло. А ну как сервер хряпнется - все кассы спать или как?
5 MikhaDi4
 
26.06.13
21:35
(4) У клиента так сделано.
(2) упс. не тот запрос вставил. Вот этот запрос тормозит:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
   НоменклатураСегмента.Номенклатура
ПОМЕСТИТЬ СписокТоваров
ИЗ
   РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
ГДЕ
   НоменклатураСегмента.Сегмент = &Сегмент

СГРУППИРОВАТЬ ПО
   НоменклатураСегмента.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
   СебестоимостьНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ ОстаткиНаНачало
ИЗ
   РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних(
           ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, -1),
           Номенклатура В
               (ВЫБРАТЬ
                   СписокТоваров.Номенклатура
               ИЗ
                   СписокТоваров КАК СписокТоваров)) КАК СебестоимостьНоменклатурыСрезПоследних

СГРУППИРОВАТЬ ПО
   СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
   СебестоимостьНоменклатурыСрезПоследних.Цена
;




Пробовал его через соединение временных таблиц делать - тоже в скорости. (Первый пакет используется и в других пакетах)
6 MikhaDi4
 
26.06.13
21:36
+(5) всчастности тормоза при получении данных в таблицу ОстаткиНаНачало
7 MikhaDi4
 
26.06.13
21:39
+(4) Там используется центральная база розницы и несколько переферийных, потому с кассами все нормально должно быть.
8 drongo-god
 
26.06.13
21:49
(5)
Перестрой запрос полностью.
1) избався от первого помещения во временную таблицу СписокТоваров
2) избався от куска
ВЫБРАТЬ
                   СписокТоваров.Номенклатура
               ИЗ
                   СписокТоваров КАК СписокТоваров

Это все можно одним запросом сделать.
9 MikhaDi4
 
26.06.13
22:02
(8) мне первую таблицу в куче мест использовать нужно.
Я делал поразному, никакого выигрыша в скорости небыло:

1) типа того имели в виду?

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
   СебестоимостьНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ ОстаткиНаНачало
ИЗ
   РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних(
           ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, -1),
           Номенклатура В
               (ВЫБРАТЬ
                   НоменклатураСегмента.Номенклатура
               ИЗ
                   РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
               ГДЕ
                   НоменклатураСегмента.Сегмент = &Сегмент
               СГРУППИРОВАТЬ ПО
                           НоменклатураСегмента.Номенклатура)) КАК СебестоимостьНоменклатурыСрезПоследних

СГРУППИРОВАТЬ ПО
   СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
   СебестоимостьНоменклатурыСрезПоследних.Цена

2) Делал еще через левое соединение таблиц - тоже самое по скорости
10 MikhaDi4
 
26.06.13
22:08
+(9) примерно так:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
   СебестоимостьНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ ОстаткиНаНачало
ИЗ
   РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних(ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, -1), ) КАК СебестоимостьНоменклатурыСрезПоследних
       ПО НоменклатураСегмента.Номенклатура = СебестоимостьНоменклатурыСрезПоследних.Номенклатура
ГДЕ
   НоменклатураСегмента.Сегмент = &Сегмент
   И НЕ СебестоимостьНоменклатурыСрезПоследних.Номенклатура ЕСТЬ NULL

СГРУППИРОВАТЬ ПО
   СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
   СебестоимостьНоменклатурыСрезПоследних.Цена
11 Зойч
 
26.06.13
22:08
зачем различные брать из среза последних?
12 Зойч
 
26.06.13
22:09
список товаров по номенклатуре проиндексируй
13 drongo-god
 
26.06.13
22:16
(10) Этот вариант получше в плане скорости.
Еще один вопрос, на SQL сервере статистика периодически пересчитывается? Если нет то пересчитай, результаты должны улучшиться.
14 MikhaDi4
 
26.06.13
22:18
(11) см. 9-10. Ну там есть измерение еще одно (магазин) - ну так я хочу чтобы оно не мешало
15 MikhaDi4
 
26.06.13
22:20
(13) хз про статистику, завтра почитаю про нее и как это делать. Я сейча выгрузил базу в dt. Так вот в файловом режиме тоже минуту думает (((
16 drongo-god
 
26.06.13
22:28
(15) А сколько записей на выходе получается. Просто интересно.
17 drongo-god
 
26.06.13
22:32
(16) я имею в виду сколько строк в таблице ОстаткиНаНачало после выполнения запроса?
18 MikhaDi4
 
26.06.13
22:34
(16) примерно 17 тыс.
19 drongo-god
 
26.06.13
22:36
(10) попробуй еще вот это условие убрать
И НЕ СебестоимостьНоменклатурыСрезПоследних.Номенклатура ЕСТЬ NULL
20 drongo-god
 
26.06.13
22:40
(18) и еще, думаю что значительный кусок времени занимает помещение во временную таблицу ОстаткиНаНачало.
Попробуй без помещения замер сделать, просто для эксперимента.
21 MikhaDi4
 
26.06.13
22:54
(19) Не, там могут быть NULL
22 MikhaDi4
 
26.06.13
22:55
(20) пробовал, ниче не вышло хорошего
23 hhhh
 
26.06.13
23:48
а точно там проиндексировано по номенклатуре?
24 H A D G E H O G s
 
27.06.13
00:54
1) Всякие RLS ы
2) Помещение во временную таблицу не может тормозить.
3) Убрать группировку при выборке из среза.
4) А точно запрос тормозит?
5) Будь мужиком, блеать, запусти ms sql profiler с настройкой show xml plan раздела performance
25 Ageres
 
27.06.13
02:37
Проиндексировать номенклатуру во временной таблице.
26 rikodroo
 
27.06.13
07:50
(24) 3 - если из среза убрать группировку, то там наверно может быть задвоена запись (там в РС есть измерение Магазин)
27 vs1c
 
27.06.13
09:17
(7) Ваще мозг порвало. Это как?
28 rikodroo
 
27.06.13
10:03
(27) Распределенная база (т.е. везде розница). Центральный узел на Скуле, переферийка - по разному. Кассы подключены в магазинах, т.е. к переферийным базам.
29 vs1c
 
27.06.13
10:08
(28) Телепатировали или автор (0) шепнул?
30 hhhh
 
27.06.13
10:23
что-то мне показалось, что рикодро = автору
31 rikodroo
 
27.06.13
10:31
(30) да, так и есть. Только с другого компа и лень пароль вспоминать, проще было зарегаться поновой. В общем, да - Телепортация.
2 + 2 = 3.9999999999999999999999999999999...