![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
долго работает хранимая процедура [MSSQL]
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]
Расскажите, пожалуйста.