Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Скорость обработки запросов. (число прочтений - 1814 )
Pavel_pskov
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 25. Апреля 2007
Скорость обработки запросов.
27. Апреля 2007 :: 08:45
Печать  
Один и тот же запрос в 1с выполняется 25 минут и при этом кушает оперативы около 300 метров, а в QA - 5секунд.
Объясните, может есть какие-либо грабли?
Отчёт - ведомость по ЮЛ, и происходит такое только если в группировках указаны только ЮЛ.
А если в группировку выводить не только ЮЛ, но и контрагентов, то всё оживает и выполняется за 10-15 секунд.
1с++ 1.8.1.6, релиз 1с - 25, sql 2000, конфа комплексная.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Скорость обработки запросов.
Ответ #1 - 27. Апреля 2007 :: 09:34
Печать  
Ты бы текст запроса показал, может дело повеселей пошло бы...
  

FormEx developer
Наверх
www  
IP записан
 
Pavel_pskov
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 25. Апреля 2007
Re: Скорость обработки запросов.
Ответ #2 - 27. Апреля 2007 :: 10:39
Печать  
SELECT
$ВнешКонтрагенты.ЮрФизЛицо AS [ЮрЛицо $Справочник],
Рег.СуммаРубОстаток AS НачОст ,
0 AS Приход ,
0 AS Расход ,
Рег.СуммаРубОстаток AS КонОст ,
0 AS ВозвратОтПокупателя ,
0 AS ВозвратПоставщику ,
0 AS ПродажаТарыПриход ,
0 AS ПродажаПриход ,
0 AS ВозвратПоставщикуПриход ,
0 AS ОплатаПоставщикуПриход ,
0 AS ВозвратОплатыПокупателюПриход ,
0 AS ЗакупкаРасход ,
0 AS ДополнительныеРасходыРасход ,
0 AS ВозвратОтПокупателяТараРасход ,
0 AS ВозвратОтПокупателяРасход ,
0 AS ВозвратОплатыОтПоставщикаРасход ,
0 AS ОплатаОтПокупателяРасход ,

FROM $РегистрОстатки.Покупатели(
:ДатаКонца~,            --КонецПериода
LEFT JOIN $Справочник.Договоры AS ВнутрДоговоры(NOLOCK) ON (ВнутрДоговоры.ID = Договор)
LEFT JOIN $Справочник.Контрагенты AS ВнутрКонтрагенты(NOLOCK) ON (ВнутрДоговоры.ParentExt = ВнутрКонтрагенты.ID)
LEFT JOIN $Справочник.ЮрЛица AS ВнутрЮрЛица(NOLOCK) ON ($ВнутрКонтрагенты.ЮрФизЛицо = ВнутрЮрЛица.ID),                  
,                  
,
(СуммаВал,СуммаРуб)
) AS Рег
LEFT JOIN $Справочник.Договоры AS ВнешДоговоры(NOLOCK) ON (ВнешДоговоры.ID = Рег.Договор)
LEFT JOIN $Справочник.Контрагенты AS ВнешКонтрагенты(NOLOCK) ON (ВнешДоговоры.ParentExt = ВнешКонтрагенты.ID)
LEFT JOIN $Справочник.ЮрЛица AS ВнешЮрЛица(NOLOCK) ON ($ВнешКонтрагенты.ЮрФизЛицо=ВнешЮрЛица.ID)



UNION ALL
SELECT
$ВнешКонтрагенты.ЮрФизЛицо AS [ЮрЛицо $Справочник],
SUM(CASE РегОбороты.DEBKRED
WHEN 0 THEN -$РегОбороты.СуммаРуб      
WHEN 1 THEN $РегОбороты.СуммаРуб      
ELSE 0 END) AS НачОст ,
SUM(CASE РегОбороты.DEBKRED
WHEN 0 THEN $РегОбороты.СуммаРуб      
ELSE 0 END) AS Приход ,
SUM(CASE РегОбороты.DEBKRED
WHEN 1 THEN $РегОбороты.СуммаРуб      
ELSE 0 END) AS Расход ,
0 AS КонОст ,
SUM(CASE
WHEN      (РегОбороты.DEBKRED = 1)
     AND ($РегОбороты.КодОперации = '   15O   ')
           THEN $РегОбороты.СуммаРуб
ELSE 0 END) AS ВозвратОтПокупателя ,
SUM(CASE
WHEN      (РегОбороты.DEBKRED = 0)
     AND ($РегОбороты.КодОперации = '   1AT   ')
           THEN $РегОбороты.СуммаРуб
ELSE 0 END) AS ВозвратПоставщику ,
SUM(CASE
WHEN      (РегОбороты.DEBKRED = 1)
     AND ($РегОбороты.КодОперации = '   15O   ')
           THEN $РегОбороты.СуммаВал
ELSE 0 END) AS ВозвратОтПокупателяВ,
....
SUM(CASE
WHEN      (РегОбороты.DEBKRED = 1)
     AND ($РегОбороты.КодОперации = '   1MN   ')
           THEN $РегОбороты.СуммаВал
ELSE 0 END) AS ОплатаОтПокупателяРасходВ

FROM $Регистр.Покупатели AS РегОбороты (NOLOCK)
INNER JOIN _1SJOURN AS Журнал(NOLOCK) ON (Журнал.IDDOC = РегОбороты.IDDOC)
LEFT JOIN $Справочник.Договоры AS ВнешДоговоры(NOLOCK) ON (ВнешДоговоры.ID = $РегОбороты.Договор)
LEFT JOIN $Справочник.Контрагенты AS ВнешКонтрагенты(NOLOCK) ON (ВнешДоговоры.ParentExt = ВнешКонтрагенты.ID)
LEFT JOIN $Справочник.ЮрЛица AS ВнешЮрЛица(NOLOCK) ON ($ВнешКонтрагенты.ЮрФизЛицо=ВнешЮрЛица.ID)
WHERE
(Журнал.DATE_TIME_IDDOC BETWEEN :ДатаНачала AND :ДатаКонца~)
AND ($РегОбороты.КодОперации NOT IN
('   1MP   ',
'   O27   ',
'   1MQ   ',
'   1HV   ',
'   GKJ   ',
'   GKK   ',
'   GKL   ')
)
GROUP BY
$ВнешКонтрагенты.ЮрФизЛицо

  
Наверх
 
IP записан
 
Pavel_pskov
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 25. Апреля 2007
Re: Скорость обработки запросов.
Ответ #3 - 30. Апреля 2007 :: 06:43
Печать  
Все, разобрался, забыл указать одно измерение и возвращалась ТЗ из ~112000 строк вместо ~1500, соответственно эта ТЗ долго группировалась.
Итоговый прирост производительности просто бешеный.
Для сравнения: раньше 597 секунд, теперь 17.

Теперь осталось около 20 модулей документов и отчётов, и можно премию требовать  Очень довольный
« Последняя редакция: 30. Апреля 2007 :: 09:01 - Pavel_pskov »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать