Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

долго работает хранимая процедура [MSSQL]


Страницы:   1 2 3 4

SLP ©   (2007-01-16 12:02:00) 

Добрый день!
У меня хранимая процедура на сервере отрабатывает около 5 мин. Помещаю этот же самый запроc в QA и он отрабатывает за 2 сек. Сервер MSSQL2000, SP поставлен последний.
Помогите пожалуйста советом, куда смотреть ?


Ega23   (2007-01-17 13:58:00) [41]


> Олег, через округление числа - грабля...


Согласен. Это я не продумал.
Ну тогда [25] - та наверняка


Павел Калугин   (2007-01-17 13:53:00) [42]

> [27] SLP ©   (17.01.07 13:52)

а план запроса посмотреть дашь?


Павел Калугин   (2007-01-17 13:52:00) [43]

> [25] Ega23 ©   (17.01.07 13:46)

вот через флур - это верно. грабли не будет..


SLP   (2007-01-17 13:52:00) [44]

I>
> SLP ©   (17.01.07 12:54) [19]


А на [19] ничего не напишите?


Павел Калугин   (2007-01-17 13:51:00) [45]

> [24] Ega23 ©   (17.01.07 13:36)

Олег, через округление числа - грабля...
declare @d datetime
select @d=convert(datetime,'17 Jan 2007 23:59:59:01',13)
select @d
Select Cast(Cast(@d as int) as datetime)
select convert(datetime,convert(varchar,@d,3),3)

и сравни результаты. иногда это ошибка.


Ega23   (2007-01-17 13:46:00) [46]

Шеф так делает
  Set @Date=cast( Floor(cast(@DateTime as numeric(18,12))) as datetime)
Это, ИМХО, как-то мутновато...


Ega23   (2007-01-17 13:36:00) [47]


> а конверту не пофиг?


Шут его знает. Специально не проверял, но мне кажется, что через int быстрее будет.


Павел Калугин   (2007-01-17 13:32:00) [48]

> [22] Ega23 ©   (17.01.07 13:30)

а конверту не пофиг?


Ega23   (2007-01-17 13:30:00) [49]


> а я через строку привык гонять... Через целое быстрее разве?
>
>


дык. DateTime ведь число.


Павел Калугин   (2007-01-17 13:23:00) [50]

> [20] Ega23 ©   (17.01.07 13:10)

а я через строку привык гонять... Через целое быстрее разве?


Ega23   (2007-01-17 13:10:00) [51]


> Помнится перед Новым Годом как раз Ega23 в какой-то ветке
> и говорил об округлениях даты без конвертации к чару. Round
> дату принимает?
>


Я делаю
Declare @dt datetime
Set @dt=getdate()
Select @dt=Cast(Cast(@dt as int) as datetime)


SLP   (2007-01-17 12:54:00) [52]


> Bless ©   (17.01.07 11:59) [18]


Отвлеклась на другую работу... А насчет ХП : выполняется около 7 мин, планы запросов select-а и ХП на экране смотрю одновременно, но что с чем и как сравнивать и как их понимать не знаю. На каждом этапе и в первом и во-втором случае указывается % от всего выполнения selеcta ли ХП. А время выполнения этого этапа, например там где 70% не указывается, вернее я не вижу
Индексы в табл меняла, не помогает. Сейчас индексы по ssd_mail, datetime, id_ves. PK по id_ssd.


Bless   (2007-01-17 11:59:00) [53]


> SLP ©   (16.01.07 17:31) [17]
>  крутится 5 минуту....Не знаю как разрулить ситуацию, завтра
> уже напишу планы выполнения. Нужно идти домой.


Ну и как все прошло?


SLP   (2007-01-16 17:31:00) [54]


> Bless ©   (16.01.07 17:25) [16]


Спасибо. уже запустила, крутится 5 минуту....
Не знаю как разрулить ситуацию, завтра уже напишу планы выполнения. Нужно идти домой.


Bless   (2007-01-16 17:25:00) [55]

@d_mail 2datetime


Bless   (2007-01-16 17:23:00) [56]

А если выполнить в QueryAnalizer что-то в духе
declare
@d_mail datetime,
@d_mail1 datetime

select rtrim(ves.iki_ves)+' '+ rtrim(ves.board_number)+' '+rtrim(ves.ves) as name_ves,cast(convert(char(10),
a.datetime,102) as datetime) as ssd_data,
datediff(day,a.datetime,cast(convert(char(10),a.ssd_mail,102) as datetime))-1 as day_r,a.id_ssd, a.id_ves, a.ssd_mail
from start_ssd a, start_ssd b  
join ves on b.id_ves=ves.id_ves
where a.ssd_mail>=@d_mail
and a.ssd_mail<=@d_mail2
and a.id_ssd=b.id_ssd
and a.processstatus  not in (1,11)
and a.mem in (21,31)
and a.id_ves<>0
and  datediff(day,a.datetime,a.ssd_mail)>=2
and not exists
(select id_ssd
from start_ssd
where id_ves=a.id_ves
and datetime=a.datetime
and ssd_mail<a.ssd_mail)
order by a.ssd_data, a.id_ves

exec [ssd_delayed_period]  @d_mail, @d_mail1


и сравнить планы выполнения?
Кстати, лучшие собаководы рекомендуют начинать процедуру с команды SET NOCOUNT ON (но это я так, к слову)


Desdechado   (2007-01-16 17:23:00) [57]

clickmaker ©   (16.01.07 15:53) [8]
> а что в этом криминального?
Да ничего, если без фанатизма. Только зачем?


evvcom   (2007-01-16 17:13:00) [58]

> [12] Павел Калугин ©   (16.01.07 17:05)

Чего, нету что ль? Бардак.
Помнится перед Новым Годом как раз Ega23 в какой-то ветке и говорил об округлениях даты без конвертации к чару. Round дату принимает?


Павел Калугин   (2007-01-16 17:05:00) [59]

> [10] evvcom ©   (16.01.07 15:58)
> Только для этого есть спец.функция округления,

В MSSQL? какая?


SLP   (2007-01-16 17:03:00) [60]


> evvcom ©   (16.01.07 15:50) [7]

Почитала книжки по серверу, справку, запускала 2 варианта выполнения процедуры ( с "and not exists" и с left join) :

exec DBO.SSD_DELAYED_period1 '20070101','20070115' with recompile

- результат тот же. от 5 до 8 мин.


> evvcom ©   (16.01.07 15:58) [10]


Расскажите, пожалуйста.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо