Ejercicio: Descripción del bloqueo

Completado

Importante

Debe tener una suscripción a Azure propia para completar este ejercicio. Si no tiene una suscripción a Azure, cree una evaluación gratuita de Azure.

Para completar este ejercicio, debe cumplir las condiciones siguientes:

  • Haber creado un grupo de recursos (consulte módulo 1, unidad 5).
  • Haber creado un servidor flexible de Azure Database for MySQL (consulte módulo 1, unidad 5).
  • Haber descargado e instalado MySQL Workbench (consulte módulo 2, unidad 5).
  • Haber creado una base de datos Zoo (consulte módulo 2, unidad 5).
  • Descargar los scripts de este ejercicio de GitHub.

Sugerencia

Si ha detenido el servidor de Azure Database for MySQL después de completar el último laboratorio, reinícielo ahora.

Preparación: configuración de MySQL Workbench

  1. Abra MySQL Workbench y, en el menú superior, seleccione Editar>Preferencias.

  2. En el panel de navegación izquierdo, en Editores generales, seleccione Otros.

  3. En Otros, active Permitir que se ejecute más de una instancia de MySQL Workbench.

    Screenshot showing the My SQL Workbench Preferences, Others settings page.

  4. En el panel de navegación izquierdo, seleccione Editor SQL.

  5. En Sesión de MySQL, cambie el Intervalo de tiempo de espera de lectura de la conexión de DBMS (en segundos): a 300. (El valor predeterminado es 30 segundos).

    Screenshot showing the Workbench Preferences, S Q L Editor settings page.

  6. Seleccione Aceptar y cierre MySQL Workbench.

  7. Abra MySQL Workbench y conéctese al servidor flexible de Azure Database for MySQL.

  8. Seleccione Archivo, Abrir script SQL y seleccione Lab5_repopulateAnimals.sql.

  9. Seleccione Consulta>Ejecutar (todo o selección). Esto crea el procedimiento almacenado RepopulateAnimals.

Descripción de las transacciones

  1. En MySQL Workbench, seleccione Archivo, Abrir script SQL y Lab5_transactions.sql.
  2. Resalte y ejecute la primera sección: Usar la base de datos ZooDb. Esto hace que ZooDb sea la base de datos actual y comprueba que estamos usando la base de datos correcta.
  3. Resalte y ejecute la sección: Volver a rellenar la tabla de animales. Esto garantiza que empiece con datos limpios.
  4. Resalte y ejecute la sección: Confirmación automática de consultas. Esto devuelve 1, lo que indica que la confirmación automática está activada.
  5. Resalte y ejecute la sección: Cuando la confirmación automática está en cada instrucción SQL es una transacción.
  6. Resalte y ejecute la sección: El nombre se ha cambiado a Vampiro bat #1. Esto muestra que se ha confirmado la instrucción UPDATE anterior.
  7. Resalte y ejecute la sección: Transacción explícita. Una transacción explícita comienza con START TRANSACTION y termina con COMMIT; la instrucción SELECT devolvió el cambio de nombre, lo que indica que se ha confirmado el cambio.
  8. Resalte y ejecute la sección: Una transacción es atómica. La instrucción SELECT devolvió el conjunto de resultados con la fila adicional. Todas las columnas de la instrucción se incluyen porque la instrucción es atómica: se confirma todo o no se confirma nada.
  9. Resalte y ejecute la sección: Reversión de la transacción.
  10. Deje abierto MySQL Workbench, listo para el ejercicio siguiente.

Descripción del bloqueo

Nota:

Para este ejercicio, necesitará dos instancias de MySQL Workbench abiertas para simular dos usuarios. Asegúrese de que ha completado los pasos descritos en Preparación: configuración de MySQL Workbench.

  1. En la instancia abierta de MySQL Workbench, seleccione Archivo>Abrir script SQL y después vaya a Lab5_basic_locking.sql y seleccione Abrir.
  2. Abra una segunda instancia de MySQL Workbench. Seleccione Base de datos, Conectar con base de datos y, a continuación, seleccione la Conexión almacenada para conectarse al servidor flexible de Azure Database for MySQL.
  3. Seleccione Archivo>Abrir script SQL, vaya a Lab5_basic_locking.sql y seleccione Abrir. Ahora debería tener dos instancias de MySQL Workbench abiertas, con Lab5_basic_locking.sql abierto en cada una. La primera instancia de MySQL Workbench se denominará Instancia A y la segunda instancia de MySQL Workbench se denominará Instancia B.
  4. En la instancia A: resalte y ejecute la sección marcada como 1. Ejecute esto en la instancia A. Esto inicia una transacción, estableciendo el Nombre de AnimalID = 14 en "Percy Penguin".
  5. En la instancia B: resalte y ejecute la sección marcada como 2. Ejecute esto en la instancia B. La instrucción select devuelve AnimalID = 14, pero el nombre no se ha cambiado. Esto se debe a que la transacción de la instancia A no se ha confirmado. Cuando la instancia B intenta actualizar el nombre, se impide con el bloqueo mantenido por la instancia A.
  6. En la instancia A: resalte y ejecute la sección marcada como 3. Ejecute esto en la instancia A. Esto muestra dos transacciones. La transacción en la instancia B espera a que se complete la transacción en la instancia A. Cuando la instancia A confirma la transacción, no hay transacciones abiertas porque la instancia B ha podido completarse. Ahora también podemos ver el cambio realizado por la instancia B: el nombre se ha actualizado a "Percival Penguin". Deje abiertas ambas instancias de MySQL Workbench para el ejercicio siguiente.

Descripción de los niveles de aislamiento

  1. En la instancia A: resalte y ejecute la sección marcada como 10. Ejecute esto en la instancia A. Esto inicia una transacción, pero no la finaliza.
  2. En la instancia B: resalte y ejecute la sección marcada como 11. Ejecute esto en la instancia B.
  3. En la instancia A: resalte y ejecute la sección marcada como 12. Ejecute esto en la instancia A. Esto continúa en la misma transacción iniciada en el paso 1.

Nota:

Pruebe este ejercicio con distintos niveles de aislamiento.

Descripción del interbloqueo

  1. Abra MySQL Workbench y conéctese al servidor flexible de Azure Database for MySQL. Esta instancia de MySQL Workbench se denominará Instancia A.
  2. Abra una segunda instancia de MySQL Workbench y conéctese al servidor flexible de Azure Database for MySQL. Esta instancia de MySQL Workbench se denominará Instancia B.
  3. En la instancia A, resalte y ejecute las secciones: Use ZooDb y evite que se agote el tiempo de espera de los bloqueos.
  4. En la instancia B, resalte y ejecute las secciones: Use ZooDb y evite que se agote el tiempo de espera de los bloqueos.
  5. En la instancia A, resalte y ejecute la sección: Volver a rellenar la tabla Animal e iniciar una transacción. Esto inicia una transacción, pero no la termina con COMMIT ni ROLLBACK.
  6. En la instancia B, resalte y ejecute la sección: Dos actualizaciones en el orden inverso a la instancia A.
  7. En la instancia A, resalte y ejecute la sección: El servidor revierte una de las dos transacciones. El servidor reconoce automáticamente el interbloqueo y revierte una de las dos transacciones. La instrucción select solo devuelve las transacciones confirmadas.