Lo primero para empezar el trabajo con SQL Server es preparar el ambiente. La instalación…
¿Qué son los Bloqueos en SQL Server? – Parte 2
Seguro que ya viste acá la introducción a esta cadena de publicaciones respecto a Qué son los Bloqueos en SQL Server. Muy importante conocer bien los conceptos en este tema.
Los bloqueos (o el término inglés Locking) hacen referencia al mecanismo que usa el motor de Base de Datos de SQL Server para sincronizar el acceso concurrente a un determinado dato.
Cuando existen multiples conexiones que tratan de acceder a un mismo dato (leerlo o escribirlo), por concepto de Base de Datos se debe garantizar la Consistencia, Atomicidad, Aislamiento y Durabilidad. Particularmente hablamos acá del Aislamiento, cuyo objetivo es afrontar a la concurrencia.
Entonces, el hecho de proteger un objeto para que nadie puede intervenir en él hasta que la transacción esté completa ¿será algo malo? Por supuesto que no. Este en un comportamiento de lo más normal.
SQL Server utiliza diferentes tipos de Locks para definir la manera en la que los datos son accedidos. Nuestro trabajo debe centrarse en entender qué tipo de Lock se está generando y cuánto tiempo de vida requiere.
¿Cómo puedo saber qué tipo de Bloqueo se está generando?
Es importante conocer el tipo de Lock que genera determinada consulta. Es así también que parte de tu labor consiste en poder reconocer en el momento preciso que un Lock está sucediendo y saber cuál es su tipo.
Para este propósito podemos consultar la tabla de sistema sys.dm_tran_locks y recopilar información muy valiosa.
Puedes ver en este enlace la documentación oficial y revisar que hay muchos datos que son bastante útiles pero pueden llegar a ser un poco abrumadores. Para simplificar un poco las cosas, yo resumo aquellos datos que quiero analizar en una pequeña agrupación que muestra Qué locks genera una conexión.
Y ¿dónde entra el NOLOCK en todo esto?
No te olvides el significado.
No te dejes llevar por prácticas usuales sin saber los conceptos.
No te olvides ver Qué significa Nolock en SQL Server.