Compartir tecnología

Bloqueo de base de datos

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tabla de contenido

1. Breve descripción de los bloqueos de bases de datos.

2. Breve descripción del bloqueo de espacios

3. Cómo se implementan los bloqueos a nivel de fila en InnoDB

4. ¿Bajo qué circunstancias se producirá un punto muerto en la base de datos?

5. Describa brevemente la solución al punto muerto de la base de datos.


1. Breve descripción de los bloqueos de bases de datos.

Los bloqueos son una característica clave que distingue los sistemas de bases de datos de los sistemas de archivos. El mecanismo de bloqueo se utiliza para gestionar el acceso simultáneo a recursos compartidos. Tomemos el motor InnoDB de la base de datos MySQL como ejemplo para presentar brevemente las características de los bloqueos.

Si una transacción T1 ha obtenido el bloqueo compartido de la fila r, entonces otra transacción T2 puede obtener inmediatamente el bloqueo compartido de la fila r, porque la lectura no cambia los datos de la fila r. Esta situación se denomina compatibilidad de bloqueo.Pero si otra transacción T3 quiere obtener el bloqueo exclusivo en la fila r, debe esperar a que las transacciones T1 y T2 liberen el bloqueo compartido en la fila r. Esta situación se llama.cerradura incompatible . La siguiente figura muestra la compatibilidad de los bloqueos compartidos y los bloqueos exclusivos. Se puede encontrar que el bloqueo X es incompatible con cualquier bloqueo, mientras que el bloqueo S solo es compatible con el bloqueo S. Es importante tener en cuenta que tanto el bloqueo S como el bloqueo X son bloqueos de fila, y la compatibilidad se refiere a la compatibilidad de los bloqueos en el mismo registro (fila).

XS
XNo compatibleNo compatible
SNo compatiblecompatible

        Bloquear granularidad : El motor de almacenamiento InnoDB admite el bloqueo de granularidad múltiple, lo que permite que las transacciones tengan bloqueos a nivel de fila y bloqueos a nivel de tabla al mismo tiempo. Para admitir operaciones de bloqueo con diferentes granularidades, el motor de almacenamiento InnoDB admite un método de bloqueo adicional llamado bloqueo intencional. Los bloqueos de intención dividen los objetos bloqueados en varios niveles. Los bloqueos de intención significan que las transacciones quieren bloquearse con una granularidad más fina.

El motor de almacenamiento InnoDB admite un diseño relativamente simple de bloqueos de intención, y sus bloqueos de intención son bloqueos a nivel de tabla. El objetivo principal del diseño es revelar el tipo de bloqueo solicitado para la siguiente fila de una transacción. Admite dos tipos de bloqueos de intención:

1. Bloqueo compartido de intención (bloqueo IS): la transacción desea obtener bloqueos compartidos para ciertas filas de una tabla.

2. Bloqueo exclusivo de intención (bloqueo IX): la transacción desea obtener bloqueos exclusivos en ciertas filas de una tabla.

Dado que el motor de almacenamiento InnoDB admite bloqueos a nivel de fila, los bloqueos intencionales en realidad no bloquearán ninguna solicitud, excepto los escaneos completos de la tabla. Entonces, la compatibilidad de los bloqueos de intención a nivel de tabla y los bloqueos a nivel de fila es la siguiente:

ESIXSX
EScompatiblecompatiblecompatibleNo compatible
IXcompatiblecompatibleNo compatibleNo compatible
ScompatibleNo compatiblecompatibleNo compatible
XNo compatibleNo compatibleNo compatibleNo compatible

        algoritmo de bloqueo: El motor de almacenamiento InnoDB tiene tres algoritmos de bloqueo de filas, que son:

1. Bloqueo de registro: bloqueo en un registro de una sola fila.

2. Bloqueo de espacio: bloqueo de espacio, bloqueo

3. Bloqueo de tecla siguiente: Bloqueo de espacio + Bloqueo de registro, bloquea un rango y bloquea el registro en sí.

Record Lock siempre bloqueará los registros de índice. Si la tabla del motor de almacenamiento InnoDB no está configurada con ningún índice cuando se crea, entonces el motor de almacenamiento InnoDB utilizará la clave primaria implícita para bloquear. Next-Key Lock es un algoritmo de bloqueo que combina Gap Lock y Record Lock. Bajo el algoritmo Next-Key Lock, InnoDB utiliza este algoritmo de bloqueo para consultas de fila. La tecnología de bloqueo que utiliza Next-Key Lock se llama Next-Key Locking y su diseño no pretende resolver el problema fantasma (lectura fantasma). Al utilizar esta tecnología de bloqueo, lo que se bloquea no es un valor único, sino un rango, lo cual es una mejora de Predict Lock.

        Acerca del punto muerto : El punto muerto se refiere a un fenómeno en el que dos o más transacciones se esperan entre sí debido a la competencia por los recursos durante la ejecución. Sin fuerza externa, las cosas no podrán avanzar.

        actualización de bloqueo :La escalada de bloqueo se refiere a reducir la granularidad del bloqueo actual. Por ejemplo, la base de datos puede actualizar los bloqueos de 1000 filas de una tabla a un bloqueo de página, o actualizar un bloqueo de página a un bloqueo de tabla.

El motor de almacenamiento InnoDB no tiene el problema de actualizar el bloqueo. Debido a que no genera bloqueos de fila en función de cada registro, por el contrario, administra los bloqueos en función de cada página a la que accede cada transacción, utilizando un método de mapa de bits. Por lo tanto, ya sea que una transacción bloquee un registro o varios registros en la página, el costo suele ser el mismo.

2. Breve descripción del bloqueo de espacios

El motor de almacenamiento InnoDB tiene tres algoritmos de bloqueo de filas, y el bloqueo de espacios es uno de ellos. Los bloqueos de espacios se utilizan para bloquear un rango, pero no los registros en sí. Su propósito es evitar que múltiples transacciones inserten registros en el mismo rango, lo que puede provocar problemas de lectura fantasma.

3. Cómo se implementan los bloqueos a nivel de fila en InnoDB

El bloqueo a nivel de fila de InnoDB se implementa bloqueando las entradas del índice en el índice. InnoDB usa bloqueos a nivel de fila solo cuando los datos se recuperan mediante condiciones de índice; de ​​lo contrario, InnoDB usa bloqueos de tabla.

Cuando ciertas filas en una tabla están bloqueadas, diferentes transacciones pueden usar diferentes índices para bloquear diferentes filas. Además, ya sea que utilice un índice de clave principal, un índice único o un índice ordinario, InnoDB utilizará bloqueos de fila para bloquear los datos.

4. ¿Bajo qué circunstancias se producirá un punto muerto en la base de datos?

El punto muerto se refiere a un fenómeno en el que dos o más transacciones se esperan entre sí debido a la competencia por los recursos durante la ejecución. Sin fuerza externa, las cosas no podrán avanzar.La siguiente tabla muestra una situación clásica de punto muerto, es decir, A espera a B y B espera a A. Este problema de punto muerto se llamaEstancamiento AB-BA

tiempoSesión ASesión B
1COMENZAR:
2

mysql>SELECCIONAR * DE t

DONDE a = 1 PARA ACTUALIZAR;

************1.fila************

a:1

1 fila en el conjunto (0,00 s)

COMENZAR:
3

mysql>SELECCIONAR * DE t

DONDE a = 2 PARA ACTUALIZAR;

************1.fila************

a:2

1 fila en el conjunto (0,00 s)

4

mysql>SELECCIONAR * DE t

DONDE a = 2 PARA ACTUALIZAR;

#esperar

5

mysql>SELECCIONAR * DE t

DONDE a = 1 PARA ACTUALIZAR;

ERROR 1213(40001): Se encontró un bloqueo al intentar obtener el bloqueo; intente reiniciar la transacción

5. Describa brevemente la solución al punto muerto de la base de datos.

La forma más sencilla de resolver el problema del punto muerto es el tiempo de espera, es decir, cuando dos transacciones se esperan entre sí, cuando un tiempo de espera excede un umbral establecido, una de las transacciones se revierte y la otra transacción en espera puede continuar.

Además del mecanismo de tiempo de espera, las bases de datos actuales generalmente también utilizan el método de gráfico de espera (gráfico de espera) para la detección de interbloqueos. Este es un enfoque más proactivo para la detección de interbloqueos que la solución de tiempo de espera. Este enfoque también lo adopta el motor de almacenamiento InnoDB. El gráfico de espera requiere que la base de datos almacene los dos tipos de información siguientes:

1. Bloquear lista de información;

2. Lista de espera de transacciones;

Se puede construir un gráfico a través de la lista vinculada anterior, y si hay un bucle en este gráfico, significa que hay un punto muerto, por lo que los recursos se esperan unos a otros. Este es un mecanismo de detección de interbloqueo más activo. Cuando cada transacción solicita un bloqueo y espera, determinará si hay un bucle. Si existe, hay un interbloqueo. En términos generales, el motor de almacenamiento InnoDB elige revertir la transacción. la menor cantidad de deshacer.