La correcta comprensión de MySQL bloqueo optimista, pesimista de bloqueo y MVCC

MySQL 5.7 entorno de pruebas

Como premisa la noción

  • concurrencia de base de datos de los tres escenarios
  • aclaración bloqueo optimista y pesimista

bloqueo pesimista

  • ¿Qué es bloqueo pesimista?
  • Bloqueo pesimista lograr
  • ventajas y desventajas de bloqueo pesimista

El bloqueo optimista

  • ¿Cuál es el bloqueo optimista?
  • aplicación bloqueo optimista
  • Las ventajas y desventajas de bloqueo optimista

MVCC control de concurrencia multi Versión

  • ¿Cuál es MVCC?

resumen

  • opciones de bloqueo optimista y pesimista
  • OCC, PCC, MVCC

material de referencia


Como premisa la noción


concurrencia de base de datos de los tres escenarios

escenarios de la base de datos de concurrencia, hay tres, a saber:

  • 读-读: No hay problemas, no es necesario el control de concurrencia
  • 读-写: Problemas de aislamiento, puede experimentar lecturas sucias, las lecturas fantasma, lectura no repetible
  • 写-写: Perdido problema de actualización puede existir, tales como la pérdida de la actualización de primera clase, las actualizaciones segundos perdidos

aclaración bloqueo optimista y pesimista

 

  • De cualquier bloqueo bloqueo pesimista u optimista, su naturaleza no es un concepto de bloqueo de base de datos específica, pero lo definimos, se utiliza para describir la idea de encerrar a dos categorías. Así, con diseño clasificado, seremos capaces de llevar a cabo determinadas categorías de cerraduras de bases de datos a través de esta categoría;
  • Sin embargo, el bloqueo optimista en una base de datos llamada más inclinado a control de concurrencia optimista (OCC), el bloqueo pesimista llamado control de concurrencia pesimista (PCC), hay un control diferente del bloqueo pesimista optimista denominado MVCC, control de concurrencia multi-versión
  • No deben fila cerraduras de bloqueo optimista y pesimista en la base de datos, tabla de bloqueo de bloqueo exclusivo, bloqueo compartido confundido, no son una dimensión de las cosas, los antiguos se cree un bloqueo, que se puede llevar a cabo en el enfoque optimista dependiendo de si o bloqueo pesimista clasificación ideológico
  • concepto de bloqueo optimista y pesimista no sólo existe en el campo de base de datos, se puede decir que hay flujos seguros, la existencia simultánea de casi todas las escenas escenarios de aplicación de bloqueo optimista y pesimista, como en Java tiene una aplicación concreta pensamientos de bloqueo optimista y pesimista; pero optimista y pesimista de bloqueo realización concreta de diferentes áreas tienen diferentes problemas a resolver puede ser diferente

Así que si la gente se pregunta lo que eres bloqueo optimista y pesimista, no se dice que es un bloqueo específico, es sólo un diseño de la cerradura, que puede tener un montón de categoría específica

 

bloqueo pesimista


¿Qué es bloqueo pesimista?

En un sistema de gestión de base de datos relacional, control de concurrencia pesimista (también conocido como "bloqueo pesimista", pesimista control de concurrencia, la abreviatura "PCC") es un método de control de concurrencia; medios de bloqueo pesimistas es adoptar una actitud negativa pesimista, defecto cuando los datos se accede mundo exterior, tendría un conflicto, por lo que todo el proceso de procesamiento de datos se utilizan en el estado bloqueado para garantizar el mismo tiempo, sólo un hilo puede acceder a los datos para lograr la exclusividad de datos, por lo general, la base de datos es bloqueo pesimista de lograr con mecanismo de bloqueo de la propia base de datos proporciona.

base de datos de control de concurrencia pesimista puede ser resuelto leer - escribir y escribir colisión - conflictos de grabación, se refiere a una forma cerrada para resolver el

Bloqueo pesimista lograr

Típicamente, la base de datos es utilizar el bloqueo pesimista bloquear la propia base de datos proporcionan para lograr el

  • Para acceder a los datos fuera de una barra, entonces es necesario en primer lugar para bloquear los datos de aplicación de base de datos (una especie de bloqueo)
  • Si tiene éxito, entonces se puede manipular los datos durante su funcionamiento, otros clientes ya no pueden operar los datos de la
  • Si conseguir un fracaso, a continuación, al mismo tiempo en nombre de otros clientes tienen acceso a la cerradura, debe esperar otros cliente libera el bloqueo

Por supuesto, la base de datos ofrece muchas cerraduras, bloquear cada base de datos proporcionada no siempre es el mismo, por lo que la situación específica depende de lo bloquee, como bloqueos de registro, bloqueos de tabla, etc.

Ventajas y desventajas

control de concurrencia pesimista es en realidad una "cerradura y luego tomar la primera visita," la estrategia conservadora, para proporcionar una garantía para la seguridad del tratamiento de datos. Pero en términos de eficiencia, el procesamiento de mecanismo de bloqueo de base de datos dará lugar a gastos adicionales, así como aumentar la posibilidad de un estancamiento y, además, la operación de sólo lectura no se produce debido a un conflicto, no es necesario el uso de una cerradura para hacerlo sólo puede aumentar la carga en el sistema; no se reducirá paralelismo, si una transacción bloquea una fila de datos, otras transacciones deben esperar hasta que han terminado de procesar la transacción puede manejar ese número de líneas 

Ventajas:
adecuados para su uso en un Write Once Read Many menos entorno concurrente, aunque no pueden mantener un rendimiento muy alto, pero el bloqueo optimista no proporcionan un mejor rendimiento bajo la premisa, se puede lograr la seguridad de los datos
inconvenientes:
el bloqueo se incrementará por encima , puede garantizar la seguridad de los datos, pero los datos bajo rendimiento de procesamiento, no es adecuado para su uso en la lectura de menos ocasión de escribir

El bloqueo optimista


¿Cuál es el bloqueo optimista?

En un sistema de gestión de base de datos relacional, el control de concurrencia optimista (también conocido como "bloqueo optimista", Optimista control de concurrencia, la abreviatura "OCC") es un método de control de concurrencia; bloqueo optimista (bloqueo optimista) es de bloqueo relativamente pesimista, el bloqueo optimista es suponer que incluso en un entorno concurrente, que operan fuera de los datos generalmente no causa conflicto, así que no van bloqueo (no tan optimista bloqueo de una cerradura), sino más bien para presentar los datos actualizados en tiempo, se conflicto formal o no de los datos para detectar un conflicto si se encuentra, a continuación, dejar que la información de la declaración en conflicto, lo que permite a los usuarios decidir qué hacer a continuación, como volver a intentar hasta tener éxito y bloqueo optimista en la base de datos, no el uso de la base de datos en sí bloqueo de lograr, tal vez usando una lógica para lograr la realización de la idea de hacer el bloqueo optimista

control de concurrencia optimista de la base de datos que hay que resolver está escrito en los escenarios de concurrencia de base de datos - conflicto de escritura, se refiere a una forma libre de bloqueo para resolver el


Ideas CAS

De hecho, la realización concreta de la base de datos de bloqueo optimista es casi igual que la idea del algoritmo en Java CAS bloqueo optimista se utiliza de la misma, por lo que podemos aprender de la base de datos de diseño de algoritmos CAS bloqueo optimista:

de instrucciones llamado el CAS Compara y de intercambio, es un conjunto de instrucciones del sistema, toda la operación CAS es una operación atómica es indivisible. A partir de la descripción detallada, podemos ver lo que las operaciones CAS:

instrucciones CAS requieren tres operandos, a saber, la posición de memoria V, el valor esperado de la antigua A, y el nuevo valor B. Cuando la ejecución de la instrucción CAS, cuando el valor actual de la incorporada en la posición V es igual a la edad de lectura de nuestro valor esperado A, el procesador B será el nuevo valor para actualizar el valor de la incorporada en la posición V. De lo contrario, no lleva a cabo la actualización, pero si el valor V actualizado o no, devolverá el valor antiguo de V.

 

Ponemos el nivel de código hasta la comprensión popular i = 2; i ++, es decir:

  • Tema se lee primero desde una posición de memoria en el valor V, y se almacena como el valor esperado de la vieja A. (v = 2, a = 2)
  • Desde entonces i ++ para operar, el sistema comparará el valor actual de posición de memoria V se compara con el viejo V tanto el valor esperado A =? A.
  • Si son iguales, B = i ++ = 3 se actualizará el nuevo valor de la posición de memoria V B, por lo que el valor de la posición de memoria V se convierte en un valor B, 3
  • Si no igual, a continuación, los otros hilos modificados valor de la ubicación de memoria V, tales como el valor de la rosca antes de que el hilo 2 1 i para modificar el valor de i se actualiza. Por lo tanto Thread 1 actualiza la variable i fallado. Pero el hilo no se cuelga, pero vuelve un estado de fallo, el subproceso de llamada que esperar para decidir si reintento u otras operaciones. (Por lo general, vuelve a intentar hasta que lo consiga)

cerraduras optimista para la capa de base de datos también es similar a nivel de código para lograr
 


Base de datos de aplicación bloqueo optimista

En general optimistas dan cuenta de bloqueo hay dos, pero su diseño inherente de los CAS son:

  • Método 1:  Utilice la versión de datos ( version) para lograr
  • Este es el tipo más común de aplicación bloqueo optimista. ¿Qué es una versión de los datos de la misma? Es añadir un campo en la tabla como un identificador de versión del registro, como la versión de llamadas, cada operación de escritura permite la grabación de la versión + 1.
  • Por eso, cuando leemos los datos (incluyendo la versión), actualiza los maquillajes, tiempo para presentar, versión se llega a hablar con la base de datos realizado en comparación versión es consistente, si el acuerdo en nombre de este momento, no hay otros hilos estos datos también se modifica para dar actualizaciones, mientras que la versión + 1; si no, quiere decir en este momento, y el registro es modificado por otros hilos, y considera que los datos obsoletos devuelven información contradictoria, lo que permite a los usuarios decidir sobre la siguiente acción como reintento (re-leer los datos más recientes, otra actualización)
  • actualización del conjunto de mesa num = num + 1, version = Versión + 1 = # donde versión {version} e id = # {id}

Segunda manera:  el uso de la marca de tiempo ( timestamp) para lograr

  • Tabla para añadir un campo, el nombre no importa, como update_time llamada, los tipos de campo utilizando la marca de tiempo (timestamp)
  • Principios y de una manera consistente, sino también comprobar si la marca de tiempo de los datos actuales de la base de datos y actualizar su propio frente a tomar la misma marca de tiempo al actualizar presentado si el acuerdo representa el momento no hay conflictos, puede enviar actualizados y la marca de tiempo actualizada la hora actual, o es este periodo de tiempo, hay otros temas también actualizan presentados, volvió un conflicto de datos, el usuario espera para la siguiente acción.
  • actualización del conjunto de mesa num = num + 1, update_time = UNIX_TIMESTAMP (ahora ()) donde id = # {id} y update_time = # {} UPDATETIME

Pero debemos señalar que, mientras que el pensamiento para lograr el bloqueo optimista, tenemos que hacer la operación más segura CAS atómica, es decir, la versión de la base de datos para obtener los datos, comparar los datos para obtener la base de datos para obtener la versión con la versión anterior, y realizar actualización de datos estas operaciones deben ser ejecutadas en consonancia con operación compleja atómica; por lo que si se trata de una base de datos SQL, a continuación, vamos a garantizar más operaciones de SQL en la misma transacción

Ventajas y desventajas

Pros:
En un pequeño escenarios de concurrencia de la lectura y la escritura, para evitar la sobrecarga de la base de datos de bloqueo y mejorar el rendimiento de respuesta capa Dao
, de hecho, en muchos casos, ORM herramienta ha logrado con el bloqueo optimista, estos métodos no necesariamente nos necesitan humana para hacer las cosas

Contras:
el caso en Write Once Read Many escenarios de concurrencia, es decir, menos intensa competencia en operación de escritura, CAS dará lugar a varios reintentos, la frecuencia de colisión es demasiado alto, lo que resulta en gastos generales más altos que el bloqueo pesimista
 

MVCC control de concurrencia multi Versión


¿Cuál es MVCC?

¿Cuál es MVCC?

MVCC
MVCC , nombre completo Multi-Version Concurrency Control, es decir, el control de concurrencia multi-versión. MVCC es un método de control de concurrencia, por lo general en los sistemas de gestión de bases de datos, acceso simultáneo a la base de datos, implementar memoria transaccional en un lenguaje de programación.

MVCC en MySQL InnoDB aplicación es principalmente para mejorar el rendimiento de la base de datos concurrentes, una mejor manera de hacer frente a la lectura y la escritura de conflictos, por lo que incluso si hay un conflicto de leer y escribir, se puede prescindir de bloqueo, no bloqueo simultáneo de lectura

¿Cuál es la lectura instantánea actual y leer?

¿Cuál es la lectura instantánea actual y leer en el MySQL InnoDB?

  • lectura actual

Al igual que en el modo de selección de bloqueo de acción (bloqueo compartido), seleccione para la actualización; actualizar, insertar, eliminar (bloqueo exclusivo) es una especie de lectura actual de estas operaciones, por qué es llamado la lectura actual? Es decir, se lee la última versión del disco, pero también para asegurar que otras transacciones concurrentes no pueden modificar el registro actual se lee, el registro de lectura será bloqueada

  • La lectura instantánea

Como un desbloqueados seleccionar la operación de la foto se lee, que es un no-bloqueo desbloqueado lee, el nivel de aislamiento de instantánea en la premisa de que la lectura no es un nivel de serie, la instantánea se puede leer en el nivel de degradación de la serie actual de leer, la lectura fue el resultado de una instantánea la situación se complica por consideraciones de rendimiento mejorados, basados ​​en una lectura instantánea se basa en el control de concurrencia multi-versión, que MVCC, se puede considerar una variante de MVCC bloqueo de registro, pero es, en muchos casos, para evitar la operación de bloqueo, reduciendo gastos generales; ya que se basa en múltiples versiones, es decir, la lectura de la instantánea no necesariamente leer la versión más reciente de los datos, pero puede haber un historial de versiones anteriores

Para decirlo claramente leer instantánea MVCC está pensando en las funciones específicas de MySQL para lograr lee, todo el control MVCC concurrencia multi-propósito no está bloqueado para leer y conflictos de escritura, mejorar simultáneas de lectura y el rendimiento de escritura, y significa esto que la lectura es una instantánea de la lectura sin bloqueo, en lugar de la lectura actual, la lectura actual es en realidad una operación de bloqueo es lograr el bloqueo pesimista
 

resumen


opciones de bloqueo optimista y pesimista

Elección de bloqueo optimista y pesimista se refleja principalmente en escritos - escrito
en el bloqueo pesimista y las opciones de bloqueo optimista, podemos considerar los tres factores siguientes:

  • Tiempo de respuesta : Si la capa Dao requiere una velocidad de respuesta muy alta, sobre todo en la lectura y escritura de pequeñas escenas, entonces podemos utilizar esquema de bloqueo optimista para reducir la sobrecarga de bloqueos de base de datos, proporcionar concurrencia
  • La frecuencia de las colisiones : Si el conflicto es muy alta frecuencia, entonces podemos usar el bloqueo pesimista, para garantizar la tasa de éxito, después de todo, si la frecuencia de las colisiones grande, el bloqueo optimista se requieren varios reintentos para tener éxito, puede aumentar significativamente el costo de
  • Reintentar el precio: Si el gran gasto de reintento, por ejemplo, el proceso de reintento código es mucho tiempo, así que esta vez no recomiendo el uso de bloqueo optimista, y no como bloqueo pesimista directamente a la refrescante

Por lo que sabemos:

En la lectura, más escribiendo menos, la competencia CAS no es tan intensa, podemos utilizar la estrategia de bloqueo optimista para reducir la base de datos de bloqueo por encima, mejorar la respuesta de la concurrencia de base de datos
en una sola escritura leído muchas pequeñas escenas, porque va a producir una gran cantidad de competencia CAS y pesada la próxima prueba de costo es relativamente alto, no nos proponemos adoptar una estrategia de bloqueo optimista, pesimista de bloqueo o el uso directo de la barra de bloqueo de base de datos


Relaciones OCC, PCC, MVCC tres

  • control de concurrencia pesimista (PCC) es un método utilizado para resolver los lectura - colisión de escritura y escritura - escritura conflictos de bloqueo de control de concurrencia, para cada operación están bloqueadas, al mismo tiempo, sólo para obtener el bloqueo de la transacción con el fin de tener el derecho de la operación de datos, no consiguió una transacción de bloqueo sólo puede esperar a que la otra operación para liberar el bloqueo, sino que puede ser resuelto lecturas sucias, las lecturas fantasma, lecturas no repetibles, actualizaciones perdidas de primera clase, segunda clase perdido problema de actualización
  • control de concurrencia optimista (OCC) es un método utilizado para resolver la escritura - sin bloqueo de control de concurrencia conflicto de escritura que la discordia entre transacciones no tanto, por lo primeros cambios hacer antes de confirmar la transacción, la transacción se inició después de que el cheque, no hay una nueva enviar los cambios, si no en la sumisión, si se le da y vuelve a intentarlo. control de concurrencia optimista de bloqueo de giro similar. control de concurrencia optimista es adecuado para la contención de datos de baja, menos entorno de escritura de los conflictos; no se puede resolver lecturas sucias, las lecturas fantasma, lectura no repetible, pero perdió problema de actualización se puede resolver
  • Múltiples versiones de control de concurrencia (MVCC) es un método utilizado para resolver la lectura - el control de concurrencia de escritura libre de conflictos de bloqueo, que es un crecimiento de la distribución de una sola vía para la fecha y hora de transacciones, guarde una copia de cada versión modificada que se asocia con la marca de tiempo de transacción, leer la base de datos de sólo lectura instantánea antes de que comenzara la operación. Así que cuando la operación de lectura no sería el bloqueo de operación de escritura, la operación de escritura no está bloqueando los lectores, no sólo puede mejorar la concurrencia, también puede resolver las lecturas sucias, las lecturas fantasma, transacciones de lectura no repetibles y otras cuestiones. problema de actualización perdida, excepto

En general, la base de datos MVCC está satisfecho con la aparición de bloqueo pesimista para resolver lectura - escritura problema de conflicto, la solución propuesta ya que el rendimiento no es alto, se encuentra en la base de datos, podemos formar dos combinaciones:

  • MVCC + 悲观锁
    MVCC resolver los conflictos de escritura, escribir a resolver conflictos de bloqueo pesimista
  • MVCC + 乐观锁
    MVCC resolver los conflictos de escritura, escribir a resolver conflictos de bloqueo optimista

Esta combinación podría ser el mayor grado de concurrencia para mejorar el rendimiento de base de datos, y resolver conflictos a leer y escribir, y escribir sobre los problemas causados ​​por el conflicto

Publicado 72 artículos originales · ganado elogios 7 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_39399966/article/details/105166559
Recomendado
Clasificación