Upload
colum
View
25
Download
0
Embed Size (px)
DESCRIPTION
PostGres - Transacções. TBD Vladimir Luz. Sumário. Níveis de isolamento Read Committed Serializable Gestor de Transacções MVCC Locks Deadlock Locks em Índices. Níveis de Isolamento (1). - PowerPoint PPT Presentation
Citation preview
PostGres - PostGres - TransacçõesTransacções
TBDTBD
Vladimir LuzVladimir Luz
SumárioSumário
Níveis de isolamentoNíveis de isolamento Read CommittedRead Committed SerializableSerializable
Gestor de TransacçõesGestor de Transacções MVCCMVCC LocksLocks DeadlockDeadlock
Locks em ÍndicesLocks em Índices
Níveis de Isolamento (1)Níveis de Isolamento (1)
No SQL estão definidos quatro tipos de No SQL estão definidos quatro tipos de isolamento de transacções em função de três isolamento de transacções em função de três fenómenos que devem ser evitadosfenómenos que devem ser evitados Dirty read – uma transacção lê dados escritos por Dirty read – uma transacção lê dados escritos por
uma transacção que ainda não fez commituma transacção que ainda não fez commit Nonrepeatable read – Uma transacção lê dados Nonrepeatable read – Uma transacção lê dados
que já tinha lido antes e que entretanto foram que já tinha lido antes e que entretanto foram modificados por outra transacção que fez commitmodificados por outra transacção que fez commit
Phantom read – uma transacção volta a executar Phantom read – uma transacção volta a executar uma query devolvendo um conjunto de tuplos e uma query devolvendo um conjunto de tuplos e verifica que o conjunto dos tuplos devolvidos é verifica que o conjunto dos tuplos devolvidos é diferente da execução anterior diferente da execução anterior
Níveis de Isolamento (2)Níveis de Isolamento (2) Níveis de isolamento e comportamentoNíveis de isolamento e comportamento
Nivel de Nivel de IsolamentoIsolamento
Dirty ReadDirty Read Unrepeatable Unrepeatable ReadRead
Phantom ReadPhantom Read
Read Read UncommittedUncommitted
Read CommittedRead Committed
Reapeted readReapeted read
SerializableSerializable Pode ser requerido qualquer dos níveis de isolamentoPode ser requerido qualquer dos níveis de isolamento Internamente:Internamente:
Apenas existe os níveis read commited e serializableApenas existe os níveis read commited e serializable read uncommitted é tratado como read committed e o read uncommitted é tratado como read committed e o
repeated read é tratado como serializablerepeated read é tratado como serializable Os quatro níveis apenas determinam que fenómenos não Os quatro níveis apenas determinam que fenómenos não
podem ocorrerpodem ocorrer
Níveis de Isolamento (3)Níveis de Isolamento (3)
Read CommittedRead Committed Nível de isolamento por defeito no PostGresNível de isolamento por defeito no PostGres Um SELECT vê apenas dados que já fizeram Um SELECT vê apenas dados que já fizeram
commit.commit. Vê um snapshot da base de dados na altura em Vê um snapshot da base de dados na altura em
que começa a queryque começa a query Comandos de UPDATE e DELETE comportam Comandos de UPDATE e DELETE comportam
se da mesma formase da mesma forma
Níveis de Isolamento (4)Níveis de Isolamento (4)
SerializableSerializable Simula as execução das transacções em Simula as execução das transacções em
série como se elas fossem executadas uma série como se elas fossem executadas uma depois da outradepois da outra
No caso de SELECT o funcionamento é No caso de SELECT o funcionamento é análogo ao read commitedanálogo ao read commited
Difere no snapshot que vê, pois vê o Difere no snapshot que vê, pois vê o snapshot na altura do início da transacçãosnapshot na altura do início da transacção
Comandos de UPDATE E DELETE também Comandos de UPDATE E DELETE também vêem o snapshot do inicio da transacçãovêem o snapshot do inicio da transacção
Gestor de TransacçõesGestor de Transacções
Usa um modelo multi-versãoUsa um modelo multi-versão Multiversion Concurrency Control, Multiversion Concurrency Control,
MVCCMVCC Usado em Statements DMLUsado em Statements DML
Usa um sistema de locksUsa um sistema de locks Two-Phase-LockingTwo-Phase-Locking Usado em statements DDLUsado em statements DDL
MVCC(1)MVCC(1)
MVCCMVCC A ideia é mater duas versões de uma linha A ideia é mater duas versões de uma linha
que corresponde a diferentes instancias que corresponde a diferentes instancias da linha em pontos diferentes no tempoda linha em pontos diferentes no tempo
Garante que as transacções apenas vêem Garante que as transacções apenas vêem os dados que são consistentes nessa alturaos dados que são consistentes nessa altura
Vê um snapshot da base de dados com Vê um snapshot da base de dados com apenas os dados que fizeram commitapenas os dados que fizeram commit
Não implementa locks para os comandos Não implementa locks para os comandos DMLDML
MVCC (2)MVCC (2)
VantagensVantagens Os leitores nunca bloqueiam os Os leitores nunca bloqueiam os
escritoresescritores Os escritores criam as suas próprias para Os escritores criam as suas próprias para
as actualizaremas actualizarem Os leitores acedem a versão mais recente Os leitores acedem a versão mais recente
dos dados que é parte do snapshot.dos dados que é parte do snapshot. Como não usa locks não precisa interagir Como não usa locks não precisa interagir
com o lock managercom o lock manager
MVCC (3)MVCC (3)
DesvantagensDesvantagens Sobrecarga extra para o storage manager Sobrecarga extra para o storage manager
porque tem de manter diferentes versões para porque tem de manter diferentes versões para os tuplosos tuplos
O desenvolvimento de aplicações concorrentes O desenvolvimento de aplicações concorrentes requer mais cuidado, pois leva a diferentes requer mais cuidado, pois leva a diferentes comportamentos na forma como as transacções comportamentos na forma como as transacções se comportam.se comportam.
A performance depende das características da A performance depende das características da carga de trabalho a correr carga de trabalho a correr
Não protege em relação a procedimentos que Não protege em relação a procedimentos que afectem a tabela inteiraafectem a tabela inteira
LocksLocks
Usa um sistema de two-phase lockingUsa um sistema de two-phase locking Comandos DDL são forçados a adquirir um Comandos DDL são forçados a adquirir um
lock antes de iniciarem a sua execuçãolock antes de iniciarem a sua execução Locks são guardados numa tabela de locks Locks são guardados numa tabela de locks
que é implementada com uma tabela de que é implementada com uma tabela de hash de memória partilhada.hash de memória partilhada.
Os locks são implementados através de Os locks são implementados através de semáforos semáforos
Cada transacção tem um semáforo Cada transacção tem um semáforo associado a elaassociado a ela
DeadlocksDeadlocks A detecção de deadlocks é baseada num A detecção de deadlocks é baseada num
sistema de time-outssistema de time-outs O sistema de detecção é activado se uma O sistema de detecção é activado se uma
transacção espera por mais de um segundo transacção espera por mais de um segundo pela obtenção de um lockpela obtenção de um lock
O algoritmo constrói um grafo baseado na O algoritmo constrói um grafo baseado na informação na tabela de locks e procura informação na tabela de locks e procura dependências circularesdependências circulares
Se encontrar alguma, então é porque há um Se encontrar alguma, então é porque há um deadlockdeadlock
A transacção que originou a detecção é A transacção que originou a detecção é abortada e retorna um erro para o utilizadorabortada e retorna um erro para o utilizador
Caso contrario continua a espera do lock Caso contrario continua a espera do lock
Locks em ÍndicesLocks em Índices Os locks dependem do tipo de índiceOs locks dependem do tipo de índice B-Tree e GiSTB-Tree e GiST
Locks partilha/exclusivos ao nível das paginasLocks partilha/exclusivos ao nível das paginas Locks são libertados logo depois de cada folha é Locks são libertados logo depois de cada folha é
acedidaacedida Não origina deadlocksNão origina deadlocks
HashHash Locks partilha/exclusivos ao nível dos bucketsLocks partilha/exclusivos ao nível dos buckets Melhor nível de concorrência mas pode gerar Melhor nível de concorrência mas pode gerar
deadlocksdeadlocks R-TreeR-Tree
Locks partilha/exclusivos ao nível do índice Locks partilha/exclusivos ao nível do índice Locks libertados depois de todo o comando estar Locks libertados depois de todo o comando estar
terminadoterminado
BibliografiaBibliografia
Silberschatz, Abraham, Database Silberschatz, Abraham, Database System Concepts, 5ª EdiçãoSystem Concepts, 5ª Edição
PostgreSQL 8.1.0 DocumentationPostgreSQL 8.1.0 Documentation Lane, Tom, Transaction Processing Lane, Tom, Transaction Processing
in PostgreSQLin PostgreSQL