isolamento e mvcc

24
Isolamento e MVCC José Arthur Benetasso Villanova [email protected] Delivery Engineering

Upload: locaweb

Post on 18-Jul-2015

81 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Isolamento e mvcc

Isolamento e MVCCJosé Arthur Benetasso Villanova

[email protected] Engineering

Page 2: Isolamento e mvcc

Características de um banco transacional

AtomicConsistentIsolatedDurable

Page 3: Isolamento e mvcc

Características de um banco transacional

Atomic: Tudo ou nadaConsistent: O dado é válido no contextoIsolated: Uma transação não atrapalha a outraDurable: Gravado em uma mídia durável (disco normalmente)

Page 4: Isolamento e mvcc

Fenômenos de Isolamento

Isolation Level

Dirty Read Non-Repeatable Read

Phantom Read Notes

Read Uncommited

Possible* Possible Possible SQL Server WITH (NOLOCK)PostgreSQL não tem

Read Commited

Not Possible Possible Possible Padrão do SQL Server e PostgreSQL

Repeatable Read

Not Possible Not Possible Possible* Padrão InnoDB, não é possível Phantom Read

Serializable Not Possible Not Possible Not Possible

Page 5: Isolamento e mvcc

Dirty ReadsTransaction 1

SELECT age FROM users WHERE id = 1;-- retorna 20

SELECT age FROM users WHERE id = 1;-- retorna 21

Transaction 2

BEGIN;UPDATE users SET age = 21 WHERE id = 1;

ROLLBACK;

Page 6: Isolamento e mvcc

Non-repeatable ReadsTransaction 1

SELECT * FROM users WHERE id = 1;

SELECT * FROM users WHERE id = 1;COMMIT;

Transaction 2

UPDATE users SET age = 21 WHERE id = 1;COMMIT;

Page 7: Isolamento e mvcc

Phantom ReadsTransaction 1

SELECT * FROM usersWHERE age BETWEEN 10 AND 30;

SELECT * FROM usersWHERE age BETWEEN 10 AND 30;COMMIT;

Transaction 2

INSERT INTO users VALUES ( 3, 'Bob', 27 );COMMIT;

Page 8: Isolamento e mvcc

Estratégias para manter a consistência

● Locks○ Muitas locks travando banco e baixando a

performance● MVCC (Multiversion Concurrency Control)

○ Cópias do mesmo registro para um grupo de transações

Page 9: Isolamento e mvcc

MVCC

● Readers never block writers, and writes never block readers

● Conceito criado na década de 70, mas somente colocado em prática na década de 80 por limitações das máquinas

Page 10: Isolamento e mvcc

MVCC - Quem usa?Altibase Druid HypergraphDB NuoDB ScimoreDB

ArangoDB EXASOL InfiniDB Netezza sones GraphDB

Berkeley DB eXtremeDB Ingres ObjectStore Sybase SQL Anywhere

Bigdata Firebird InterBase Oracle database Sybase IQ

Cloudant FLAIM MariaDB OrientDB ThinkSQL

Clustrix FoundationDB MarkLogic Server PostgreSQL Tibero

Couchbase GE Smallworld Version Managed Data Store

MemSQL Rdb/ELN TokuMX

CouchDB H2 Database Engine MDB RDM Embedded Zope Object Database

IBM DB2 Hawtdb Meronymy SPARQL Database Server

REAL Server

IBM Cognos TM1 HBase (Apache HBase) Microsoft SQL Server RethinkDB

Drizzle HSQLDB MySQL SAP HANA

Page 11: Isolamento e mvcc

MVCC - PostgreSQL

● Cada transação cria seu próprio snapshot da base de dados

● Este snapshot não contém os dados mais atualizados, contém os dados do momento que a transação iniciou

Page 12: Isolamento e mvcc

MVCC - PostgreSQL

Como funciona?

Page 13: Isolamento e mvcc

MVCC - PostgreSQL

Page 14: Isolamento e mvcc

MVCC - PostgreSQL

● As consequências deste modelo é uma grande quantidade de dados duplicados no banco

● O PostgreSQL não mantém uma lista da transações correntes e a visibilidade do registros, e por isso ele não apaga ou marca para apagar os registros passados

Page 15: Isolamento e mvcc

MVCC - PostgreSQL

● Os novos registros são alocados se possível na mesma página de dados que os antigos, mas nem sempre isso é possível já que uma página tem 8192 bytes (8K)

Page 16: Isolamento e mvcc

MVCC - PostgreSQL

● Os registros deixados para trás são recuperados por outro processo o VACUUM;

● Registros são marcados como não utilizados mais, mas não são removidos, causando fragmentação do banco de dados○ Exceção: se uma página fica vazia e está no final do

arquivo, ela é removida pelo VACUUM

Page 17: Isolamento e mvcc

MVCC - PostgreSQL

● VACUUM FULL ou CLUSTER○ Criam uma nova tabela de forma ordenada e

apagam a original, liberando espaço○ Processo lento e necessita de bastante espaço livre○ Precisa efetivamente de LOCKS no banco para

funcionar, travando escritas○ Se espaço for um problema, adicione discos

Page 18: Isolamento e mvcc

MVCC - PostgreSQL

● Existem muitos estudos e otimizações dentro do banco de dados para minimizar este problema de espaço e consequentemente performance

Page 19: Isolamento e mvcc

MVCC - PostgreSQLze=# select xmin,xmax,cmin,cmax,* from ze; xmin | xmax | cmin | cmax | k | v ---------+------+------+------+---+--------------- 3342006 | 0 | 11 | 11 | 1 | Oi 3342006 | 0 | 11 | 11 | 2 | Tudo bem? 3342006 | 0 | 11 | 11 | 3 | Até Breve 3342014 | 0 | 0 | 0 | 4 | Olá novamente(4 registros)

Page 20: Isolamento e mvcc

MVCC - PostgreSQL● xmin: número da transação que criou o registro● xmax: número da maior transação que pode ver o

registro, quem apagou o registro (ou atualizou)● cmin: comando mínimo que consegue ver o registro

(dentro de uma transação)● cmax: comando máximo que pode ver o registro dentro

da transação

Page 21: Isolamento e mvcc

MVCC - PostgreSQL● Transação analisada: 35● Transações em progresso: 15 e 35

● Transação 15: possui o registro vermelho, amarelo e os verdes em seu snapshot

● Transação 35: Não tem o vermelho, tem ou não o amarelo dependendo do isolamento, e vê ambos os verdes

Page 22: Isolamento e mvcc

MVCC - Outros bancos

● Oracle e MySQL: possuem uma área de UNDO ao invés de gravar no bloco os registros expirados

● SQL Server: não utiliza o MVCC por padrão, é necessário ativar o mecanismo através do comando:SET TRANSACTION ISOLATION LEVEL SNAPSHOT

Page 24: Isolamento e mvcc

We want you!Junte-se ao nosso clã para batalhas!● LightServants● #P9VPVCOP

Comente “MVCC” no pedido