database deadlock glossary

database - Base de datos: ¿Qué es el Control de Concurrencia Multiversion(MVCC) y quién lo apoya?



deadlock glossary (15)

Recientemente, Jeff ha publicado sobre su problema con los bloqueos de la base de datos relacionados con la lectura. El Control de Concurrencia Multiversión (MVCC) pretende resolver este problema. ¿Qué es y qué bases de datos lo admiten?

actualizado: estos lo soportan (¿qué otros?)

  • oráculo
  • postgresql

Aquí hay un enlace a la página de documentación de PostgreSQL en MVCC . La cita de elección (énfasis mío):

La principal ventaja de utilizar el modelo MVCC de control de concurrencia en lugar de bloquear es que en los bloqueos MVCC adquiridos para consultar (leer) los datos no entran en conflicto con los bloqueos adquiridos para escribir datos, por lo que la lectura nunca bloquea la escritura y la escritura nunca bloquea la lectura .

Es por eso que Jeff estaba tan confundido por sus obstáculos. Una lectura nunca debería ser capaz de causarlos.


DB2 versión 9.7 tiene una versión con licencia de postgress plus en él. Esto significa que esta característica (en el modo correcto) admite esta característica.



Firebird lo hace, lo llaman MGA (Multi Generational Architecture).

Mantienen la versión original intacta y agregan una nueva versión que solo la sesión que usa puede ver, cuando se confirma que la versión anterior está deshabilitada, y la versión más nueva está habilitada para todos (el archivo se acumula con datos y necesita una limpieza regular) .

Oracle sobrescribe los datos en sí, y utiliza un rollback segmentos / deshacer espacios de tabla para otras sesiones y para deshacer.


Hay una buena explicación de MVCC, con diagramas, y algunos números de rendimiento para eXtremeDB en este artículo, escrito por el cofundador y CEO de McObject, en RTC Magazine:

http://www.rtcmagazine.com/articles/view/101612

Claramente, MVCC es cada vez más beneficioso ya que una aplicación se amplía para incluir muchas tareas que se ejecutan en múltiples núcleos de CPU.


Los siguientes tienen una implementación de MVCC:

SQL Server 2005 (no predeterminado, SET READ_COMMITTED_SNAPSHOT ON )

Oracle (desde la versión 8)

MySQL 5 (solo con tablas InnoDB)

PostgreSQL

Firebird

Informix

Estoy bastante seguro de que Sybase e IBM DB2 Mainframe / LUW no tienen una implementación de MVCC


MVCC también se puede implementar manualmente, agregando una columna de número de versión a sus tablas, y siempre haciendo inserciones en lugar de actualizaciones.

El costo de esto es una base de datos mucho más grande, y selecciones más lentas ya que cada una necesita una subconsulta para encontrar el último registro.

Es una excelente solución para sistemas que requieren un 100% de auditoría para todos los cambios.


McObject anunció en 11/09 que ha agregado un administrador de transacciones MVCC opcional a su base de datos incorporada eXtremeDB:

http://www.mcobject.com/november9/2009

eXtremeDB, originalmente desarrollado como un sistema de base de datos en memoria (IMDS), ahora está disponible en ediciones con almacenamiento híbrido (en memoria / en disco), alta disponibilidad, soporte de 64 bits y más.



Oracle cuenta con un excelente sistema de control de versiones múltiples desde hace mucho tiempo (al menos desde Oracle 8.0)

Lo siguiente debería ayudar.

  1. El usuario A inicia una transacción y está actualizando 1000 filas con algún valor en el momento T1
  2. El usuario B lee las mismas 1000 filas en el tiempo T2.
  3. El usuario A actualiza la fila 543 con el valor Y (valor original X)
  4. El usuario B llega a la fila 543 y descubre que una transacción está en funcionamiento desde la hora T1.
  5. La base de datos devuelve el registro sin modificar de los registros. El valor devuelto es el valor que se confirmó en el momento inferior o igual a T2.
  6. Si no se pudo recuperar el registro de los registros de rehacer, significa que la base de datos no está configurada adecuadamente. Es necesario que haya más espacio asignado a los registros.
  7. De esta forma se logra la consistencia de lectura. Los resultados devueltos son siempre los mismos con respecto a la hora de inicio de la transacción. Entonces, dentro de una transacción, se logra la consistencia de lectura.

He tratado de explicar en los términos más simples posibles ... hay mucho para la multiversión en las bases de datos.


SAP HANA también usa MVCC. SAP HANA es un sistema completo de computación en la memoria, por lo que los costos de MVCC para select son muy bajos ... :)


SQL Server 2005 y posteriores ofrecen MVCC como una opción; no es el predeterminado, sin embargo. MS lo llama aislamiento de instantáneas, si la memoria sirve.



Berkeley DB también es compatible con MVCC.

Y cuando el motor de almacenamiento BDB se usa en MySQL, MySQL también admite MVCC.

Berkeley DB es un DBMS muy poderoso, personalizable, completamente compatible con ACID. Es compatible con varios métodos diferentes para la indexación, la replicación maestro-esclavo, se puede utilizar como un almacén de valores de clave pura con su propia API dinámica o consultar con SQL si así lo desea. Vale la pena echarle un vistazo.

Otro DBMS orientado a documentos que abarca MVCC sería CouchDB . MVCC aquí también es una gran ventaja para la replicación punto a punto integrada.


XtremeData dbX es compatible con MVCC.

Además, dbX puede hacer uso de primitivas SQL implementadas en hardware FPGA.