Unidad 4 Concurrencia

Unidad 4: Concurrencia en SQL Server 2025
Gestión de transacciones, aislamiento y control de acceso simultáneo a la base de datos
Importancia Estratégica en SQL Server 2025
El control de concurrencia garantiza que múltiples usuarios puedan leer y modificar datos al mismo tiempo sin destruir la integridad y consistencia del sistema. Sin un control adecuado, transacciones simultáneas podrían generar datos corruptos, lecturas inconsistentes o bloqueos infinitos (deadlocks).
4.1 Conceptos Fundamentales
La Concurrencia es la propiedad de los SGBD para ejecutar múltiples transacciones de forma simultánea. Se presentan tres problemas clásicos cuando no existe un aislamiento adecuado:
- Lectura Sucia (Dirty Read): Leer datos no confirmados por otra transacción activa.
- Lectura No Repetible (Non-repeatable Read): Leer un registro dos veces en una misma transacción y obtener valores distintos porque otra transacción lo modificó.
- Lectura Fantasma (Phantom Read): Ejecutar una consulta de rango dos veces y obtener filas adicionales insertadas por otra transacción.
4.2 Propiedades ACID de las Transacciones
Toda transacción en SQL Server 2025 debe garantizar cuatro propiedades indispensables:
Todo o nada. Si falla un paso, la transacción completa se revierte.
La base de datos pasa de un estado válido a otro estado válido.
Las operaciones simultáneas no interfieren entre sí.
Los cambios confirmados persisten ante fallos del sistema.
4.3 Grados de Consistencia y 4.4 Niveles de Aislamiento
SQL Server ofrece Niveles de Aislamiento para equilibrar el rendimiento de la concurrencia y la consistencia de los datos:
| Nivel de Aislamiento | Lectura Sucia | Lectura No Repetible | Lectura Fantasma |
|---|---|---|---|
| Read Uncommitted | Sí permite | Sí permite | Sí permite |
| Read Committed (Por defecto) | Previene | Sí permite | Sí permite |
| Repeatable Read | Previene | Previene | Sí permite |
| Serializable | Previene | Previene | Previene |
| Snapshot | Previene | Previene | Previene |
4.5 Control Manual: COMMIT y ROLLBACK
Mediante la instrucción BEGIN TRANSACTION abrimos un bloque transaccional. COMMIT guarda permanentemente los cambios, mientras que ROLLBACK deshace las modificaciones en caso de error.
Ejercicio Práctico 1: Transacción con Manejo de Errores (TRY…CATCH)
BEGIN TRANSACTION;
BEGIN TRY
-- Descontar saldo de la cuenta origen
UPDATE Cuentas
SET Saldo = Saldo - 500
WHERE CuentaID = 1;
-- Incrementar saldo en la cuenta destino
UPDATE Cuentas
SET Saldo = Saldo + 500
WHERE CuentaID = 2;
-- Confirmar los cambios guardados permanentemente
COMMIT TRANSACTION;
PRINT 'Transferencia realizada exitosamente.';
END TRY
BEGIN CATCH
-- Deshacer cambios en caso de error
ROLLBACK TRANSACTION;
PRINT 'Error detectado, se han revertido las operaciones.';
END CATCH;
Ejercicio Práctico 2: Modificación del Nivel de Aislamiento
-- Configurar el nivel de aislamiento a READ COMMITTED
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
SELECT * FROM Inventario WHERE ProductoID = 10;
COMMIT TRANSACTION;
Examen Interactivo de Conocimientos
Concurrencia en SQL Server 2025
Una guía paso a paso, visual y práctica para comprender cómo SQL Server coordina usuarios, datos y transacciones.
¿Qué significa concurrencia?
La concurrencia permite que distintas personas y procesos usen una base de datos a la vez, con mecanismos que mantienen la información confiable.
Concurrencia
Varias tareas progresan sobre los mismos datos sin perder el orden.
Bloqueo
Protección temporal de un recurso mientras una operación lo usa.
Simultaneidad
Usuarios trabajando al mismo tiempo, con coordinación.
Transacción
Grupo de acciones que se completa entero o se deshace entero.
Control de acceso
Reglas que deciden cuándo leer, escribir o esperar.
Actualiza
recurso
protege
COMMIT
continúa
ACID: las cuatro garantías de una transacción
Las propiedades ACID convierten operaciones complejas —como una transferencia— en procesos predecibles y seguros.
Atomicidad
Todo ocurre o nada ocurre. No hay cambios a medias.
Consistencia
Las reglas y relaciones válidas se conservan antes y después.
Aislamiento
Una transacción no expone su trabajo incompleto a otra.
Durabilidad
Al confirmar, el cambio permanece incluso ante un fallo.
Los datos pueden verse de formas muy distintas
El grado de consistencia determina qué cambios puede observar una consulta mientras otras transacciones siguen activas.
| Situación | ¿Qué ocurre? | Riesgo | Lectura sencilla |
|---|---|---|---|
| Consistencia fuerte | Solo se observan datos confirmados y coherentes. | Controlado | Ves una versión estable del dato. |
| Lectura sucia | Se lee un cambio aún no confirmado. | Alto | Podrías leer algo que después se revierte. |
| Lectura no repetible | La misma fila cambia entre dos lecturas. | Medio | El valor de hoy ya no coincide unos segundos después. |
| Lectura fantasma | Aparecen o desaparecen filas de una consulta. | Medio | Al repetir un filtro, encuentras registros nuevos. |
Elige el equilibrio entre velocidad y protección
Cada nivel controla cuánta interferencia puede existir entre transacciones. Más aislamiento suele implicar más coordinación.
Confirmar o revertir: el cierre correcto
Una transacción termina confirmando todos sus cambios con COMMIT o deshaciéndolos de manera segura con ROLLBACK.
1. BEGIN TRANSACTION
Se inicia una unidad de trabajo y se preparan los cambios.
2. Cambios controlados
Las operaciones se validan mientras se mantienen las garantías necesarias.
3. COMMIT o ROLLBACK
Confirma de forma durable o revierte la unidad completa.
BEGIN TRANSACTION; UPDATE Cuentas SET saldo = saldo - 500 WHERE id = 1; UPDATE Cuentas SET saldo = saldo + 500 WHERE id = 2; COMMIT;
BEGIN TRANSACTION; UPDATE Inventario SET stock = stock - 1 WHERE producto_id = 18; IF @@ERROR <> 0 ROLLBACK; ELSE COMMIT;
Concurrencia para entornos modernos
Pon a prueba tu criterio técnico
Responde brevemente. El objetivo es conectar cada concepto con una decisión real de diseño.
¿Es una transacción?
Una compra descuenta inventario y crea una factura. ¿Por qué deben completarse juntas?
Elige protección
Necesitas impedir lecturas sucias, pero priorizas rendimiento. ¿Qué nivel considerarías?
COMMIT o ROLLBACK
La segunda actualización de una transferencia falla. ¿Qué instrucción usarías y por qué?
Comprueba lo que aprendiste
Selecciona una respuesta por pregunta y revisa el resultado al final.