![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
долго работает хранимая процедура [MSSQL]
SLP © (2007-01-16 12:02:00)Добрый день!
У меня хранимая процедура на сервере отрабатывает около 5 мин. Помещаю этот же самый запроc в QA и он отрабатывает за 2 сек. Сервер MSSQL2000, SP поставлен последний.
Помогите пожалуйста советом, куда смотреть ?
Bless (2007-01-17 17:16:00) [21]Попробуй запрос из [49]. Результат работы должен быть таким же, как и старого запроса. А вот скорость... неуверен, но уж точно не медленнее.
Bless (2007-01-17 17:05:00) [22]в CSV и на картинках - разные планы выполнения. В CSV они одинаковы и для запроса, и для хранимки. А на картинке - разные.
К тому же, на картинках у тебя написано, что хранимка выполняется 5-8 мин. А судя по плану она занимает 0.08% от времени выполнения. Т.е. выполняется ГОРАЗДО быстрее запроса. Так что я думаю, твое утверждение "хранимка -5 мин, запрос - 2 сек" - неверно.
Вероятнее, что ты выполняла запрос непосредственно сразу после хранимки, я прав?
Подозреваю, что выполни ты запрос первым, а хранимку - сразу вслед за ним, получила бы противоположный результат (о чем план в картинках и говорит).
Я хочу сказать, что 2 секунды, может быть, получились из-за того, что сервер кешировал данные или что-то в этом духе (я не шибко силен) и этот результат - "нечестный" и запорачиваться по поводу "почему большая разница" не стоит.
А вот по поводу, "почему аж 5 мин" - стоим, имхо.
Что касается запроса:
поле start_ssd.id_ssd случайно не ключевое? Если да, то тогда (если я не ошибаюсь) один start_ssd из запроса можно выбросить:
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
join ves on a.id_ves=ves.id_ves
where a.ssd_mail>=@d_mail
and a.ssd_mail<=@d_mail2
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
SLP (2007-01-17 16:51:00) [23]
> ел Калугин © (17.01.07 16:44) [47]
Спасибо. Только жаль Ваше время
Павел Калугин (2007-01-17 16:44:00) [24]> [46] SLP © (17.01.07 16:16)
гут вечерком дома попробую смоделировать
SLP (2007-01-17 16:16:00) [25]
> Bless © (17.01.07 16:06) [45]
http://slil.ru/23762556- здесь .CVS
http://slil.ru/23762577 - десь док с скриншотами, выложила их по-порядку, поэтому понятно будет, т.к. не умещающиеся рисунки сделала с повторением по краям.
В табл start_ssd - около 270000 зап.
В табл ves- 1971 записей. Это справочник судов.
Bless (2007-01-17 16:06:00) [26]после того, как залила, у тебя вверху страницы (у меня в Опере в добавок и в адресной строке тоже) будет адрес типа
http://slil.ru/23762505
Вот его сюда и скажи
SLP (2007-01-17 15:59:00) [27]
> Bless © (17.01.07 15:55) [42]
Сейчас подготовлю. Спасибо. Паузы - это работы другой много...
SLP (2007-01-17 15:56:00) [28]зашла на http://slil.ru/ - получился http:// zalil.ru/, набрала browse - выбрала свой файл - и Send. Куда ушел мой файл я не знаю. Может что не так сделала?
Bless (2007-01-17 15:55:00) [29]
> SLP © (17.01.07 15:28) [40]
>
> Послала файл со скриншотами : "Это план запроса для Select
> и ХП.doc"
>
Куда послала-то? И еще выложи, если не трудно, еще и "неудобный" csv-файл.
По картинкам ориентироваться конечно удобнее, но я как-то подозреваю, что план в ширину у тебя не влез в один экран, что неудобно. Да и клацнув мышкой по пиктограмме на скриншоте, дополнительная информация у меня не всплывет, как у тебя в Analizer-е. А в "неудобном" файле это все есть. :)
Может, это и не понадобится, но паузы между твоими появлениями тут довольно велики, поэтому на всякий случай прошу все сразу.
И еще, напиши, сколько записей в каждой из таблиц, участвующих в запросе.
Павел Калугин (2007-01-17 15:41:00) [30]> [40] SLP © (17.01.07 15:28)
куда?
SLP (2007-01-17 15:28:00) [31]
> Павел Калугин © (17.01.07 14:47) [39]
Послала файл со скриншотами : "Это план запроса для Select и ХП.doc"
Посмотрите, пож-та.
Павел Калугин (2007-01-17 14:47:00) [32]http://slil.ru/
Павел Калугин (2007-01-17 14:45:00) [33]> [37] SLP © (17.01.07 14:43)
народ, рапида, и так далее..
SLP (2007-01-17 14:43:00) [34]
> Bless © (17.01.07 14:10) [33]
Спасибо. Сделала план запросов через "set showplan_all on", но там черт ногу сломает: 45 записей, куча полей, я все это записала как .csv, потом открыла Excel-ем, во-первых, Вам не послать и не выложить здесь, а во-вторых, даже неудобно, что кто-то будет тратить свое время, чтобы в этом разбираться...
> Павел Калугин © (17.01.07 13:53) [29]
> > [27] SLP © (17.01.07 13:52)
>
> а план запроса посмотреть дашь?
Я бы дала посмотреть скриншоты, но выкладывать некуда.
stone (2007-01-17 14:35:00) [35]
> то получим @v='1'
по умолчанию при объявлении переменной размер варчар равен мин. кол-ву символов, т.е. 1
> select convert(varchar,getdate(),3)
> то получим 17/01/07
при конвертации размер по умолчанию = макс кол-ву символов конвертируемого типа
2 Ega23 © (17.01.07 14:11) [34]
так что тут все нормально :)
Павел Калугин (2007-01-17 14:21:00) [36]> [34] Ega23 © (17.01.07 14:11)
:) но работает:) хотя если написать
declare @v varchar
set @v=convert(varchar,getdate(),3)
то получим @v='1'
а если просто
select convert(varchar,getdate(),3)
то получим 17/01/07
Ega23 (2007-01-17 14:11:00) [37]
> а select convert(datetime,convert(varchar,@d,3),3) чем не
> то?
Ты по-аккуратнее с varchar без длины.
Bless (2007-01-17 14:10:00) [38]А на
http://sql.ru/forum/actualforum.aspx
спрашивать не пробовала?
Твой вопрос все же не к программированию баз в делфи, а чисто к MS SQL больше относится. Да и народу там поболе тусуется, шансы получить ответ выше.
Bless (2007-01-17 14:07:00) [39]
> SLP © (17.01.07 12:54) [19]
>
Я правильно понял, что или ХП или запрос занял 70% от общего времени выполнения?
Если так, то это как-то не согласуется с твоими 5 мин против 2 сек.
Или ты опечаталась и на самом деле 5 мин против 2 мин?
Впрочем, в любом случае неплохо бы глянуть план.
Я правильно понимаю, что ты не знаешь, как его в текстовом виде получить?
Если да, то выполни сначала в Query Analizer-е
set showplan_all on, а потом
еще раз то, что в [15]. Полученные планы выложи здесь.
Павел Калугин (2007-01-17 14:01:00) [40]> [30] Ega23 © (17.01.07 13:58)
а select convert(datetime,convert(varchar,@d,3),3) чем не то?
ну да собстно результат то один и тот же...
> [27] SLP © (17.01.07 13:52)
если снять скриншот плана запроса и выложить через какой нибудь файлообменник будет проще.