Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> медленная работа SP 
:(
    Опции темы
Vit
Дата 10.7.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Имеется длинный SQL код. Один и тот же код работает в квери аналайзере в несколько раз быстрее, чем в SP. С компиляцией вроде не связано - так как повторное выполнение столь же длительное


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
SergKO
Дата 11.7.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



1. Vit, посмотрите какие SET посылаются при установлении коннекта из Q&A и из Вашего приложения.
2. В отдельных случаях рекомпиляция может производиться и при повторных вызовах. Один из вариантов - в процедуре создается временная таблица, а операции с этой таблицей производятся в другой процедуре, вызываемой из первой. В следующем примере при любом вызове процедуры spTst будет рекомпиляция процедуры spSubTst
Код

create procedure spSubTst
as
    insert into #tmp (f)
        select 1
        union all
        select 2
        union all
        select 3
        union all
        select 4
go
create procedure spTst
as

    create table #tmp (id int identity(1, 1), f varchar(50));
    
    exec spSubTst;
    
    select * from #tmp;
go

3. Посмотрите какой конкретно стейтмент "тормозит".
4. Приложение и Q&A запускаются на одном и том-же компьютере?

Это сообщение отредактировал(а) SergKO - 11.7.2007, 11:52
PM MAIL   Вверх
Vit
Дата 11.7.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



1. и хранимка и код вызывал из одного и того же окна QA
2. хранимок не вызывается
3. вот етот, причем при запуске просто в  QA выполняется 1 сек, в хранимке - пол часа 
Код

  INSERT INTO @tblSurveysByRunDate 
  SELECT  
   p.RunDate, 
   coalesce(cf.SurveyTypeName, ma.ActionAbbr), cp.QuestCode, cp.GroupCode, Sum(1), 
   AVG(Case wrn.QuestionValue
        WHEN 1 THEN cs.Scale1
        WHEN 2 THEN cs.Scale2
        WHEN 3 THEN cs.Scale3
        WHEN 4 THEN cs.Scale4
        WHEN 5 THEN cs.Scale5
        WHEN 6 THEN cs.Scale6
        WHEN 7 THEN cs.Scale7
        WHEN 8 THEN cs.Scale8
        WHEN 9 THEN cs.Scale9
        WHEN 10 THEN cs.Scale10
    END) AS Rate, 
    COALESCE((SELECT SurveyTypeID FROM MeetingScope..SurveyType (nolock) WHERE SurveyTypeName=cf.SurveyTypeName) , ma.ActionOrder )
    FROM SQSDB.dbo.PacketID p
        INNER JOIN DAYScope.dbo.DailyPacketID dp  (nolock) ON
            (p.pid = dp.sqsdb_pid)
        INNER JOIN DAYScope.dbo.PointInTimeDPIDs pdp  (nolock) ON
            (dp.dpid = pdp.dpid)
        INNER JOIN surveyfrontend.dbo.WebResult wr  (nolock) ON
            (pdp.WebResultID = wr.WebResultID)
        INNER JOIN MEETINGScope.dbo.MeetingHistory mh  (nolock)  ON 
            mh.WebResultID = wr.WebResultID
        INNER JOIN MEETINGScope.dbo.MeetingActions ma  (nolock)  ON                   -- We have to join out to MeetingActions to see if IsSurvey = 1, or else we get dupes because WebResult is also stored for flash reports
            mh.MeetingActionID = ma.MeetingActionID AND
            ma.IsSurvey = 1
        INNER JOIN SQSDB.dbo.CardFormat cf  (nolock) ON 
            (wr.PodProjectID = cf.PodProjectID and wr.Cardset = cf.Cardset)
        INNER JOIN SQSDB.dbo.PodProject pp  (nolock) ON (
            wr.PodProjectID = pp.PodProjectID)
        INNER JOIN surveyfrontend.dbo.WebResultN wrn  (nolock) ON 
            (wr.WebResultID = wrn.WebResultID)
        INNER JOIN SQSDB.dbo.CardPositions cp  (nolock) ON 
            (pp.TypeCode = cp.TypeCode and wr.Cardset = cp.Cardset and wrn.Position = cp.Position)
        INNER JOIN SQSDB.dbo.ClientSettings cs  (nolock) ON 
            (cs.ClientCode = @CC and cs.ProjectCode = @PJ)
    WHERE    p.ClientCode    = @CC AND
    p.PropCode         = @PC AND
    p.FacilityCode         = @FC AND
    p.ProjectCode         = @PJ AND
    p.RunDate              >= DateAdd(yy, -2, @RD) AND
    p.RunDate              <= @RD AND
    wr.IsComplete       = 1 AND
    wr.AutoGenerated    = 0 AND
    wrn.QuestionValue !=cs.NA and cp.demographic=0 -- removes the demographic questions
  GROUP BY p.ClientCode, p.PropCode, p.FacilityCode, p.ProjectCode, p.RunDate, cf.SurveyTypeName, ma.ActionAbbr,ma.ActionOrder ,
    cp.GroupCode, cp.QuestCode


4. О приложении речь не идет  - все в QA с одного и того же окна


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
SergKO
Дата 11.7.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



1. Первое, что приходит в голову - используются разные планы. Если не затруднит, то покажите оба в текстовом виде. Я всречал несколько раз сообщения о том, что такие вещи происходили после перехода с 7 на 2000 (у Вас не было такого перехода совсем недавно?). Оптимизаторы разные.
2. Попробуйте реиндекс и обновите статистику.
3. Если объем данных большой, то при выборе неудачного плана скорее всего начинается spool  во время INSERTA (посмотрите Profiler'ом).
4. Попробуйте разложить запрос на подзапросы и выполняйте постепенно усложняя. Для начала попробуйте SELECT без INSERTA.

PS
мелкая придирка

DateAdd(yy, -2, @RD) лучше вычислить заранее и подставить вместо p.RunDate >= DateAdd(yy, -2, @RD) переменную.
PM MAIL   Вверх
Vit
Дата 11.7.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Примерно так и поступил, решило проблему разбиение на несколько запросов


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1174 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.