|
тормозит запрос | ☑ | ||
---|---|---|---|---|
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) да, так и есть. Только с другого компа и лень пароль вспоминать, проще было зарегаться поновой. В общем, да - Телепортация.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |