TALLER - Transacciones

Instituto ICOP

Bases de Datos II Bases de Datos II

Docente: Ing. María Eugenia Weibel

🎯 Guía de Preguntas Prácticas

📋 Instrucciones Generales

Antes de Comenzar:

  1. Abrir el simulador: Accede al Demo Interactivo de Transacciones PostgreSQL
  2. Preparar herramientas: Ten papel/documento para anotar observaciones
  3. Tiempo estimado: 45-60 minutos para completar toda la guía
  4. Metodología: Ejecuta cada demo, observa detenidamente, luego responde

Formato de Respuesta:

Para cada pregunta, incluye:

  • Respuesta directa

  • 🔍 Observación del simulador (qué viste)

  • 💡 Explicación técnica (por qué ocurrió)


🌟 PARTE 1: Exploración Inicial (10 minutos)

Ejercicio 1.1: Familiarización con la Interfaz

Instrucciones: Explora la interfaz sin ejecutar ninguna demo.

Preguntas:

  1. ¿Qué elementos principales observas en la interfaz?
    • Describe los paneles que ves
    • ¿Qué información muestra cada panel?
  2. ¿Cuántas transacciones simultáneas puedes simular?
    • ¿Cómo están diferenciadas visualmente?
  3. ¿Cuál es el nivel de aislamiento por defecto mostrado?
    • ¿Dónde aparece esta información?
  4. ¿Qué datos iniciales tiene la tabla de ejemplo?
    • Lista los registros que ves (ID, Saldo, Usuario)

🎬 PARTE 2: Demo Básica (15 minutos)

Ejercicio 2.1: Primera Ejecución

Instrucciones:

  1. Mantén el nivel de aislamiento en “Read Committed”

  2. Haz clic en “🎬 Iniciar Demo”

  3. Observa toda la secuencia sin interrumpir

Preguntas de Observación:

  1. ¿Qué sucede en el primer paso de la Transacción A?
    • ¿Qué consulta SQL ejecuta?
    • ¿Cómo cambia visualmente el registro?
  2. ¿Cuál es el comportamiento de la Transacción B cuando intenta modificar el mismo registro?
    • ¿Qué estado muestra el indicador?
    • ¿Qué significa este estado?
  3. ¿En qué momento la Transacción A debe esperar?
    • ¿Por qué debe esperar?
    • ¿Qué registro del log indica esta situación?

Preguntas de Análisis:

  1. ¿Cuál es el orden final de ejecución de las operaciones?
    • Enumera la secuencia paso a paso
    • ¿Por qué PostgreSQL elige este orden?
  2. ¿Cuál sería el saldo final si NO hubiera control de transacciones?
    • Calcula el resultado sin locks
    • Compara con el resultado obtenido
  3. ¿Qué mecanismo de PostgreSQL previene la “lost update”?
    • Explica cómo funciona este mecanismo

🔒 PARTE 3: Análisis de Niveles de Aislamiento (20 minutos)

Ejercicio 3.1: Comparando Niveles

Instrucciones:

  1. Ejecuta la “Demo Básica” con cada nivel de aislamiento

  2. Anota las diferencias en comportamiento

Para READ UNCOMMITTED:

  1. ¿Cambia algo en la demo básica comparado con READ COMMITTED?
    • ¿Por qué ocurre o no ocurre este cambio?
  2. ¿Qué riesgos adicionales introduces con este nivel?
    • Menciona al menos 2 problemas potenciales

Para REPEATABLE READ:

  1. ¿El comportamiento es diferente a READ COMMITTED en la demo básica?
    • ¿Por qué sí o por qué no?
  2. ¿En qué tipo de operaciones notarías la diferencia?
    • Describe un escenario donde sí importaría

Para SERIALIZABLE:

  1. ¿Observas diferencias en la demo básica?
    • ¿Qué overhead adicional podría tener este nivel?
  2. ¿Cuándo recomendarías usar SERIALIZABLE?
    • Da ejemplos concretos de casos de uso

⚠️ PARTE 4: Simulación de Deadlock (10 minutos)

Ejercicio 4.1: Entendiendo Deadlocks

Instrucciones:

  1. Haz clic en “⚠️ Simular Deadlock”

  2. Observa cuidadosamente cada paso

Preguntas de Observación:

  1. ¿Qué registros bloquea cada transacción inicialmente?
    • Transacción A: ___
    • Transacción B: ___
  2. ¿En qué momento se produce el deadlock?
    • Describe la secuencia exacta de eventos
  3. ¿Cómo se visualiza el deadlock en la interfaz?
    • ¿Qué colores/indicadores ves?
    • ¿Qué mensaje aparece en el log?

Preguntas de Análisis:

  1. ¿Cuál transacción eligió PostgreSQL como “víctima”?
    • ¿Por qué crees que eligió esa y no la otra?
  2. ¿Qué le ocurre a los cambios de la transacción víctima?
    • ¿Se pierden los datos? ¿Por qué?
  3. ¿Cómo podrías prevenir este deadlock específico?
    • Propón al menos 2 estrategias diferentes
  4. ¿Cuánto tiempo tarda PostgreSQL en detectar el deadlock?
    • ¿Este tiempo es configurable?

📖 PARTE 5: Problemas de Concurrencia (15 minutos)

Ejercicio 5.1: Dirty Read

Instrucciones:

  1. Cambia el nivel a “Read Uncommitted”

  2. Ejecuta “📖 Dirty Read”

Preguntas:

  1. ¿Qué valor lee la Transacción B inicialmente?
    • ¿Ese valor estaba confirmado en la base de datos?
  2. ¿Qué problema representa esto en un sistema real?
    • Da un ejemplo concreto (ej: sistema bancario)

Ejercicio 5.2: Dirty Read Prevenido

Instrucciones: 1. Cambia a “Read Committed” 2. Ejecuta nuevamente “📖 Dirty Read”

Preguntas:

  1. ¿Cuál es la diferencia en el comportamiento?
    • ¿En qué punto se bloquea la Transacción B?
  2. ¿Cuándo puede continuar la Transacción B?
    • ¿Qué debe ocurrir para que se libere el bloqueo?
  3. ¿Qué valor lee finalmente la Transacción B?
    • ¿Por qué es este el valor “correcto”?

Ejercicio 5.3: Phantom Read

Instrucciones:

  1. Prueba “👻 Phantom Read” con diferentes niveles de aislamiento

Para REPEATABLE READ:

  1. ¿Cuántos registros cuenta la primera consulta?
    • ¿Cuántos cuenta la segunda consulta?
  2. ¿Por qué aparece el registro “fantasma”?
    • Explica técnicamente qué está ocurriendo

Para SERIALIZABLE:

  1. ¿Cómo previene SERIALIZABLE el phantom read?
    • ¿Qué diferencia observas en el comportamiento?
  2. ¿Qué costo adicional tiene esta prevención?
    • Piensa en términos de rendimiento

🔄 PARTE 6: Non-Repeatable Read (10 minutos)

Ejercicio 6.1: Lecturas No Repetibles

Instrucciones:

  1. Ejecuta “🔄 Non-Repeatable Read”

Preguntas:

  1. ¿Qué valor lee la Transacción A en la primera consulta?
    • ¿Qué valor lee en la segunda consulta?
  2. ¿Por qué cambia el valor entre lecturas?
    • ¿Qué transacción causa este cambio?
  3. ¿En qué escenarios sería problemático este comportamiento?
    • Da ejemplos de aplicaciones donde esto causaría errores
  4. ¿Cómo solucionarías este problema?
    • ¿Qué nivel de aislamiento usarías?

📚 PARTE 7: Información Detallada (10 minutos)

Ejercicio 7.1: Explorando Conceptos Avanzados

Instrucciones:

  1. Haz clic en “📚 Niveles de Aislamiento”

  2. Después en “🔐 Mecanismos de Bloqueo”

Preguntas:

  1. ¿Cuáles son los 4 niveles de aislamiento disponibles?
    • Lista cada uno con su característica principal
  2. ¿Qué tipos de locks menciona la documentación?
    • Enumera los diferentes tipos de bloqueos
  3. ¿Qué significa “FOR UPDATE” en PostgreSQL?
    • ¿Cuándo lo usarías?
  4. ¿Qué son los “Advisory Locks”?
    • ¿En qué se diferencian de los locks normales?

🎯 PARTE 8: Síntesis y Casos Prácticos (15 minutos)

Ejercicio 8.1: Aplicación de Conocimientos

Preguntas de Síntesis:

  1. Basándote en todas las demos, ¿cuál es el nivel de aislamiento más apropiado para:
    • Un sistema bancario: ___ ¿Por qué?
    • Un sistema de reportes: ___ ¿Por qué?
    • Un blog personal: ___ ¿Por qué?
  2. ¿En qué situaciones preferirías que ocurra un deadlock antes que permitir una dirty read?
    • Justifica tu respuesta con ejemplos
  3. ¿Cuál es el balance entre consistencia y rendimiento?
    • ¿Cómo decidirías qué nivel usar en un proyecto real?

Ejercicio 8.2: Resolución de Problemas

Escenarios para Analizar:

  1. Escenario 1: Una aplicación de e-commerce muestra stock disponible mientras otra transacción está procesando una compra.
    • ¿Qué problema de concurrencia podría ocurrir?
    • ¿Cómo lo solucionarías?
  2. Escenario 2: Un sistema de reservas permite que dos usuarios reserven el último asiento disponible.
    • ¿Qué configuración de transacciones recomendarías?
    • ¿Qué mecanismos específicos implementarías?
  3. Escenario 3: Un sistema de análisis ejecuta reportes largos que interfieren con las operaciones normales.
    • ¿Cómo separarías las operaciones de lectura y escritura?
    • ¿Qué nivel de aislamiento usarías para cada tipo?

📊 PARTE 9: Evaluación Final (10 minutos)

Ejercicio 9.1: Preguntas de Evaluación

  1. ¿Cuáles son las propiedades ACID y cómo las implementa PostgreSQL?
    • Relaciona cada propiedad con lo observado en el simulador
  2. ¿Qué ventajas tiene el sistema MVCC de PostgreSQL?
    • ¿Cómo se refleja esto en las demos ejecutadas?
  3. ¿Cuándo recomendarías usar bloqueos explícitos (FOR UPDATE)?
    • Da al menos 3 casos de uso específicos
  4. Si fueras a implementar un sistema crítico, ¿qué consideraciones de transacciones tendrías?
    • Lista al menos 5 puntos importantes basados en lo aprendido

🎓 PARTE 10: Reflexión y Siguiente Pasos (5 minutos)

Ejercicio 10.1: Autoevaluación

Preguntas de Reflexión:

  1. ¿Cuál fue el concepto más difícil de entender?
    • ¿Por qué fue desafiante?
  2. ¿Qué demo te pareció más útil para entender las transacciones?
    • ¿Qué aprendiste específicamente de esa demo?
  3. ¿Cómo aplicarías estos conocimientos en tu proyecto actual o futuro?
    • Sé específico sobre casos de uso
  4. ¿Qué temas adicionales te gustaría profundizar?
    • ¿Qué preguntas quedaron sin resolver?
  5. ¿Recomendarías esta herramienta a otros estudiantes?
    • ¿Qué mejoras sugerirías?

Recursos Adicionales:


🏆 Desafío Extra (Opcional)

Para estudiantes avanzados que terminen antes:

  1. Investiga y explica cómo PostgreSQL implementa el algoritmo de detección de deadlocks
  2. Diseña un caso de uso complejo que requiera múltiples niveles de aislamiento
  3. Propón mejoras al simulador actual