Сеанс SQL Server
Что считается сессией на сервере sql.
Я пытаюсь использовать sp_getapplock, и в документации указано:
Замки, размещенные на ресурсе, связаны либо с текущей транзакцией, либо с текущим сеансом. Блокировки, связанные с текущей транзакцией, освобождаются, когда транзакция совершает или откатывается. Блокировки, связанные с сеансом, освобождаются при выходе из сеанса. Когда сервер по какой-либо причине отключается, все блокировки освобождаются.
'Блокировки, связанные с сеансом, освобождаются при завершении сеанса связи.
Мне нужно знать, что считается сеансом. подключение с использованием студии управления - это сеанс в базе данных; использование asp.net для подключения к серверу sql также создает сеанс.
Что делать, если я использую ADO.net и пул соединений, каждое соединение в пуле соединений считается другим сеансом?
Ответы
Ответ 1
При объединении пулов обратите внимание, что sp_reset_connection
вызывается между каждым переназначением повторно используемого соединения. Этот SO-сообщение подробно описывает очистку, выполненную sp_reset_connection
.
Edit
В контексте вашего вопроса sp_reset_connection
"Frees приобрел блокировки".
Ответ 2
Если я использую ADO.net и пул соединений, каждое соединение в пуле соединений считается другим сеансом?
Сорт. Почти каждый раз, когда вы открываете/закрываете новое соединение, это один сеанс. Однако одна из "функций" пула соединений заключается в том, что он не всегда открывает/закрывает команду, и когда он видит, что вы открываете и закрываете связку соединений, он будет использовать одно соединение за кулисами, который, я считаю, приводит к одному сеансу на сервере sql.
Ответ 3
@LockOwner sp_getapplock относится к тому, когда он выпущен:
- "Сессия": на конце сеанса
- "Транзакция": на COMMIT или ROLLBACK
В принципе, SPID в sys.sysprocesses является "сеансом"