1 / 14

PostGres - Transacções

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).

colum
Télécharger la présentation

PostGres - Transacções

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PostGres - Transacções TBD Vladimir Luz

  2. Sumário • Níveis de isolamento • Read Committed • Serializable • Gestor de Transacções • MVCC • Locks • Deadlock • Locks em Índices

  3. Níveis de Isolamento (1) • No SQL estão definidos quatro tipos de isolamento de transacções em função de três fenómenos que devem ser evitados • Dirty read – uma transacção lê dados escritos por uma transacção que ainda não fez commit • Nonrepeatable read – Uma transacção lê dados que já tinha lido antes e que entretanto foram modificados por outra transacção que fez commit • Phantom read – uma transacção volta a executar uma query devolvendo um conjunto de tuplos e verifica que o conjunto dos tuplos devolvidos é diferente da execução anterior

  4. Níveis de Isolamento (2) • Níveis de isolamento e comportamento • Pode ser requerido qualquer dos níveis de isolamento • Internamente: • Apenas existe os níveis read commited e serializable • read uncommitted é tratado como read committed e o repeated read é tratado como serializable • Os quatro níveis apenas determinam que fenómenos não podem ocorrer

  5. Níveis de Isolamento (3) • Read Committed • Nível de isolamento por defeito no PostGres • Um SELECT vê apenas dados que já fizeram commit. • Vê um snapshot da base de dados na altura em que começa a query • Comandos de UPDATE e DELETE comportam se da mesma forma

  6. Níveis de Isolamento (4) • Serializable • Simula as execução das transacções em série como se elas fossem executadas uma depois da outra • No caso de SELECT o funcionamento é análogo ao read commited • Difere no snapshot que vê, pois vê o snapshot na altura do início da transacção • Comandos de UPDATE E DELETE também vêem o snapshot do inicio da transacção

  7. Gestor de Transacções • Usa um modelo multi-versão • Multiversion Concurrency Control, MVCC • Usado em Statements DML • Usa um sistema de locks • Two-Phase-Locking • Usado em statements DDL

  8. MVCC(1) • MVCC • A ideia é mater duas versões de uma linha que corresponde a diferentes instancias da linha em pontos diferentes no tempo • Garante que as transacções apenas vêem os dados que são consistentes nessa altura • Vê um snapshot da base de dados com apenas os dados que fizeram commit • Não implementa locks para os comandos DML

  9. MVCC (2) • Vantagens • Os leitores nunca bloqueiam os escritores • Os escritores criam as suas próprias para as actualizarem • Os leitores acedem a versão mais recente dos dados que é parte do snapshot. • Como não usa locks não precisa interagir com o lock manager

  10. MVCC (3) • Desvantagens • Sobrecarga extra para o storage manager porque tem de manter diferentes versões para os tuplos • O desenvolvimento de aplicações concorrentes requer mais cuidado, pois leva a diferentes comportamentos na forma como as transacções se comportam. • A performance depende das características da carga de trabalho a correr • Não protege em relação a procedimentos que afectem a tabela inteira

  11. Locks • Usa um sistema de two-phase locking • Comandos DDL são forçados a adquirir um lock antes de iniciarem a sua execução • Locks são guardados numa tabela de locks que é implementada com uma tabela de hash de memória partilhada. • Os locks são implementados através de semáforos • Cada transacção tem um semáforo associado a ela

  12. Deadlocks • A detecção de deadlocks é baseada num sistema de time-outs • O sistema de detecção é activado se uma transacção espera por mais de um segundo pela obtenção de um lock • O algoritmo constrói um grafo baseado na informação na tabela de locks e procura dependências circulares • Se encontrar alguma, então é porque há um deadlock • A transacção que originou a detecção é abortada e retorna um erro para o utilizador • Caso contrario continua a espera do lock

  13. Locks em Índices • Os locks dependem do tipo de índice • B-Tree e GiST • Locks partilha/exclusivos ao nível das paginas • Locks são libertados logo depois de cada folha é acedida • Não origina deadlocks • Hash • Locks partilha/exclusivos ao nível dos buckets • Melhor nível de concorrência mas pode gerar deadlocks • R-Tree • Locks partilha/exclusivos ao nível do índice • Locks libertados depois de todo o comando estar terminado

  14. Bibliografia • Silberschatz, Abraham, Database System Concepts, 5ª Edição • PostgreSQL 8.1.0 Documentation • Lane, Tom, Transaction Processing in PostgreSQL

More Related