Palestra no Sesol: Controle de Concorrência MultiVersão do PostgreSQL
Esta palestra foi ministrada pelo prof. Javam Machado, do Departamento de Computação, atual gerente de TI aqui da Universidade Federal do Ceará. A palestra ocorreu no primeiro dia do Sesol. Se quiser mais informações sobre o evento, siga os links relacionados logo no final do post.
A idéia principal da palestra é mostrar como funciona o controle de concorrência do SGBD open source PostgreSQL e alguma teoria sobre outros tipo de implementação, mostrando como o postgres está posicionado atualmente com relação a este aspecto, que é determinante na avaliação final que determina no nível de confiabilidade de um SGDB.
O trabalho apresentado teve uma profundidade técnica incomum para palestras locais. Não estou denegrindo o trabalho da maioria dos outros palestrantes técnicos, mas esta é uma realidade na nossa região. São poucas as palestras que se destacam realmente, e essa, a meu ver, se destacou.
No início, o prof. Javam falou um pouco sobre concorrência em geral e como ela traz problemas (apesar de ser uma solução) para os sistemas de computação em geral. A idéia no início era fornecer um entendimento de conceitos básicos para todos os espectadores, onde também estavam iniciantes da área e não entenderiam o restante da palestra.
Foram mostrado alguns tipos de controle de concorrência gerais para bancos de dados, como bloqueio do objeto, controle de concorrência multiversão (ambos implementados no postgres e objeto principal da palestra), ordenação por timestamp e controle otimista. Irei explicá-los rapidamente com informações que obtive na palestra e com conhecimentos anteriores meu sobre o postgres.
O bloqueio de objeto consiste em um controle mais granular para situações específicas. Este método é implementado pelo postgres mas não é o padrão usado por ele. O bloquei é feito em duas fases, nas etapas de obtenção de recursos e na liberação, para que a concorrência, em alguns pontos, seja tratada mais particularmente, assim como suas consequencias na base de dados já persistida.
A ordenação por timestamp envolve o momento no tempo pelo qual a consulta foi feita para definir a prioridade de resolução dela quando for necessário avaliar a concorrência.
O controle otimista é a possibilidade que alguns bancos têm de criar projeções da base de dados para cada comando em concorrência e avaliar o resultado final como um todo. Se houverem intersecções, o mecanismo é abortado, senão, as atualizações dos dados se referem a locais diferentes da base, podendo ser executado concorrentemente. Obviamente, este método é muito custoso computacionalmente.
Por fim, foi mostrado o control de concorrência multiversão do postgres, o MVCC. Sua idéia é versionar os objetivos internos responsáveis pela execução das consultas, afim de segmentar melhor as atividades de cada um. Neste ambiente, cada objeto tem a impressão de ter o banco de dados completo para si, evitando inconsistências causadas por outras consultas. É o chamado “database snapshot on transaction isolation”, pois o método ocorre acima da camada de isolamento das transações.
Outra vantagem do método é diminuir a quantidade de locks desnecessários e conflitantes. A maioria dos lock de leitura e escrita nos bancos de dados mais conhecidos, são mutuamente exclusivos, enquanto no postgres, eles podem ser tratados como duas classes diferente de solicitações e serem tratadas concorrentemente,
O versionamento traz a possibilidade de realizar rollbacks dentro de transações, permitindo voltar atrás em determinados códigos de consultas, caso a base de dados não esteja mais consistente entre um comando e outro, atualizado a versão do objeto em questão e executando os comandos da consulta novamente.
O palestrante comentou ainda sobre protocolos de bloquei e de soluções de deadlocks no postgres, e explicou como funcionam os níveis de isolamento no MVCC e como estão implementados no postgres.
Artigos Relacionados:
Sobre este artigo
You’re currently reading “Palestra no Sesol: Controle de Concorrência MultiVersão do PostgreSQL,” an entry on Hypercast
- Published:
- 06.08.07 / 7am
- Category:
- Desenvolvimento
No comments
Jump to comment form | comments rss [?] | trackback uri [?]