Controle de Concorrência em SGBD: Protocolos de Bloqueio e Baseados em Timestamp
⚡ Resumo Inteligente
O controle de concorrência em um SGBD gerencia transações simultâneas para que sejam executadas com precisão, sem violar a integridade dos dados. Ele previne anomalias como atualizações perdidas e leituras sujas, utilizando protocolos baseados em bloqueio, em duas fases, em carimbos de data/hora e em validação, que garantem resultados serializáveis.

O que é controle de simultaneidade?
Controle de simultaneidade Em um Sistema de Gerenciamento de Banco de Dados, um procedimento para gerenciar operações simultâneas sem conflitos entre elas é o gerenciamento de transações. Ele garante que as transações do banco de dados sejam executadas de forma concorrente e precisa, produzindo resultados corretos sem violar a integridade dos dados do respectivo banco de dados.
O acesso simultâneo é bastante fácil se todos os usuários estiverem apenas lendo dados, pois não há como interferirem uns nos outros. No entanto, qualquer banco de dados prático possui uma combinação de operações de LEITURA e ESCRITA, e, portanto, a simultaneidade se torna um desafio.
O controle de concorrência em um SGBD é usado para lidar com esses conflitos, que ocorrem principalmente em sistemas multiusuário. Portanto, o controle de concorrência é um dos elementos mais importantes para o bom funcionamento de um banco de dados quando duas ou mais transações são executadas simultaneamente e exigem acesso aos mesmos dados. Ele trabalha em conjunto com gerenciamento de transações, que define as unidades de trabalho que o controle de concorrência deve intercalar com segurança.
Problemas potenciais de concorrência
Aqui estão alguns problemas que você provavelmente enfrentará sem um controle de concorrência adequado no SGBD:
- Atualizações perdidas Isso ocorre quando várias transações selecionam a mesma linha e a atualizam com base no valor selecionado.
- Dependência não comprometida (Leitura suja) ocorre quando uma segunda transação seleciona uma linha que foi atualizada por outra transação que ainda não foi confirmada.
- Leitura não repetível Ocorre quando uma segunda transação acessa a mesma linha várias vezes e lê dados diferentes a cada vez.
- Resumo incorreto Ocorre quando uma transação calcula o resumo do valor de todas as instâncias de um item de dados repetido enquanto uma segunda transação atualiza algumas dessas instâncias. O resumo resultante não reflete um resultado correto.
Por que usar um método de concorrência?
Motivos para usar um método de controle de concorrência em um SGBD:
- Aplicar o isolamento por meio da exclusão mútua entre transações conflitantes.
- Para resolver problemas de conflito de leitura/escrita e de escrita/escrita.
- Para preservar a consistência do banco de dados, aplicando constantemente restrições de execução.
- Para controlar a interação entre transações simultâneas, utiliza-se um sistema de controle de concorrência.
- Para ajudar a garantir a serialização.
Exemplo
Suponha que duas pessoas vão a quiosques eletrônicos ao mesmo tempo para comprar ingressos para o mesmo filme e para a mesma sessão.
No entanto, só resta um lugar para essa sessão no cinema. Sem o controle de concorrência, é possível que ambos os espectadores acabem comprando um ingresso. O controle de concorrência não permite isso. Ambos os espectadores ainda podem acessar as informações no banco de dados de assentos do cinema, mas o controle de concorrência fornece um ingresso apenas para o comprador que concluir o processo de transação primeiro.
Protocolos de controle de simultaneidade
Diferentes protocolos de controle de concorrência oferecem diferentes equilíbrios entre a quantidade de concorrência permitida e a sobrecarga imposta. As principais técnicas de controle de concorrência em SGBDs são:
- Protocolos baseados em bloqueio
- Protocolo de Bloqueio de Duas Fases
- Protocolos baseados em carimbo de data/hora
- Protocolos baseados em validação
Cada um será analisado em detalhes a seguir, começando pelos protocolos baseados em fechaduras, que são os mais utilizados.
Protocolos baseados em bloqueio
Protocolos baseados em fechaduras Em SGBDs (Sistemas de Gerenciamento de Banco de Dados), os bloqueios são um mecanismo no qual uma transação não pode ler ou gravar um item de dados até adquirir um bloqueio apropriado. Os protocolos baseados em bloqueio ajudam a eliminar o problema de concorrência, bloqueando ou isolando um item de dados específico para uma única transação.
Um bloqueio é uma variável de dados associada a um item de dados que indica quais operações podem ser realizadas sobre ele. Os bloqueios ajudam a sincronizar o acesso a itens do banco de dados por transações simultâneas. Todas as solicitações de bloqueio são feitas ao gerenciador de controle de concorrência, e as transações prosseguem somente após a solicitação de bloqueio ser concedida.
Bloqueios binários: Um bloqueio binário em um item de dados pode estar em um estado bloqueado ou desbloqueado.
Compartilhado/Exclusivo: Esse mecanismo de bloqueio separa os bloqueios com base em seu uso. Se um bloqueio for adquirido para realizar uma operação de escrita, ele é chamado de bloqueio exclusivo.
1. Bloqueio Compartilhado (S): Um bloqueio compartilhado também é chamado de bloqueio somente leitura. Com um bloqueio compartilhado, o item de dados pode ser compartilhado entre transações, pois nenhuma delas tem permissão para atualizá-lo. Por exemplo, se duas transações estiverem lendo o saldo da conta de uma pessoa, a transação que está lendo o saldo da conta de uma pessoa poderá usar um bloqueio compartilhado. banco de dados Permite que leiam através da criação de um bloqueio compartilhado. Se outra transação tentar atualizar esse saldo, o bloqueio compartilhado a impede até que a leitura seja concluída.
2. Bloqueio Exclusivo (X): Com um bloqueio exclusivo, um item de dados pode ser lido e gravado. Ele é exclusivo e não pode ser mantido simultaneamente no mesmo item de dados. Um bloqueio X é solicitado usando a instrução `lock-x`. Por exemplo, quando uma transação precisa atualizar o saldo de uma conta, isso é permitido ao se aplicar um bloqueio X; uma segunda transação que tente ler ou gravar o mesmo item é então impedida.
3. Protocolo de bloqueio simplificado: Isso permite que as transações obtenham um bloqueio em cada objeto antes de iniciar uma operação. As transações podem desbloquear o item de dados após a conclusão da operação de gravação.
4. Bloqueio prévio: Este protocolo avalia as operações e cria uma lista dos itens de dados necessários para iniciar a execução. Quando todos os bloqueios são concedidos, a transação é executada e todos os bloqueios são liberados assim que suas operações são concluídas.
Inanição: A inanição ocorre quando uma transação espera indefinidamente para adquirir um bloqueio. As razões para isso incluem um esquema de espera mal gerenciado para itens bloqueados, um vazamento de recursos ou a mesma transação sendo selecionada repetidamente como vítima.
Impasse: O termo deadlock refere-se a uma situação em que dois ou mais processos esperam que um ao outro libere um recurso, formando uma cadeia circular.
Protocolo de Bloqueio de Duas Fases (2PL)
O Protocolo de Bloqueio de Duas Fases, também conhecido como 2PL, é um método de controle de concorrência que garante a serializabilidade aplicando um bloqueio aos dados da transação, o que impede que outras transações acessem os mesmos dados simultaneamente.
O protocolo de bloqueio em duas fases permite que cada transação faça uma solicitação de bloqueio ou desbloqueio em duas etapas:
- Fase de crescimento: Nessa fase, uma transação pode obter bloqueios, mas não pode liberar nenhum bloqueio.
- Fase de Encolhimento: Nessa fase, uma transação pode liberar bloqueios, mas não pode obter nenhum novo bloqueio.
É verdade que o protocolo 2PL oferece serializabilidade. No entanto, isso não garante que impasses (deadlocks) não ocorram. No diagrama acima, detectores de impasse locais e globais procuram por impasses e os resolvem retomando as transações aos seus estados iniciais.
Método estrito de bloqueio bifásico
O 2PL estrito é quase idêntico ao 2PL. A única diferença é que o 2PL estrito nunca libera um bloqueio após utilizá-lo. Ele mantém todos os bloqueios até o ponto de confirmação e os libera todos de uma vez quando o processo termina.
2PL centralizado
Em um modelo 2PL centralizado, um único site é responsável pelo processo de gerenciamento de bloqueios. Ele possui apenas um gerenciador de bloqueios para todo o SGBD.
Cópia Primária 2PL
No mecanismo 2PL de Cópia Primária, vários gerenciadores de bloqueio são distribuídos em diferentes sites, e um gerenciador de bloqueio específico é responsável por gerenciar o bloqueio de um conjunto de itens de dados. Quando a cópia primária é atualizada, a alteração é propagada para os servidores escravos.
2PL distribuído
Nesse mecanismo, os gerenciadores de bloqueio são distribuídos para todos os sites e são responsáveis por gerenciar os bloqueios de dados em cada site. Se nenhum dado for replicado, o comportamento é equivalente ao 2PL de Cópia Primária. Os custos de comunicação do 2PL Distribuído são consideravelmente maiores do que os do 2PL de Cópia Primária.
Protocolos baseados em carimbo de data/hora
O Protocolo baseado em carimbo de data/hora Em um SGBD (Sistema de Gerenciamento de Banco de Dados), um algoritmo que utiliza o tempo do sistema ou um contador lógico como um carimbo de data/hora para serializar a execução de transações concorrentes. Ele garante que todas as operações de leitura e escrita conflitantes sejam executadas na ordem do carimbo de data/hora.
Neste método, a transação mais antiga sempre tem prioridade. Ele usa o tempo do sistema para determinar o carimbo de data/hora da transação e é o protocolo de concorrência mais comumente usado. Protocolos baseados em bloqueio gerenciam a ordem entre transações conflitantes quando elas são executadas; protocolos baseados em carimbo de data/hora gerenciam conflitos assim que uma operação é criada.
Exemplo:
Suppose there are three transactions T1, T2, and T3. T1 has entered the system at time 0010 T2 has entered the system at 0020 T3 has entered the system at 0030 Priority will be given to transaction T1, then T2 and lastly T3.
Vantagens:
- Os cronogramas são serializáveis, assim como os protocolos 2PL.
- Não é necessário esperar pela transação, o que elimina a possibilidade de impasses.
Desvantagens: A inanição é possível se a mesma transação for reiniciada e abortada continuamente.
Protocolo baseado em validação
O Protocolo baseado em validação Em SGBDs, também conhecido como técnica de controle de concorrência otimista, é um método para evitar conflitos de concorrência em transações. Nesse protocolo, cópias locais dos dados da transação são atualizadas em vez dos próprios dados, o que resulta em menos interferência durante a execução.
O protocolo baseado em validação é realizado em três fases:
- Fase de leitura
- Fase de validação
- Fase de gravação
Fase de leitura
Na fase de leitura, os valores dos dados podem ser lidos por uma transação, mas as operações de gravação ou atualizações são aplicadas apenas às cópias locais dos dados, e não ao banco de dados propriamente dito.
Fase de validação
Na fase de validação, os dados são verificados para garantir que a aplicação das atualizações não viole a serializabilidade.
Fase de gravação
Na fase de escrita, as atualizações são aplicadas ao banco de dados se a validação for bem-sucedida; caso contrário, as atualizações são descartadas e a transação é revertida.
Comparação de Protocolos de Controle de Concorrência
As quatro famílias de protocolos fazem apostas diferentes sobre a frequência com que as transações realmente entram em conflito. A tabela abaixo resume onde cada uma se encaixa.
| Protocolo | Abordagem | Deadlock | Melhor quando |
|---|---|---|---|
| Baseado em fechadura | Pessimista, tranca antes do acesso. | Possiveis | Os conflitos são frequentes. |
| Bloqueio de duas fases | Fases pessimista, de crescimento e de retração. | Possiveis | É necessário ser serializável. |
| Baseado em carimbo de data/hora | Pedidos por data e hora | Sem impasse | Fazer o pedido é importante, esperar custa caro. |
| Baseado em Validação | Otimista, valide antes de escrever. | Sem impasse | Conflitos são raros. |
Em resumo, os protocolos baseados em bloqueio e 2PL partem do pressuposto de que o conflito é comum e o previnem antecipadamente, enquanto os protocolos de carimbo de data/hora e validação partem do pressuposto de que o conflito é raro e o resolvem apenas quando ele ocorre.
Características de um bom protocolo de concorrência
Um mecanismo ideal de controle de concorrência tem os seguintes objetivos:
- Deve ser resistente a falhas no local e nas comunicações.
- Ele permite a execução paralela de transações para atingir a máxima simultaneidade.
- Seus mecanismos de armazenamento e métodos computacionais devem ser modestos para minimizar a sobrecarga.
- É necessário impor algumas restrições à estrutura das ações atômicas das transações.

