Bancos de Dados - Aula 25 - Controle de concorrência – Parte I
Controlador de Concorrência em SGBD
Introdução ao Controlador de Concorrência
- O controlador de concorrência é um módulo interno do SGBD que assegura a propriedade de isolamento das transações, fundamental para o funcionamento correto do sistema.
- A propriedade de isolamento garante que uma transação execute e obtenha resultados independentemente da execução simultânea de outras transações.
Funcionamento do Controlador de Concorrência
- O controlador implementa procedimentos que controlam como as operações das transações são intercaladas durante a execução concorrente.
- O resultado final das execuções deve ser equivalente ao que seria obtido com uma execução serial das mesmas transações.
Protocolos Utilizados
- Para garantir o isolamento, os SGBDs utilizam protocolos, sendo o protocolo baseado em bloqueio um dos mais básicos e importantes.
- As transações devem solicitar bloqueios nos dados antes de acessá-los; somente assim podem realizar leituras ou gravações.
Tipos de Bloqueios
- Existem dois tipos principais de bloqueios: compartilhado e exclusivo.
- Bloqueio Compartilhado: Permite leitura por várias transações simultaneamente, mas não permite alterações.
- Bloqueio Exclusivo: Permite tanto leitura quanto escrita, sendo restrito a uma única transação por vez.
Compatibilidade entre Bloqueios
- A compatibilidade entre bloqueios é crucial; apenas bloqueios compartilhados podem coexistir sobre o mesmo dado.
- Se uma transação possui um bloqueio exclusivo sobre um item, nenhuma outra pode obter um bloqueio compartilhado nesse mesmo item até que o primeiro seja liberado.
Exemplificação Prática
Gerenciamento de Transações e Bloqueios
Solicitação e Concessão de Bloqueios
- As transações devem solicitar o bloqueio necessário para realizar operações, e o sistema deve garantir esse bloqueio antes da execução.
- Um exemplo é dado onde uma transação solicita um bloqueio compartilhado, que é concedido, permitindo a execução de suas operações.
Execução Concorrente
- A execução intercalada de duas transações pode ser realizável, gerando dados consistentes semelhantes a uma execução serial.
- O conceito de "execução serializável" é introduzido, onde as transações podem ser executadas em qualquer ordem sem afetar os resultados finais.
Fases do Protocolo de Bloqueio
- As transações solicitam bloqueios conforme necessário, mas liberam apenas ao final das operações.
- Uma situação ocorre quando uma transação está impedida devido à necessidade de um bloqueio que outra transação ainda não liberou.
Situação de Impasse
- Um impasse acontece quando duas transações estão esperando uma pela outra para liberar os dados necessários para continuar sua execução.
- É crucial ter um protocolo que trate essas situações para evitar que as transações fiquem suspensas indefinidamente.
Protocolo de Bloqueio em Duas Fases
- O protocolo estudado não impede impasses, mas garante que todas as execuções concorrentes sejam equivalentes a execuções seriais.
- Este protocolo possui duas fases: expansão (onde se pode solicitar bloqueios sem liberar nenhum) e encolhimento (onde se pode liberar bloqueios sem solicitar novos).
Exemplo Prático do Protocolo
- No exemplo prático, as transações seguem o protocolo em duas fases: primeiro solicitam os bloqueios e depois os liberam.
Bloqueio e Execução de Transações
Funcionamento do Bloqueio Exclusivo e Compartilhado
- A transação 1 solicita um bloqueio exclusivo no dado B, mas sua execução é suspensa momentaneamente devido à intercalacão de uma operação da transação 2.
- A transação 2 tenta obter um bloqueio compartilhado em B, mas não consegue porque o dado está travado para escrita pela transação 1.
- O sistema permite que a transação 1 continue enquanto a transação 2 permanece em espera, aguardando o desbloqueio do dado B.
Desbloqueio e Continuação das Transações
- Quando a transação 1 destrava o dado B, a transação 2 pode solicitar novamente o bloqueio compartilhado e obtê-lo com sucesso.
- Durante sua execução, a transação 2 lê dados e realiza operações sem interferir na execução da transação 1, que também utiliza o dado A simultaneamente.
Reflexões sobre Protocolos de Bloqueio
- Ambas as transações utilizam bloqueios compartilhados, permitindo execuções simultâneas sem conflitos nos dados lidos.
- É proposto um exercício para refletir sobre qual seria a execução serial equivalente à concorrente apresentada nas transações discutidas.
Protocolos de Bloqueio Avançados
- Existem protocolos avançados como o protocolo de bloqueio em duas fases rigoroso e outros que permitem upgrade/downgrade das travas; no entanto, o foco será no protocolo básico de duas fases.
- O estudo do protocolo de granularidade múltipla é sugerido como uma área interessante para aprofundamento.
Controle de Concorrência nas Transações
- O controlador de concorrência gerencia automaticamente os bloqueios para as transações, garantindo integridade nos dados durante acessos simultâneos.
- Programadores podem solicitar explicitamente tipos específicos de bloqueios; isso deve ser feito com cautela para evitar inconsistências nos dados devido à concorrência.
Conclusão e Próximos Passos