Base de datos: ¿Qué es el Control de Concurrencia Multiversión (MVCC) y quién lo soporta? [cerrado]


Recientemente Jeff ha publicado con respecto a su problema con los bloqueos de base de datos relacionados con la lectura. Multiversion Concurrency Control (MVCC) afirma resolver este problema. ¿Qué es y qué bases de datos lo soportan?

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

  • oracle
  • postgresql
Author: Basil Bourque, 2008-08-26

15 answers

Oracle ha tenido un excelente sistema de control de versiones múltiples en su lugar desde hace mucho tiempo (al menos desde oracle 8.0)

Seguir debería ayudar.

  1. El Usuario A inicia una transacción y está actualizando 1000 filas con algún valor En El Tiempo 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 alcanza la fila 543 y encuentra que una transacción está en operación desde el Tiempo T1.
  5. La base de datos devuelve registro sin modificar de los Registros. El valor devuelto es el valor que se comprometió en ese momento menor o igual a T2.
  6. Si el registro no se pudo recuperar de los registros de rehacer, significa que la base de datos no está configurada apropiadamente. Tiene que haber más espacio asignado a los registros.
  7. De esta manera se logra la consistencia de lectura. Los resultados devueltos son siempre los mismos con respecto a la hora de inicio de la transacción. Así que dentro de una transacción la consistencia de lectura es lograr.

He tratado de explicar en los términos más simples posibles...hay mucho que hacer en las bases de datos.

 32
Author: Krantz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-26 08:04:44

Control de Concurrencia Multi-Versión de PostgreSQL

Así como este artículo que presenta diagramas de cómo funciona MVCC al emitir instrucciones INSERT, UPDATE y DELETE.

 9
Author: thelsdj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-04 12:04:50

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

 8
Author: John Greeley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-04 17:53:34

XtremeData dbX soporta MVCC.

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

 3
Author: lit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-14 12:35:37

Firebird lo hace, lo llaman MGA (Arquitectura Multigeneracional).

Mantienen la versión original intacta, y agregan una nueva versión que solo la sesión que la usa puede ver, cuando se confirma la versión anterior está deshabilitada, y la versión más reciente 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 segments/undo tablespaces para otras sesiones y para revertir.

 2
Author: Osama Al-Maadeed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 06:12:52

SAP HANA también usa MVCC. SAP HANA es un sistema Informático completo en Memoria, por lo que los costos de MVCC para select son muy bajos... :)

 2
Author: OlivierH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-12 08:15:50

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

La principal ventaja de usar el modelo MVCC de control de concurrencia en lugar de bloquear es que en MVCC los bloqueos adquiridos para consultar (leer) 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 puntos muertos. Una lectura nunca debe ser capaz para causarlos.
 1
Author: Neall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-26 11:31:37

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

 1
Author: DrPizza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-26 21:56:36

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 selecciona más lento ya que cada uno necesita una subconsulta para encontrar el último registro.

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

 1
Author: Eric Z Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-26 22:00:06

MySQL también utiliza MVCC de forma predeterminada si utiliza tablas InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

 1
Author: Seun Osewa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 03:52:10

McObject anunció en 11/09 que ha agregado un administrador de transacciones MVCC opcional a su base de datos incrustada 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.

 1
Author: Ted Kenney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-31 02:55:31

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

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

Claramente MVCC es cada vez más beneficioso ya que una aplicación escala para incluir muchas tareas que se ejecutan en varios núcleos de CPU.

 1
Author: Ted Kenney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-31 03:01:04

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

 0
Author: Ciaran De Buitlear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-20 11:40:18

Berkeley DB también soporta MVCC.

Y cuando BDB storage engine se utiliza en MySQL, MySQL también soporta MVCC.

Berkeley DB es un DBMS muy potente, personalizable y totalmente conforme al ÁCIDO. Admite varios métodos diferentes para la indexación, la replicación maestro-esclavo, se puede usar como un almacén de valor de clave pura con su propia API dinámica o consultar con SQL si se desea. Vale la pena echar un vistazo.

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

 0
Author: chris polzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-25 12:35:12

De http://vschart.com/list/multiversion-concurrency-control/

Couchbase, OrientDB, CouchDB, PostgreSQL, Proyecto Voldemort, BigTable, Servidor Percona, HyperGraphDB, Llovizna, Cloudant, IBM DB2, Nombre de usuario, InterBase

 0
Author: Sean Timm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-23 21:03:56