Capítulo 12. Controle de simultaneidade

Sumário
12.1. Introdução
12.2. Isolamento da transação
12.2.1. Nível de isolamento Read Committed
12.2.2. Nível de isolamento serializável
12.3. Bloqueio explícito
12.3.1. Bloqueios no nível de tabela
12.3.2. Bloqueios no nível de linha
12.3.3. Impasses
12.4. Verificação da consistência dos dados no nível do aplicativo
12.5. Bloqueio e índices

Este capítulo descreve o comportamento do sistema de gerenciamento de banco de dados PostgreSQL quando duas ou mais sessões tentam acessar os mesmos dados ao mesmo tempo. O objetivo nesta situação é permitir acesso eficiente para todas as sessões mantendo, ao mesmo tempo, uma rigorosa integridade dos dados. Todos os desenvolvedores de aplicativos de banco de dados devem estar familiarizados com os tópicos cobertos por este capítulo.

12.1. Introdução

Diferentemente dos sistemas gerenciadores de banco de dados tradicionais, que usam bloqueios para controlar a simultaneidade, o PostgreSQL mantém a consistência dos dados utilizando o modelo multiversão (Multiversion Concurrency Control, MVCC). Isto significa que, ao consultar o banco de dados cada transação enxerga um instantâneo (snapshot) dos dados (uma versão do banco de dados) como estes eram há um tempo atrás, sem levar em consideração o estado corrente dos dados subjacentes. Este modelo protege a transação contra enxergar dados inconsistentes, o que poderia ser causado por atualizações feitas por transações simultâneas nas mesmas linhas de dados, fornecendo um isolamento da transação para cada sessão do banco de dados.

A principal vantagem de utilizar o modelo de controle de simultaneidade MVCC em vez de bloqueios é que, no MVCC os bloqueios obtidos para consultar dados (leitura) não conflitam com os bloqueios obtidos para escrever dados e, portanto, a leitura nunca bloqueia a escrita, e a escrita nunca bloqueia a leitura.

Também estão disponíveis no PostgreSQL as funcionalidades de bloqueio no nível de tabela e de linha, para aplicativos que não podem se adaptar facilmente ao comportamento MVCC. Entretanto, a utilização apropriada do MVCC geralmente produz um desempenho melhor que os bloqueios.

SourceForge.net Logo CSS válido!