Concurrencia y niveles de aislamiento en SQL Server
Clase 18 de 26 • Curso de Gestión de Bases de Datos con SQL Server
Contenido del curso
Clase 18 de 26 • Curso de Gestión de Bases de Datos con SQL Server
Contenido del curso
Jefersson Francisco Celis Prieto
jefred bedoya
Dario Mendoza
Rubens A. Rangel Gomez
1. ¿Qué nivel de aislamiento usarías para los reportes de ventas diarios de TiendaLatam y por qué?
Usaría READ UNCOMMITTED (con hint NOLOCK).
Los reportes de ventas son consultas de solo lectura donde la precisión al milisegundo no es crítica. Este nivel no genera bloqueos, permitiendo que las transacciones de venta continúen sin interrupciones. Es perfecto para dashboards y reportes en tiempo real donde necesitamos máximo rendimiento y concurrencia. Si la exactitud fuera crítica (reportes contables), usaría READ COMMITTED con RCSI activado.
2. ¿Qué nivel de aislamiento usarías para el SP de cierre de mes y por qué?
Usaría SERIALIZABLE.
El cierre de mes es una operación crítica que calcula totales, suma ventas y consolida inventario. Necesitamos prevenir que aparezcan registros nuevos (phantom reads) o que cambien datos mientras ejecutamos el proceso, porque cualquier inconsistencia afecta los números financieros del mes. Aunque genera más bloqueos, es aceptable porque se ejecuta una vez al mes, fuera de horario de producción, y la integridad de los datos financieros justifica totalmente el costo.
3. ¿Activarías RCSI en TiendaLatam? ¿Qué costo tiene y qué problema resuelve?
SÍ, definitivamente lo activaría.
RCSI resuelve el problema de bloqueos entre lectores y escritores: los reportes ya no bloquean las ventas y las ventas no bloquean los reportes. Esto mejora dramáticamente el rendimiento cuando tienes usuarios consultando dashboards mientras otros registran pedidos.
Costo: Usa 10-15% más espacio en tempdb para mantener versiones de filas, y un pequeño overhead de CPU (5-10%).
Beneficio: Vale totalmente la pena porque elimina la mayoría de problemas de concurrencia sin cambiar código, reduce timeouts y es la mejor práctica moderna (viene por defecto en Azure SQL). Solo hay que asegurar que tempdb tenga espacio suficiente antes de activarlo.
Problemas de Concurrencia
Niveles de Aislamiento
Optimización y Buenas Prácticas
WITH (NOLOCK) en consultas específicas.Concurrencia es el arte de permitir que muchos usuarios toquen los mismos datos a la vez sin que se arme un caos. Los niveles de aislamiento son, simplemente, las reglas que dictan cuánto "espacio personal" le das a una transacción frente a las demás. Si dos personas intentan modificar la misma fila al mismo tiempo,
La concurrencia en Go y en SQL Server se puede comparar como dos niveles diferentes de control del mismo problema: el acceso simultáneo a recursos. Go resuelve la concurrencia a nivel de aplicación mediante goroutines, mutex y channels, evitando conflictos en memoria entre procesos del programa. SQL Server, por su parte, resuelve la concurrencia a nivel de datos mediante transacciones, bloqueos y niveles de aislamiento, garantizando la integridad cuando múltiples usuarios o sistemas acceden a la misma información. En una arquitectura bien diseñada, Go organiza la ejecución concurrente del backend mientras SQL Server asegura la consistencia final de los datos, por lo que ambos enfoques no compiten sino que se complementan.