SQL Server: CON (NOLOCK) las mejores prácticas

Ideal para reportes rápidos donde no importa una posible inconsistencia momentánea.

Cuándo usar (NOLOCK)

  • Consultas de solo lectura: Cuando no necesitas precisión absoluta (por ejemplo, reportes rápidos).
  • Análisis exploratorios o dashboards: Donde los datos en tiempo real no son críticos.
  • Grandes volúmenes de datos: Para evitar que una consulta impacte a otras operaciones concurrentes.

Cuándo evitar (NOLOCK)

  • Datos críticos o financieros: Puede provocar lecturas sucias (dirty reads), inconsistencias o registros fantasma.
  • Procesos ETL o integraciones: Donde la precisión y consistencia son clave.
  • Operaciones en tiempo real o de auditoría: Los errores por datos incorrectos podrían escalar rápidamente.

⚠️ Riesgos de (NOLOCK)

  • Lecturas sucias: Puedes leer datos que están siendo modificados pero aún no confirmados.
  • Lecturas fantasma: Registros pueden aparecer o desaparecer entre ejecuciones.
  • Lecturas repetidas inconsistentes: Dos lecturas en la misma transacción pueden devolver datos diferentes.

✅ Alternativas a (NOLOCK)

  • READ COMMITTED SNAPSHOT ISOLATION (RCSI): Usa versiones de datos para evitar bloqueos sin lecturas sucias.
  • WITH (READPAST): Ignora filas bloqueadas sin riesgo de datos inconsistentes.
  • Optimización de índices y consultas: Muchas veces los problemas de bloqueo se deben a malas prácticas de diseño.
SELECT [NombreCampo]
FROM [NombreDeLaTabla] WITH (NOLOCK)

Ventajas:
Los bloqueos no se producirán en comparación con otras consultas que se ejecuten contra los mismos datos se utiliza menos memoria debido a la falta de fila, página o nivel de nivel de bloqueo normalmente permite una concurrencia mucho mayor debido a la menor huella.

La otra ventaja indirecta es que se utilizará menos memoria para mantener cerraduras contra esos datos.

Desventajas:
Se pueden leer datos no comprometedores que conducen a lecturas sucias sugerencias explícitas contra una tabla son generalmente malas prácticas

Si ejecutamos nuestro SELECT sin NOLOCK podemos ver los bloqueos que se toman si ejecutamos el Stored Procedure sp_lock 

USE master;  
GO  
EXEC sp_lock;  
GO

En el ejemplo siguiente se muestra información, incluidos los bloqueos, acerca del proceso con Id : 65

👍 Comenta y comparte si este contenido te fue útil.

Ricardo A. Huamán Suárez

Especialista en SQL Server y Power BI. Ofrezco consultoría estratégica, formación especializada y servicios personalizados para empresas que buscan optimizar la gestión de sus datos.

📧 Email 📱 WhatsApp 🌐 Blog 📹 YouTube 🎯 TikTok 💼 LinkedIn

EasyPAck4You, es un buscador de empresas de paquetería para enviar paquetes a precios baratos. Envío de paquetes a nivel nacional e internacional.

No responses yet

Deja una respuesta

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