2011-09-22 16 views
15

Lo que se considera una sesión en el servidor sql. Estoy tratando de usar sp_getapplock y la documentación dice:Sesión de SQL Server

Los bloqueos colocados en un recurso están asociados con la transacción actual o la sesión actual. Los bloqueos asociados con la transacción actual se liberan cuando la transacción se compromete o revierte. Los bloqueos asociados con la sesión se liberan cuando la sesión se cierra. Cuando el servidor se apaga por algún motivo, se liberan todos los bloqueos.

'Los bloqueos asociados con la sesión se liberan cuando la sesión está cerrada'.

Necesito saber qué se considera una sesión. la conexión usando Management Studio es una sesión a la base de datos; El uso de asp.net para conectarse al servidor SQL también crea una sesión.

¿Qué sucede si utilizo ADO .net y el grupo de conexiones, cada conexión en el conjunto de conexiones se considera una sesión diferente?

Respuesta

3

si uso ADO .net y el grupo de conexiones, ¿cada conexión en el conjunto de conexiones se considera una sesión diferente?

Tipo de. Casi cada vez que abre/cierra una nueva conexión, esa es una sola sesión. Sin embargo, una de las "características" del grupo de conexiones es que no siempre se abre/cierra en el comando, y cuando ve que está abriendo y cerrando varias conexiones repetidamente, usará una sola conexión detrás de las escenas, que creo que resulta en una sola sesión en el servidor sql.

+4

"... que creo que da como resultado una sola sesión en el servidor sql". Esto suena como pura especulación e incluso si funciona de esta manera, no parece estar documentado y, por lo tanto, no se debe confiar en él. –

3

Con la agrupación de conexiones, observe que se llama a sp_reset_connection entre cada reasignación de la conexión reutilizada. This SO Post cubre la limpieza realizada por sp_reset_connection en detalle.

Editar En el contexto de su pregunta, sp_reset_connection "Libera bloqueos adquiridos".

0

El @LockOwner de sp_getapplock se refiere a cuando se libera:

  • "sesión": al final de la sesión
  • "Transacción": por confirmar o deshacer

Básicamente, un SPID en sys.sysprocesses es una "sesión"

Cuestiones relacionadas