Transações em BD: ACID, Bloqueios e Concorrência

Classificado em Computação

Escrito em em português com um tamanho de 4,61 KB.

1. Propriedades das Transações (ACID)

As propriedades ACID garantem a confiabilidade das transações em um banco de dados. São elas:

  • Atomicidade: A transação é indivisível, ou seja, ou todas as suas operações são executadas com sucesso, ou nenhuma é executada (tudo ou nada).
  • Consistência: A transação deve levar o banco de dados de um estado válido para outro estado válido. A consistência pode ser violada temporariamente durante a transação, mas deve ser restaurada ao seu final.
  • Isolamento: As transações devem ser executadas de forma isolada, como se fossem a única transação em execução no sistema. Uma transação não deve sofrer interferência de outras transações concorrentes.
  • Durabilidade: Uma vez que a transação é confirmada (commit), as alterações feitas no banco de dados são permanentes e não podem ser perdidas, mesmo em caso de falha do sistema.

2. Bloqueios: Binário, Compartilhado e Exclusivo

Os bloqueios são mecanismos utilizados para controlar o acesso concorrente aos dados em um banco de dados. Existem diferentes tipos de bloqueios, cada um com suas características e finalidades:

  • Bloqueio Binário: Possui dois estados: bloqueado (1) e desbloqueado (0). É muito restritivo e não permite nem mesmo duas leituras simultâneas no mesmo item. Na prática, é pouco utilizado devido à sua restrição.
  • Bloqueio Compartilhado: Permite que várias transações acessem o mesmo item para leitura simultaneamente.
  • Bloqueio Exclusivo: Utilizado para operações de escrita. Quando um item está bloqueado exclusivamente, nenhuma outra transação pode acessá-lo, nem para leitura nem para escrita, até que o bloqueio seja liberado.

3. Separação de Locks e Unlocks

É necessário separar os bloqueios (locks) dos desbloqueios (unlocks) para garantir a integridade dos dados e evitar problemas de concorrência. A separação adequada permite que o sistema gerencie corretamente o acesso aos dados e mantenha a consistência do banco de dados.

4. Abordagens Roubada e Forçada

  • Roubada: Permite gravar os dados no disco antes mesmo do commit da transação. Isso pode melhorar o desempenho, mas aumenta o risco de ter que desfazer operações (rollback) em caso de falha.
  • Forçada: Força a gravação dos dados no disco no momento do commit da transação. Isso garante a durabilidade, mas pode reduzir o desempenho.

5. Nível de Isolamento e Controle de Concorrência

O nível de isolamento define o grau em que uma transação deve estar isolada das outras transações concorrentes. O controle de concorrência é o conjunto de mecanismos que garantem esse isolamento, evitando problemas como leitura suja e linhas fantasmas.

6. Leitura Suja e Linhas Fantasmas

  • Leitura Suja: Ocorre quando uma transação lê um item que foi escrito por outra transação, mas que ainda não foi confirmada (commit).
  • Linhas Fantasmas: Ocorre quando uma transação repete uma leitura e obtém um conjunto de linhas diferente do obtido na primeira leitura, devido a inserções ou exclusões realizadas por outras transações concorrentes.

7. Tipos de Execução: Serial, Não Serial e Serializável

  • Serial: As transações são executadas em série, uma após a outra. Isso garante o isolamento total, mas limita a concorrência.
  • Não Serial: As transações são executadas de forma intercalada, aumentando a concorrência, mas também aumentando o risco de interferência entre elas.
  • Serializável: As transações são executadas de forma intercalada (não serial), mas o resultado final é equivalente a uma execução serial. Isso permite concorrência e, ao mesmo tempo, garante o isolamento das transações.

8. Protocolo de Bloqueio de Duas Fases

O protocolo de bloqueio de duas fases é importante porque garante que as transações sejam serializáveis, permitindo um ambiente concorrente e mantendo o isolamento das transações. Quando esse protocolo é seguido, não é necessário verificar a serialização posteriormente.

9. Deadlock

Em caso de deadlock, o banco de dados deve abortar a transação que realizou menos atualizações, pois o rollback será mais rápido.

Entradas relacionadas: