SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Isolamento e MVCC
José Arthur Benetasso Villanova
jose.arthur@locaweb.com.br
Delivery Engineering
Características de um banco transacional
Atomic
Consistent
Isolated
Durable
Características de um banco transacional
Atomic: Tudo ou nada
Consistent: O dado é válido no contexto
Isolated: Uma transação não atrapalha a
outra
Durable: Gravado em uma mídia durável
(disco normalmente)
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
Dirty Reads
Transaction 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;
Non-repeatable Reads
Transaction 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;
Phantom Reads
Transaction 1
SELECT * FROM users
WHERE age BETWEEN 10 AND 30;
SELECT * FROM users
WHERE age BETWEEN 10 AND 30;
COMMIT;
Transaction 2
INSERT INTO users VALUES ( 3, 'Bob', 27 );
COMMIT;
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
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
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
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
MVCC - PostgreSQL
Como funciona?
MVCC - PostgreSQL
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
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)
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
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
MVCC - PostgreSQL
● Existem muitos estudos e otimizações
dentro do banco de dados para minimizar
este problema de espaço e
consequentemente performance
MVCC - PostgreSQL
ze=# 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)
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
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
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
Referências
http://en.wikipedia.org/wiki/Isolation_%28database_systems%29
http://en.wikipedia.org/wiki/Multiversion_concurrency_control
http://momjian.us/main/presentations/
https://dev.mysql.com/doc/refman/5.6/en/innodb-transaction-model.html
http://www.postgresql.org/docs/9.4/static/transaction-iso.html
https://msdn.microsoft.com/en-us/library/ms173763.aspx
We want you!
Junte-se ao nosso clã para
batalhas!
● LightServants
● #P9VPVCOP
Comente “MVCC” no pedido

Mais conteúdo relacionado

Mais procurados

Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Sql SAT #147 Problemas de Fragmentção com TLog
Sql SAT #147 Problemas de Fragmentção com TLogSql SAT #147 Problemas de Fragmentção com TLog
Sql SAT #147 Problemas de Fragmentção com TLogMarcus Bittencourt
 
Oracle Real Application Clusters 11gR2 - New Features
Oracle Real Application Clusters 11gR2 - New FeaturesOracle Real Application Clusters 11gR2 - New Features
Oracle Real Application Clusters 11gR2 - New FeaturesiMasters
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)elliando dias
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...Gleicon Moraes
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoFabio Telles Rodriguez
 
Tirando o coelho da cartola: integrando sistemas com RabbitMQ
Tirando o coelho da cartola: integrando sistemas com RabbitMQTirando o coelho da cartola: integrando sistemas com RabbitMQ
Tirando o coelho da cartola: integrando sistemas com RabbitMQNelson Senna do Amaral
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVMFuncionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVMAdriano Bonat
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorZabbix BR
 
Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...
Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...
Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...Felipe Abreu
 

Mais procurados (20)

Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Sql SAT #147 Problemas de Fragmentção com TLog
Sql SAT #147 Problemas de Fragmentção com TLogSql SAT #147 Problemas de Fragmentção com TLog
Sql SAT #147 Problemas de Fragmentção com TLog
 
Postgres Big data
Postgres Big dataPostgres Big data
Postgres Big data
 
Oracle Real Application Clusters 11gR2 - New Features
Oracle Real Application Clusters 11gR2 - New FeaturesOracle Real Application Clusters 11gR2 - New Features
Oracle Real Application Clusters 11gR2 - New Features
 
Servidor Proxy Squid
Servidor Proxy SquidServidor Proxy Squid
Servidor Proxy Squid
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
 
Alta Concorrência com Postgres
Alta Concorrência com PostgresAlta Concorrência com Postgres
Alta Concorrência com Postgres
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Servidor proxy
Servidor proxy Servidor proxy
Servidor proxy
 
Tirando o coelho da cartola: integrando sistemas com RabbitMQ
Tirando o coelho da cartola: integrando sistemas com RabbitMQTirando o coelho da cartola: integrando sistemas com RabbitMQ
Tirando o coelho da cartola: integrando sistemas com RabbitMQ
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVMFuncionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
 
Postgres Tuning
Postgres TuningPostgres Tuning
Postgres Tuning
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
 
Roteiro vsftpd
Roteiro vsftpdRoteiro vsftpd
Roteiro vsftpd
 
Minuto a minuto
Minuto a minutoMinuto a minuto
Minuto a minuto
 
Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...
Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...
Um panorama sobre Padrões PSR, e como eles vem mudando o jeito que desenvolve...
 
Servidor proxy Squid
Servidor proxy SquidServidor proxy Squid
Servidor proxy Squid
 

Destaque

Celery for SysAdmins
Celery for SysAdminsCelery for SysAdmins
Celery for SysAdminsLocaweb
 
Soluções para sua empresa vender na Internet
Soluções para sua empresa vender na InternetSoluções para sua empresa vender na Internet
Soluções para sua empresa vender na InternetLocaweb
 
Debian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizadoDebian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizadoClaudio Ferreira Filho
 
Comercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticasComercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticasLocaweb
 
Overview Sobre Varnish
Overview Sobre VarnishOverview Sobre Varnish
Overview Sobre VarnishLocaweb
 
Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Fabrízio Mello
 
API Do Email Marketing Locaweb
API Do Email Marketing LocawebAPI Do Email Marketing Locaweb
API Do Email Marketing LocawebLocaweb
 
Tech talkrubocop
Tech talkrubocopTech talkrubocop
Tech talkrubocopLocaweb
 
Sistemas Distribuidos
Sistemas DistribuidosSistemas Distribuidos
Sistemas DistribuidosLocaweb
 
Se eu fosse a Microsoft
Se eu fosse a MicrosoftSe eu fosse a Microsoft
Se eu fosse a MicrosoftCesar Brod
 
Ambient Light Events- Wylkon Queiroz
Ambient Light Events- Wylkon QueirozAmbient Light Events- Wylkon Queiroz
Ambient Light Events- Wylkon QueirozLocaweb
 
Como encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsDickson S. Guedes
 
Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013Fabio Telles Rodriguez
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémLocaweb
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 

Destaque (20)

Celery for SysAdmins
Celery for SysAdminsCelery for SysAdmins
Celery for SysAdmins
 
Soluções para sua empresa vender na Internet
Soluções para sua empresa vender na InternetSoluções para sua empresa vender na Internet
Soluções para sua empresa vender na Internet
 
Debian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizadoDebian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizado
 
Comercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticasComercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticas
 
Overview Sobre Varnish
Overview Sobre VarnishOverview Sobre Varnish
Overview Sobre Varnish
 
Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)
 
Freenas
FreenasFreenas
Freenas
 
API Do Email Marketing Locaweb
API Do Email Marketing LocawebAPI Do Email Marketing Locaweb
API Do Email Marketing Locaweb
 
Tech talkrubocop
Tech talkrubocopTech talkrubocop
Tech talkrubocop
 
Sistemas Distribuidos
Sistemas DistribuidosSistemas Distribuidos
Sistemas Distribuidos
 
Revisão do postgresql.conf
Revisão do postgresql.confRevisão do postgresql.conf
Revisão do postgresql.conf
 
Se eu fosse a Microsoft
Se eu fosse a MicrosoftSe eu fosse a Microsoft
Se eu fosse a Microsoft
 
Storage em Oracle RAC
Storage em Oracle RACStorage em Oracle RAC
Storage em Oracle RAC
 
Ambient Light Events- Wylkon Queiroz
Ambient Light Events- Wylkon QueirozAmbient Light Events- Wylkon Queiroz
Ambient Light Events- Wylkon Queiroz
 
Como encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logs
 
Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013Postgres Wonderland - Campus Party 2013
Postgres Wonderland - Campus Party 2013
 
Trabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQLTrabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQL
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e Além
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Postgres Wonderland - PGDay CE2013
Postgres  Wonderland - PGDay CE2013Postgres  Wonderland - PGDay CE2013
Postgres Wonderland - PGDay CE2013
 

Semelhante a Isolamento e mvcc

L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoFabrício Catae
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...Rodrigo Immaginario
 
Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.Jann Claude Mousquer
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows AzureVitor Tomaz
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Claudio Miranda
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016Roberto Fonseca
 
SSD no banco de dados é bom mesmo?
SSD no banco de dados é bom mesmo?SSD no banco de dados é bom mesmo?
SSD no banco de dados é bom mesmo?pichiliani
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLMatheus Espanhol
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIMatheus Espanhol
 
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
Cartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performáticaCartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performáticaMarcel Nicolay
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteUilson Souza
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemastaniamaciel
 

Semelhante a Isolamento e mvcc (20)

L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
 
SQL e Transações
SQL e TransaçõesSQL e Transações
SQL e Transações
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
 
Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
 
SSD no banco de dados é bom mesmo?
SSD no banco de dados é bom mesmo?SSD no banco de dados é bom mesmo?
SSD no banco de dados é bom mesmo?
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
 
DB2 Express-C
DB2 Express-CDB2 Express-C
DB2 Express-C
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool II
 
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
Cartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performáticaCartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performática
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamente
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 

Mais de Locaweb

Random testing
Random testingRandom testing
Random testingLocaweb
 
AngularJS
AngularJSAngularJS
AngularJSLocaweb
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsTestes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsLocaweb
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talkLocaweb
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlLocaweb
 
Linux cgroups and namespaces
Linux cgroups and namespacesLinux cgroups and namespaces
Linux cgroups and namespacesLocaweb
 

Mais de Locaweb (6)

Random testing
Random testingRandom testing
Random testing
 
AngularJS
AngularJSAngularJS
AngularJS
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsTestes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJs
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talk
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sql
 
Linux cgroups and namespaces
Linux cgroups and namespacesLinux cgroups and namespaces
Linux cgroups and namespaces
 

Isolamento e mvcc

  • 1. Isolamento e MVCC José Arthur Benetasso Villanova jose.arthur@locaweb.com.br Delivery Engineering
  • 2. Características de um banco transacional Atomic Consistent Isolated Durable
  • 3. Características de um banco transacional Atomic: Tudo ou nada Consistent: O dado é válido no contexto Isolated: Uma transação não atrapalha a outra Durable: Gravado em uma mídia durável (disco normalmente)
  • 4. 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
  • 5. Dirty Reads Transaction 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;
  • 6. Non-repeatable Reads Transaction 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;
  • 7. Phantom Reads Transaction 1 SELECT * FROM users WHERE age BETWEEN 10 AND 30; SELECT * FROM users WHERE age BETWEEN 10 AND 30; COMMIT; Transaction 2 INSERT INTO users VALUES ( 3, 'Bob', 27 ); COMMIT;
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 14. 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
  • 15. 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)
  • 16. 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
  • 17. 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
  • 18. MVCC - PostgreSQL ● Existem muitos estudos e otimizações dentro do banco de dados para minimizar este problema de espaço e consequentemente performance
  • 19. MVCC - PostgreSQL ze=# 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)
  • 20. 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
  • 21. 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
  • 22. 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
  • 24. We want you! Junte-se ao nosso clã para batalhas! ● LightServants ● #P9VPVCOP Comente “MVCC” no pedido