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 поставлен последний.
Помогите пожалуйста советом, куда смотреть ?


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)

если снять скриншот плана запроса и выложить через какой нибудь файлообменник будет проще.


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

Наверх

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