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.

  • 👥 Objetivo principal: O controle de concorrência permite que várias transações acessem dados compartilhados simultaneamente, mantendo a concorrência.ping O banco de dados é consistente.
  • ⚠️ Anomalias prevenidas: Atualização perdida, leitura incorreta, leitura não repetível e resumo incorreto são os quatro problemas que ele impede.
  • 🔒 Baseado em fechadura: Os bloqueios compartilhados e exclusivos controlam se um item de dados pode ser lido ou gravado por outros.
  • 🔁 Bloqueio em duas fases: Uma fase de crescimento adquire bloqueios e uma fase de redução os libera, o que garante a serializabilidade.
  • ⏱️ Baseado em carimbo de data/hora: Transações mais antigas têm prioridade, ordenando operações conflitantes por um registro de data e hora do sistema.
  • Baseado em Validação: O controle otimista funciona em cópias locais, validando apenas antes da fase de escrita.
  • 🎯 Objetivo: Máxima simultaneidade com sobrecarga mínima, resiliente a falhas de site e de comunicação.

Agendadores de bloqueio e carimbo de data/hora em SGBD

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.

Bloqueio de duas fases: fases de crescimento e de contração.

É 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:

  1. Fase de leitura
  2. Fase de validação
  3. 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.

Perguntas Frequentes

Um bloqueio compartilhado permite leituras simultâneas, mas não gravações, portanto, várias transações podem mantê-lo. Um bloqueio exclusivo permite leitura e gravação e não pode ser compartilhado, portanto, apenas uma transação o mantém.

O protocolo 2PL não garante a serializabilidade, mas não a ausência de impasses. Duas transações ainda podem depender dos bloqueios uma da outra, portanto, um mecanismo separado de detecção ou de tempo limite ainda é necessário.

Quando os conflitos são raros, o controle baseado em validação evita a sobrecarga de bloqueios e permite que as transações sejam executadas livremente, verificando apenas no momento do commit. Sob alta contenção, ele desperdiça trabalho com rollbacks frequentes.

A IA estuda cargas de trabalho passadas para prever quais transações entrarão em conflito e, em seguida, recomenda um nível de isolamento ou granularidade de bloqueio que aumenta a taxa de transferência, mantendo a integridade dos dados.ping resultados serializáveis.

Isso nunca faz uma transação esperar. Uma operação conflitante é permitida pela ordem do carimbo de data/hora ou a transação é abortada e reiniciada, portanto, nenhuma espera circular pode se formar e nenhum impasse pode ocorrer.

Resuma esta postagem com: