Saltear al contenido principal

Qué significa NOLOCK en SQL Server

Durante mucho tiempo veo la popularidad del uso de esta sentencia a lo largo de diferentes lugares en los que he trabajado y también en diferentes blogs, canales, páginas, grupos en la web. Lo más importante es que debes entender el concepto de utilizar NOLOCK, y no simplemente usarlo como una herencia que nos promete “velocidad” en las consultas. Es vital que puedas decir qué significa NOLOCK en SQL Server antes de colocarlo en cada código que desarrolles.

Conceptos necesarios

ISOLATION LEVEL – El primero al que debes apuntar. Comprender de qué se trata este grado de aislamiento en que las transacciones son aisladas y protegidas de una modificación de datos. También dentro de la comprensión de cuál es el comportamiento del motor en concurrencia.

LOCKS – Personalmente creo que desde la traducción al español puede llevar a un concepto errado. “Bloqueo”. Ya desde un principio da la impresión de algo malo. Puedes revisar aquí qué entendemos por estos llamado bloqueos.

HINTS – Estrategias para forzar al motor de SQL Server a comportarse de un modo diferente al que usualmente el propio motor respondería. Incluso Microsoft oficialmente recomienda usarlos como último recurso en ciertos casos.

“Utiliza NOLOCK para que las consultas sean más rápidas”

¿Verdad? ¿Quién no ha escuchado y aplicado este mágico consejo?

Es más, con mucha pena he visto en lugares que he visitado, que lo tienen establecido formalmente como un estándar que cualquier código que vaya a ambiente de Producción debe tener de manera imprescindible los códigos con NOLOCK.

¿Por qué tanto escándalo? ¿Qué significa NOLOCK en SQL Server?

El concepto es claro. Utilizar el hint NOLOCK lo único que hace es forzar un nivel de aislamiento (Isolation Level) como READ UNCOMMITED. Esto, textualmente quiere decir que cualquier sentencia puede leer registros que han sido o están siendo modificadas por otra transacción y no han pasado por una fase de COMMIT. (Mira más detalles de Cómo funciona READ COMMITED)

En resumen, DIRTY READS. Permitimos las lecturas sucias.

¿Qué quiere decir lecturas sucias? Así tal cual como suena. No se genera una protección en concurrencia, lo que permite leer datos que pueden no estar confirmados en la base de datos.


Tenemos una sesión en vivo donde vemos en modo práctico lo que todo esto significa. Si no estás suscrito en nuestra comunidad, no dudes en hacerlo libremente en este enlace para enterarte de las próximas fechas de eventos.

Pablo Javier Fernández

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close search

Carrito

Volver arriba