Mostrar bloqueos en MySQL

Shraddha Paghdar 20 junio 2023
Mostrar bloqueos en MySQL

En la publicación de hoy, aprenderemos cómo mostrar bloqueos en MySQL.

Mostrar bloqueos en MySQL

Los atributos de una tabla se pueden cambiar asignando un indicador de Bloqueo de MySQL a la tabla. Para restringir el acceso de otras sesiones a la misma tabla durante un período determinado, MySQL habilita un bloqueo de tabla que un cliente-servidor puede asignar.

Un cliente puede “adquirir” o “liberar” un “bloqueo” de MySQL solo para su sesión. Esto significa que el cliente no puede acceder a los bloqueos de una sesión diferente o liberar bloqueos retenidos por una sesión diferente.

MySQL proporciona dos tipos de bloqueo: bloqueo de lectura y bloqueo de escritura.

LOCK TABLES table_name READ as alias_table_name

Aquí, el table_name denota la tabla en la que se debe aplicar el bloqueo. Al bloquear una tabla con un alias, debe usar ese alias en sus declaraciones para hacer referencia a la tabla bloqueada.

No pueden realizar una acción de escritura en una tabla si la sesión tiene el bloqueo READ. Esto se debe a la capacidad del bloqueo READ para leer solo datos de la tabla.

Ninguna otra sesión puede escribir datos en la tabla sin liberar el bloqueo LEER; por lo tanto, a todos se les impide hacerlo. Hasta que liberemos el bloqueo READ, las operaciones de escritura entran en un estado de espera.

Los bloqueos con nombre exclusivo obtenidos con GET_LOCK() aparecen en la tabla Bloqueos de metadatos del esquema de rendimiento como resultado de la reimplementación de MDL. El nombre del bloqueo se muestra en la columna OBJECT_NAME, mientras que la columna OBJECT_TYPE indica USER LEVEL LOCK.

Puede comprender las dependencias de bloqueo de metadatos entre sesiones con la ayuda de este conocimiento. No solo puede ver qué bloqueo está esperando una sesión, sino también cuál tiene el control de ese bloqueo en este momento.

No es posible alterar la tabla de bloqueos de metadatos; es de solo lectura.

Considere el siguiente ejemplo para ayudarlo a comprender mejor la idea anterior.

SELECT GET_LOCK('alias_table_name', 10);
SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_TYPE='USER LEVEL LOCK'

La primera instrucción del ejemplo anterior obtiene datos para el nombre de bloqueo proporcionado. El alias_table_name, en este caso, especifica el nombre del bloqueo, y 10 representa el tiempo de espera.

La información se recupera de la tabla bloqueos de metadatos, donde el tipo de objeto es un BLOQUEO DE NIVEL DE USUARIO en la segunda declaración.

Ejecute la línea de código anterior en cualquier navegador compatible con MySQL. Mostrará el siguiente resultado:

+----------------------------------+
| GET_LOCK('alias_table_name', 10) |
+----------------------------------+
|                                1 |
+----------------------------------+
1 row in set (0.00 sec)

*************************** 1. row ***************************
          OBJECT_TYPE: USER LEVEL LOCK
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: alias_table_name
OBJECT_INSTANCE_BEGIN: 139872019610944
            LOCK_TYPE: EXCLUSIVE
        LOCK_DURATION: EXPLICIT
          LOCK_STATUS: GRANTED
               SOURCE: item_func.cc:5481
      OWNER_THREAD_ID: 35
       OWNER_EVENT_ID: 3
1 row in set (0.00 sec)
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn