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

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

Не удаляется ADO соединение со стороны сервера MSSQL [D6, MSSQL]


Michael Makushev ©   (2006-08-23 17:14:00) 

постановка задачи такая:
есть поток в экземпляре которого есть ADO коннекшн и ADO запрос. Запускаем поток и в цикле (в execute) периодически "совершаем" запрос - например "SELECT @@SPID SID". Что будет выдаваться? правильно! один и тот же SID. Теперь если закрыть соединение, с ужасом обнаружим, что сервер его держит. А теперь номер на бис - если соединение уничтожить не уничтожая при этом поток - то оно все равно держиться сервером!!!
Кто нить сталкивался с подобными вещами? Как это можно обойти не уничтожая поток?


Anatoly Podgoretsky   (2006-08-25 22:13:00) [1]

Ega23 ©   (24.08.06 11:35) [4]
Полностью согласен с утверждением.


sniknik   (2006-08-25 20:27:00) [2]

AlexWlad ©   (25.08.06 18:36) [7]
>> sniknik ©   (24.08.06 11:34) [3]
> Не винда, а SQL-сервер.
читать умеем? читаем все! а не просим брата первоклашку прочитать только самые короткие фразы...

и потом, а что в [3] не так? по твоему значит винда реалтайм а mssql нет? (ну раз фраза "...винда не реалтайм..." вызвала возражение "Не винда, а SQL-сервер") ???


AlexWlad   (2006-08-25 18:36:00) [3]


> sniknik ©   (24.08.06 11:34) [3]


Не винда, а SQL-сервер.


> Michael Makushev   (23.08.06 17:14)


А что, сильно мешает такое поведение? Обоснуй.


Nikolay M.   (2006-08-25 10:40:00) [4]


> А теперь номер на бис - если соединение уничтожить не уничтожая
> при этом поток - то оно все равно держиться сервером!!!


Более того, если выдернуть сетевой шнур, в sysprocesses данный SPID может еще какое-то время висеть. А самое веселье начинается, когда другой юзер подключится под тем же SPID-ом. Посмотри ссылк и обрати внимание на решение Павла.

http://www.sql.ru/forum/actualthread.aspx?tid=70061&pg=-1


> Как это можно обойти не уничтожая поток?


Что "ЭТО" и зачем?


sniknik   (2006-08-24 11:40:00) [5]

Ega23 ©   (24.08.06 11:35) [4]
я в смысле - если основа не гарантирует моментальной реакции то чего ждать от базирующихся на ней систем? любых.


Ega23   (2006-08-24 11:35:00) [6]


> но винда не реалтайм система. ;)
>


понятие real-time вообще бессмысленно для дискретных систем...  :о)


sniknik   (2006-08-24 11:34:00) [7]

а смотриш естественно сразу после закрытия коннекта? в расчете на моментальную реакцию... но винда не реалтайм система. ;)


Michael Makushev   (2006-08-24 11:29:00) [8]

"ужас" обнаруживается по двум признакам по выборке записей из master-a по sysprocess. или по "Exec sp_who", на момент закрытия и разрушения там остаются процессы связанные с подключением


sniknik   (2006-08-23 18:12:00) [9]

> Теперь если закрыть соединение, с ужасом обнаружим, что сервер его держит.
по каким признакам этот "ужас" обнаруживается?...

сделал проверку, открываю коннект делаю запрос (SELECT @@SPID SID)
получаю 51 (ну и в цикле естественно один и тот же)
делаю закрытие коннекта, тут же открытие (не уничтожая ничего, ни потока ни т.д.)
повторяю запрос SID = 52
опять закрываю, открываю, выполняю SID = 51
и т.д. 52, 51, 52, 51
(если конечно еще один не открыть, тогда в очередь еще 53 вмешивается)

вывод? не держит он его, просто при выдаче SPID - а коннекту, сразу формируется новое значение для следующей выдачи, и там уж закрылось предыдущее нет оно и выдается.


Наверх

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