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

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

Упраление соединениями на MS SQL Server [MSSQL]


GrBob ©   (2007-01-18 11:39:00) 

Мастера, кто-нибудь когда-нибудь интересовался принципами, на которых основывается коннект на MSSQL-сервере. Как определяется его состояние, как происходит определение разрыва соединения, чтобы коннект удалить (например, если клиентский процесс просто вышибли)? Интересны любые ссылки по этому поводу.


Ega23   (2007-01-18 14:32:00) [1]


> А что обычно происходит, когда соединение убито на сервере?
>  Либо клиент долбится никуда плодя гору исключений, либо
> нормально отрабатывает эту ситуацию и переподключается или
> забивает на это дело. Реализация клиента меня интересует
> не так сильно.


После полуторанедельного мозгового штурма как быть в такой ситуации, решили реконнект не делать. Сразу аварийный останов.


GrBob   (2007-01-18 13:36:00) [2]


> Что дальше должно произойти?

А что обычно происходит, когда соединение убито на сервере? Либо клиент долбится никуда плодя гору исключений, либо нормально отрабатывает эту ситуацию и переподключается или забивает на это дело. Реализация клиента меня интересует не так сильно.


> Так ты сам хочешь чистить "мертвые" соединения или тебя
> просто интересует, почему на сервере их нет, в то время
> как твои клиенты мрут как мухи, не разравая соединение?
> :)

Меня интересует, как сервер поддерживает соединение и следит за клиентами :)


ЮЮ   (2007-01-18 13:21:00) [3]

Так ты сам хочешь чистить "мертвые" соединения или тебя просто интересует, почему на сервере их нет, в то время как твои клиенты мрут как мухи, не разравая соединение? :)


Ega23   (2007-01-18 13:15:00) [4]


> Как действует "убийца" мне не так интересно. Enterprise
> Manager отправляет серверу запрос "KILL N", где N - SPID
> процесса, дальше дело техники найти его серверу и грохнуть,
>  особенно если у него хранятся ссылки на все потоки.
>


Но что дальше-то? Вот я убил процесс на сервере (не важно как - через EM, скриптом или ещё как-то).
Что дальше должно произойти?


GrBob   (2007-01-18 13:12:00) [5]

Каждый коннект обрабатывается в отдельном потоке, а не в процессе, поэтому непонятно, почему в EM написано "Kill Process".

Есть "сервис, который пинг осуществляет", он же "убийца процессов", он же собственно сам сервер, который реагирует на запросы клиентов. Пока непонятно, кто в этом случае инициализирует пинг-понг, сервер отправляет всем клиентам с нектороым периодом сообщения и ждет ответ или просто следит за активностью клиента, дергается он или нет? Оба варианта как-то сомнительны, может используется какой-то другой способ?

Как действует "убийца" мне не так интересно. Enterprise Manager отправляет серверу запрос "KILL N", где N - SPID процесса, дальше дело техники найти его серверу и грохнуть, особенно если у него хранятся ссылки на все потоки.


ЮЮ   (2007-01-18 12:23:00) [6]


> Т.е. один фиг нужен сервис, который пинг осуществляет.
>


Так один фиг нужен "убийца процессов", который будет делать то, что даже MS SQL серверу не очень-то, похоже, нужно.


Ega23   (2007-01-18 12:13:00) [7]


> Monitoring with SQL Server Enterprise Manager


Да, вот только делает он это по запросу. Т.е. один фиг нужен сервис, который пинг осуществляет.

Эх, вот если бы у ADOConnection было событие о разрыве соединения....


ЮЮ   (2007-01-18 12:05:00) [8]

Interprise Manager c этим справляется, значит возможно.

в BOL:
Monitoring with SQL Server Enterprise Manager
как он это делает и что можно сделать


GrBob   (2007-01-18 11:56:00) [9]

Исходников у меня нет :) Меня просто заинтересовал только этот момент.
Удалить = убить, закрыть, освободить...
Интересно именно со стороны сервера.


ЮЮ   (2007-01-18 11:45:00) [10]


> чтобы коннект удалить (например, если клиентский процесс
> просто вышибли)?


Если переписываешь MS SQL серевер, то у тебя должны быть исходники :) Чем и что ты намерен удалять?


> как происходит определение разрыва соединения,

Со стороны клиента - при попытке выполнения запроса в рамках этого соединения. Лучше самого легкого.
Со стороны сервера - исходники у тебя :)


Наверх

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