Multiversion	
Concurrency	
Control	(MVCC)	
O	lo	que	todo	el	mundo	usa	y	no	se	da	
cuenta	
Created	by	Pablo	Vicente
Concurrency..	what?
1981
Bibliografía	
Se	puede	decir	que	de	
ellos	nace	el	término	
MVCC.		
Uno	cita	al	otro,	aunque	
fue	el	segundo,	el	que	
sentó	las	bases.	
El	último	es	en	el	que	se	
basa	este	trabajo.	
Reed,	David	P.	(1978)	"Naming	
and	Synchronization	in	a	
Decentralized	Computer	
System"	
✓
Bernstein,	Philip	A.;	Goodman,	
Nathan	(1981).	"Concurrency	
Control	in	Distributed	Database	
Systems"		
✓
Bernstein,	Philip	A.;	Hadzilacos,	
Vassos;	Goodman,	Nathan	(1987).	
"Concurrency	Control	and	
Recovery	in	Database	Systems"	
✓
	
	
Y...	nace	MVCC!!
Pero	primero,	CC	
Independencia	entre	transacciones.	•
	
En	caso	de	conflicto,	una	transacción	no	tendrá	efecto,	
hasta	que	sea	resuelto.	
•
	
Ejecutar	atomicamente	cada	transacción.	•
Primera	aproximación	‑	CC	
		En	una	ejecución	
concurrente,	T1	y	T2	son	dos	
entornos	de	ejecución.	
confli	
CONFLICTO
	
El	control	de	concurrencia	
debe	decidir	cual	debe	
prevalecer.	
Uno	de	ellos	deberá	o	
esperar	o	hacer	un	roll‑back
¿Por	qué	añadir	la	MV?	
Problema	WaW,	cúal	es	el	
válido?		
✓
Abortar	operaciones.	✓
Recuperar	antiguas	
versiones.	
✓
Items/ámbitos	bloqueados?	✓
	
	
1.‑Write
	
2.‑	Write
¡MVCC!	
	Philip	A.	Bernstein	 David	P.	Reed
"Es	una	técnica	de	concurrencia	optimista	en	donde	ninguna	
tarea	o	hilo	es	bloqueado	mientras	se	realiza	una	operación,	
porque	el	otro	hilo	usa	su	propia	copia	(versión)	del	objeto	
dentro	de	una	transacción."	‑	PostgreSQL	
MVCC	‑	El	optimista
MVCC	by	Timestamp	
Marcas	de	tiempo	o	identificadores	de	transacción	
crecientes	(consistencia	transaccional)	
•
Mantiene	varias	versiones	del	objeto.	•
En	algunas	BD's	cada	usuario	tiene	una	instancia	de	
ella.	
•
El	coste	espacial	se	dispara	y	añadimos	más	
complejidad	al	planificador.	
•
FACTS	
Cada	'write'	existoso	crea	
una	nueva	versión.	
•
El	puntero	apunta	a	la	
última	versión	válida.	
•
Sólo	crea	nuevas	versiones	
la	operación	'write'.	
•
	
	
	
7	
		
Nuevo	
indice	
Versiones	
de	item	 	
Indice	
actual
Otros	MVCC	
Two	phase	locking	✓
	
Método	mixto	✓
Es	el	pesimista	del	grupo,	ya	que	
funciona	a	base	de	bloqueos.	
	
Igualmente,	el	valor	X,	tendrá	un	
duplicado	para	que	pueda	ser	leido,	
mientras	alguien	está	modificándolo.	
Sustituye	las	marcas	de	tiempo	
por	listas	de	commits	con	las	
operaciones.	
	
Agrega	el	problema	de	la	
generación	consistente	de	
marcas	de	tiempo.	
	
Combina	los	dos	métodos	
vistos	anteriormente.
Vende	humos!	
Distributed	version	control	
=	MVCC	enriquecido	 	InnoDB	Multiversion	
(MySql)	
PostgreSQL	&	MVCC
Ejemplo	práctico	‑	PostgreSQL	
*Col	1	=	ID	de	transacción	que	la	
modificó.	
*Col	2	=	La	transacción	anterior	
a	Col	1.	
UPDATE	crea	una	nueva	fila	a	
partir	de	la	anterior.	
•
	
Conflicto:	muestra	las	filas	
asociadas	a	esa	transacción.	
•
	
Hot	Backups.	Toma	una	
instantánea	de	la	BD	antes	de	
una	query.	
•
15
¡MUCHAS	GRACIAS!	
		
	PREGUNTAS?

Multiversion concurrency control