Documente Academic
Documente Profesional
Documente Cultură
Exclusive lock. (X).- (Bloqueo exclusivo) Este tipo de bloqueo prohíbe cualquier tipo de de
acceso (lectura o escritura). Que se emite durante las instrucciones INSERT, UPDATE, o DELETE.
Schema modification. (Sch-M).- Este tipo de bloqueo que se produce cuando una instrucción
DDL se ejecuta.
Schema stability. (Sch-S).- (Estabilidad del esquema) Este tipo de bloqueo se produce cuando
una consulta se está compilando. Mantiene operaciones DDL.
Bulk update. (BU).- Actualización masiva. Este tipo de bloqueo se da durante una operación de
copia masiva. Hace que la concurrencia a latabla se reduzca por culpa de la operación de copia
masiva. Se utiliza cuando se copian datos de forma masiva en una tabla y se especifica la
sugerencia TABLOCK.
key-rage locks.- es un bloqueo que se da en un intervalo para proteger un rango de filas (en
base a la clave del índice). ejemplo, la protección de filas en una instrucción UPDATE, con un
rango de fechas de 1/1/2005 al 12/31/2005.
Los bloqueos sobre los recursos varían de granularidad, por ejemplo, podemos encontrar
bloqueos de una unica fila o pagina (granularidad pequeña), en una tabla, o incluso en una base
de datos (granularidad grade). Los bloqueos de granularidad pequeña permiten muchos mas
accesos que los de mayor granularidad, en la base de datos. Pero esto no quita que miles de
bloqueos de filas individuales distintas puedan llega a afectar al rendimiento de SQL Server
Os muestro un ejemplo de como ver la actividad de bloqueos en la base de datos con la DMV:
sys.dm_tran_locks.
se ejecuta:
SELECT request_session_id sessionid,
resource_type type,
resource_database_id dbid,
OBJECT_NAME(resource_associated_entity_id, resource_database_id) objectname,
request_mode rmode,
request_status rstatus
FROM sys.dm_tran_locks
WHERE resource_type IN ('DATABASE', 'OBJECT')
En la aterior consulta, como pudes ver solo muestro los bloqueos de tipo DATABASE (un
bloqueo a la bd entera) y de tipo OBJET ( a objetos de la base de datos, por ejemplo a una vista,
un procedimiento almacenado, una funcion...). Si no pusieramos esta condición por el campo
resource_type podemos encontrar si existen otros bloqueos de tipo: DATABASE, OBJECT, FILE,
PAGE, KEY, RID, EXTENT, METADATA, APPLICATION, ALLOCATION_UNIT, o de tipo HOBT.
De una forma rapida y sencilla, si lo que quieres es ver qué sesiones son las que bloquean y a
qué sesiones estan bloqueando, puedes ejecutar:
SELECT blocking_session_id, wait_duration_ms, session_id
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL
SELECT t.text
FROM sys.dm_exec_connections c
CROSS APPLY sys.dm_exec_sql_text (c.most_recent_sql_handle) t
WHERE c.session_id = 38