Transacción y bloqueo

 

Transacciones y bloqueos
Definición de
transacción Transacción (Transacción) generalmente se refiere a qué hacer o hacer. En términos informáticos, se refiere a una unidad de ejecución de programa (unidad) que accede y puede actualizar varios elementos de datos en la base de datos. Transacción (Transacción) es una unidad de ejecución de programa (unidad) que accede y puede actualizar varios elementos de datos en la base de datos. Las transacciones generalmente son causadas por la ejecución de programas de usuario escritos en lenguajes de manipulación de bases de datos de alto nivel o lenguajes de programación (como SQL, C ++ o Java), y se definen mediante declaraciones (o llamadas a funciones) en forma de begin transacción y finalizar transacción. Una transacción consta de todas las operaciones realizadas entre el comienzo de la transacción y el final de la transacción. --De la Enciclopedia Baidu

En resumen: Transaction (Transaction) es la unidad básica de control de concurrencia.
La llamada transacción, es una secuencia de operaciones, estas operaciones se ejecutan o no se ejecutan, es una unidad de trabajo indivisible.
Por ejemplo: en el problema de transferencia bancaria, la cuenta A transfiere dinero a la cuenta B, habrá dos operaciones correspondientes, la cuenta A resta el monto de la transferencia correspondiente y la cuenta B aumenta el monto de la transferencia correspondiente. Estas dos operaciones se ejecutan o no se ejecutan. En este momento, estas dos operaciones deben considerarse como una sola transacción para garantizar la coherencia de los datos.

Las características de las transacciones
Atomicidad ACID (Atomicidad): Una transacción es una unidad de trabajo indivisible, y todas las operaciones incluidas en la transacción se realizan o no se realizan.
Coherencia (coherencia): la transacción debe cambiar la base de datos de un estado coherente a otro estado coherente. La consistencia y la atomicidad están estrechamente relacionadas.
Aislamiento: la ejecución de una transacción no puede ser interferida por otras transacciones. Es decir, las operaciones internas de una transacción y los datos utilizados están aislados de otras transacciones concurrentes y cada transacción ejecutada simultáneamente no puede interferir entre sí.
Durabilidad: La durabilidad, también conocida como permanencia, significa que una vez que se compromete una transacción, sus cambios en los datos de la base de datos deben ser permanentes. Las siguientes operaciones o fallas no deberían tener ningún efecto sobre él.
La sentencia correspondiente a la transacción
BEGIN TRANSACTION inicia la transacción
COMMIT TRANSACTION confirma la transacción
ROLLBACK TRANSACTION revierte la transacción
Control de concurrencia de
transacciones La transacción no considera los problemas causados ​​por el aislamiento.
Lectura sucia: Este tipo de excepción se debe a que una transacción lee otra transacción Datos modificados pero no confirmados, cuando la transacción modificada realiza una operación de reversión, provocará una excepción de transacción de lectura.
Lectura no repetible: lee una fila de datos en la tabla dentro de una transacción y los resultados de varias lecturas son diferentes. (Una transacción lee los datos enviados por otra transacción)
Lectura fantasma (lectura virtual): Se refiere a la lectura de los datos insertados por otra transacción en una transacción, lo que resulta en una lectura inconsistente antes y después. Por ejemplo, lea la tabla completa, es decir, el número de filas en la tabla. Por ejemplo, la primera vez que se lee una tabla, hay 3 registros y la segunda vez que se lee la tabla, hay 4 registros (diferentes de lectura no repetible: la lectura no repetible es para datos El valor de la lectura fantasma es para la cantidad de datos)
nivel de aislamiento de transacciones de base de datos (definido por el estándar SQL)
READ UNCOMMITTED (lectura no confirmada): Modificaciones en la transacción, incluso si no está confirmada, también se pueden ver otras transacciones. Es fácil causar muchos problemas como lectura sucia, si no es necesario,
READ COMMITTED se usa raramente : el nivel de aislamiento predeterminado de la mayoría de los sistemas de bases de datos (excepto Mysql, etc.). Este nivel de aislamiento es el comienzo de una transacción. Solo puede ver los resultados de las transacciones completadas. Lo que se está ejecutando no puede ser visto por otras transacciones. En este nivel, habrá un fenómeno de lectura de datos antiguos, es decir, el problema de la lectura no repetible.
LECTURA REPETIBLE (lectura repetible): resuelve el problema de las lecturas sucias. Este nivel asegura que los resultados de cada fila de registros sean consistentes, es decir, el problema de leer datos antiguos como se mencionó anteriormente, pero no puede resolver otro problema. Fila, como sugiere el nombre, son los datos de la fila los que aparecen de repente. Significa que una determinada transacción está leyendo un cierto rango de datos, pero otra transacción inserta datos en este rango de datos, lo que hace que el número de filas de datos sea inconsistente cuando se lee varias veces. Es decir, lectura fantasma. -Nivel de aislamiento predeterminado de MYSQL
SERIALIZABLE (serializable): el nivel de aislamiento más alto, evita la situación de lectura fantasma anterior al forzar a que las transacciones se ejecuten en serie (tenga en cuenta que es serial), porque agrega una gran cantidad de bloqueos, lo que resulta en un gran número de tiempo de espera de solicitud, por lo que el rendimiento será menor. Este nivel de aislamiento se puede considerar cuando la consistencia de los datos es particularmente necesaria y la cantidad de simultaneidad no necesita ser tan grande.
Nivel de aislamiento Posibilidad de lectura sucia Posibilidad de lectura no repetible Posibilidad de lectura fantasmal
Lectura bloqueada LEER SIN COMPROMISO Sí Sí Sí No
LEER COMPROMETIDA No Sí Sí No
REPEATABLE LEER No No Sí No
SERIALIZABLE No No No Sí
Bloqueo
de base de datos Tipos básicos de bloqueo de base de datos:
Bloqueos X: exclusivo para operaciones de escritura 
: un objeto de datos sin agregar ningún bloqueo, una transacción puede bloquearlos más X, y otros asuntos no se pueden combinar con ninguno de sus bloqueos
S-lock: compartir para operaciones de lectura 
- Después de que una transacción agrega un Bloqueo S a un objeto de datos, otras transacciones no pueden agregarle un bloqueo X, pero pueden agregar un bloqueo S Bloqueo
U: actualización: 
cuando una transacción desea actualizar un objeto de datos, primero solicite el bloqueo U del objeto. El objeto tiene un bloqueo U, lo que permite que otras transacciones le agreguen un bloqueo S. En la última escritura, solicite actualizar el candado U a candado X. No es necesario agregar
bloqueos X de diferentes niveles en todo el proceso. El
primer nivel del protocolo de bloqueo (datos sucios, lectura no repetible) antes de que 
cualquier transacción escriba ciertos datos, debe agregarle un bloqueo X y liberarlo después de que finalice la transacción. No se utiliza ningún bloqueo S y no se requiere ningún bloqueo para leer datos.
El final de la transacción incluye el final normal (COMMIT) y el final anormal (ROLLBACK).
El protocolo de bloqueo de segundo nivel (lectura no repetible) 
cumple con el protocolo de bloqueo de primer nivel, y cualquier transacción debe agregarle un bloqueo S antes de leer ciertos datos, y luego liberarlo después de leerlo.
Protocolo de bloqueo de tercer nivel ( ) 
cumple con el protocolo de bloqueo de primer nivel, y cualquier transacción debe agregarle un bloqueo S antes de leer ciertos datos y liberar el bloqueo después de que finaliza la transacción
. Podemos ver la relación entre el nivel de aislamiento y el protocolo de bloqueo: 
primero- protocolo de bloqueo de nivel -> LEER NO COMPROMISO
Protocolo de bloqueo de nivel 2 -> LEER COMPROMISO  Protocolo de bloqueo de 
nivel 3 -> LECTURA REPETIBLE

Otros protocolos de bloqueo Protocolo de bloqueo de
dos fases:

Toda la transacción se divide en dos fases, la primera fase es el bloqueo, la última fase es el desbloqueo. En la fase de bloqueo, la transacción solo puede bloquear y manipular datos, pero no puede desbloquearlos. Hasta que la transacción no libere el primer bloqueo, entrará en la fase de desbloqueo. Durante este proceso, la transacción solo se puede desbloquear y los datos también pueden ser manipulado. El protocolo de bloqueo de dos fases hace que las transacciones tengan un alto grado de simultaneidad, porque el desbloqueo no tiene que ocurrir al final de la transacción. Su defecto es que no resuelve el problema del interbloqueo, porque no tiene requisitos de secuencia en la fase de bloqueo. Por ejemplo, dos transacciones se aplican a los bloqueos A y B respectivamente, y luego se aplican a los bloqueos de cada uno y entran en el estado de interbloqueo en este momento.
Teorema: si todas las transacciones cumplen con el protocolo de bloqueo de dos etapas, entonces toda la programación cruzada de estas transacciones es serializable.
Protocolo de bloqueo de granularidad múltiple

Bloqueo a nivel de fila: alta sobrecarga y bloqueo lento; se producirá un interbloqueo; la granularidad de bloqueo más pequeña, la menor probabilidad de conflictos de bloqueo y la mayor concurrencia. Solo implemente
bloqueos a nivel de página en la capa del motor de almacenamiento : la sobrecarga y el tiempo de bloqueo son entre bloqueos de tabla y bloqueos de fila; se producirán interbloqueos; la granularidad de bloqueo es entre bloqueos de tabla y bloqueos de fila, y la simultaneidad es generalmente
bloqueos a nivel de tabla: sobrecarga Pequeña , bloqueo rápido; sin interbloqueo; gran granularidad de bloqueo, la mayor probabilidad de conflictos de bloqueo y la menor concurrencia.

Transacciones y bloqueos
Definición de
transacción Transacción (Transacción) generalmente se refiere a qué hacer o hacer. En términos informáticos, se refiere a una unidad de ejecución de programa (unidad) que accede y puede actualizar varios elementos de datos en la base de datos. Transacción (Transacción) es una unidad de ejecución de programa (unidad) que accede y puede actualizar varios elementos de datos en la base de datos. Las transacciones generalmente son causadas por la ejecución de programas de usuario escritos en lenguajes de manipulación de bases de datos de alto nivel o lenguajes de programación (como SQL, C ++ o Java), y se definen mediante declaraciones (o llamadas a funciones) en forma de begin transacción y finalizar transacción. Una transacción consta de todas las operaciones realizadas entre el comienzo de la transacción y el final de la transacción. --De la Enciclopedia Baidu

En resumen: Transaction (Transaction) es la unidad básica de control de concurrencia.
La llamada transacción, es una secuencia de operaciones, estas operaciones se ejecutan o no se ejecutan, es una unidad de trabajo indivisible.
Por ejemplo: en el problema de transferencia bancaria, la cuenta A transfiere dinero a la cuenta B, habrá dos operaciones correspondientes, la cuenta A resta el monto de la transferencia correspondiente y la cuenta B aumenta el monto de la transferencia correspondiente. Estas dos operaciones se ejecutan o no se ejecutan. En este momento, estas dos operaciones deben considerarse como una sola transacción para garantizar la coherencia de los datos.

Las características de las transacciones
Atomicidad ACID (Atomicidad): Una transacción es una unidad de trabajo indivisible, y todas las operaciones incluidas en la transacción se realizan o no se realizan.
Coherencia (coherencia): la transacción debe cambiar la base de datos de un estado coherente a otro estado coherente. La consistencia y la atomicidad están estrechamente relacionadas.
Aislamiento: la ejecución de una transacción no puede ser interferida por otras transacciones. Es decir, las operaciones internas de una transacción y los datos utilizados están aislados de otras transacciones concurrentes y cada transacción ejecutada simultáneamente no puede interferir entre sí.
Durabilidad: La durabilidad, también conocida como permanencia, significa que una vez que se compromete una transacción, sus cambios en los datos de la base de datos deben ser permanentes. Las siguientes operaciones o fallas no deberían tener ningún efecto sobre él.
La sentencia correspondiente a la transacción
BEGIN TRANSACTION inicia la transacción
COMMIT TRANSACTION confirma la transacción
ROLLBACK TRANSACTION revierte la transacción
Control de concurrencia de
transacciones La transacción no considera los problemas causados ​​por el aislamiento.
Lectura sucia: Este tipo de excepción se debe a que una transacción lee otra transacción Datos modificados pero no confirmados, cuando la transacción modificada realiza una operación de reversión, provocará una excepción de transacción de lectura.
Lectura no repetible: lee una fila de datos en la tabla dentro de una transacción y los resultados de varias lecturas son diferentes. (Una transacción lee los datos enviados por otra transacción)
Lectura fantasma (lectura virtual): Se refiere a la lectura de los datos insertados por otra transacción en una transacción, lo que resulta en una lectura inconsistente antes y después. Por ejemplo, lea la tabla completa, es decir , el número de filas en la tabla . Por ejemplo, la primera vez que se lee una tabla, hay 3 registros y la segunda vez que se lee la tabla, hay 4 registros (diferentes de lectura no repetible: la lectura no repetible es para datos El valor de la lectura fantasma es para la cantidad de datos)
Nivel de aislamiento de transacciones de la base de datos (definido por el estándar SQL)
LEER SIN COMPROMISO: Modificaciones en una transacción, incluso si no están comprometidas, se pueden ver otras transacciones. Es fácil causar muchos problemas como lectura sucia, si no es necesario,
READ COMMITTED se usa raramente : el nivel de aislamiento predeterminado de la mayoría de los sistemas de bases de datos (excepto Mysql, etc.). Este nivel de aislamiento es el comienzo de una transacción. Solo puede ver los resultados de las transacciones completadas. Lo que se está ejecutando no puede ser visto por otras transacciones. En este nivel, habrá un fenómeno de lectura de datos antiguos, es decir, el problema de la lectura no repetible.
LECTURA REPETIBLE (lectura repetible): resuelve el problema de las lecturas sucias. Este nivel asegura que los resultados de cada fila de registros sean consistentes, es decir, el problema de leer datos antiguos como se mencionó anteriormente, pero no puede resolver otro problema. Fila, como sugiere el nombre, son los datos de la fila los que aparecen de repente. Significa que una determinada transacción está leyendo un cierto rango de datos, pero otra transacción inserta datos en este rango de datos, lo que hace que el número de filas de datos sea inconsistente cuando se lee varias veces. Es decir, lectura fantasma. -Nivel de aislamiento predeterminado de MYSQL
SERIALIZABLE (serializable): el nivel de aislamiento más alto, evita la situación de lectura fantasma anterior al forzar a que las transacciones se ejecuten en serie (tenga en cuenta que es serial), porque agrega una gran cantidad de bloqueos, lo que resulta en un gran número de tiempo de espera de solicitud, por lo que el rendimiento será menor. Este nivel de aislamiento se puede considerar cuando la consistencia de los datos es particularmente necesaria y la cantidad de simultaneidad no necesita ser tan grande.
Nivel de aislamiento Posibilidad de lectura sucia Posibilidad de lectura no repetible Posibilidad de lectura fantasmal
Lectura bloqueada LEER SIN COMPROMISO Sí Sí Sí No
LEER COMPROMETIDA No Sí Sí No
REPEATABLE LEER No No Sí No
SERIALIZABLE No No No Sí
Bloqueos
de base de datos Los tipos básicos de bloqueos de base de datos: Bloqueos
X: exclusivo para operaciones de escritura: 
una transacción puede agregar bloqueos X a un objeto de datos sin ningún bloqueo, mientras que otras transacciones no pueden agregarle ningún bloqueo.
S Lock: compartir se utiliza para operaciones de lectura 
-después de que una transacción agrega un bloqueo S a un objeto de datos, otras transacciones no pueden agregarle un bloqueo X, pero pueden agregar un bloqueo S Bloqueo
U: actualización 
-Cuando la transacción quiera actualizar el objeto de datos, solicítelo primero el bloqueo U del objeto. El objeto tiene un bloqueo U, lo que permite que otras transacciones le agreguen un bloqueo S. En la última escritura, solicite actualizar el candado U a candado X. No es necesario agregar
bloqueos X de diferentes niveles en todo el proceso. El
primer nivel del protocolo de bloqueo (datos sucios, lectura no repetible) antes de que 
cualquier transacción escriba ciertos datos, debe agregarle un bloqueo X y liberarlo después de que finalice la transacción. No se utiliza ningún bloqueo S y no se requiere ningún bloqueo para leer datos.
El final de la transacción incluye el final normal (COMMIT) y el final anormal (ROLLBACK).
El protocolo de bloqueo de segundo nivel (lectura no repetible) 
cumple con el protocolo de bloqueo de primer nivel, y cualquier transacción debe agregarle un bloqueo S antes de leer ciertos datos, y luego liberarlo después de leerlo.
Protocolo de bloqueo de tercer nivel ( ) 
cumple con el protocolo de bloqueo de primer nivel, y cualquier transacción debe agregarle un bloqueo S antes de leer ciertos datos y liberar el bloqueo después de que finaliza la transacción
. Podemos ver la relación entre el nivel de aislamiento y el protocolo de bloqueo: 
primero- protocolo de bloqueo de nivel -> LEER NO COMPROMISO
Protocolo de bloqueo de nivel 2 -> LEER COMPROMISO  Protocolo de bloqueo de 
nivel 3 -> LECTURA REPETIBLE

Otros protocolos de bloqueo Protocolo de bloqueo de
dos fases:

Toda la transacción se divide en dos fases, la primera fase es el bloqueo, la última fase es el desbloqueo. En la fase de bloqueo, la transacción solo puede bloquear y manipular datos, pero no puede desbloquearlos. Hasta que la transacción no libere el primer bloqueo, entrará en la fase de desbloqueo. Durante este proceso, la transacción solo se puede desbloquear y los datos también pueden ser manipulado. El protocolo de bloqueo de dos fases hace que las transacciones tengan un alto grado de simultaneidad, porque el desbloqueo no tiene que ocurrir al final de la transacción. Su defecto es que no resuelve el problema del interbloqueo, porque no tiene requisitos de secuencia en la fase de bloqueo. Por ejemplo, dos transacciones se aplican a los bloqueos A y B respectivamente, y luego se aplican a los bloqueos de cada uno y entran en el estado de interbloqueo en este momento.
Teorema: si todas las transacciones cumplen con el protocolo de bloqueo de dos etapas, entonces toda la programación cruzada de estas transacciones es serializable.
Protocolo de bloqueo de granularidad múltiple

Bloqueo a nivel de fila: alta sobrecarga y bloqueo lento; se producirá un interbloqueo; la granularidad de bloqueo más pequeña, la probabilidad más baja de conflictos de bloqueo y la mayor concurrencia. Solo implemente
bloqueos a nivel de página en la capa del motor de almacenamiento : la sobrecarga y el tiempo de bloqueo son entre bloqueos de tabla y bloqueos de fila; se producirán interbloqueos; la granularidad de bloqueo es entre bloqueos de tabla y bloqueos de fila, y la simultaneidad es generalmente
bloqueos a nivel de tabla: sobrecarga Pequeña , bloqueo rápido; sin interbloqueo; gran granularidad de bloqueo, la mayor probabilidad de conflictos de bloqueo y la menor concurrencia.
Referencia: https://blog.csdn.net/qq_33983617/article/details/81836526

Supongo que te gusta

Origin blog.csdn.net/JHON07/article/details/86624848
Recomendado
Clasificación