Bancos de Dados - Aula 26 - Controle de concorrência – Parte II
Introdução ao Controle de Concorrência em Bancos de Dados
Conceitos Iniciais
- A professora Sara introduz a disciplina de bancos de dados, focando no controle de concorrência e no protocolo de bloqueio em duas fases.
- O protocolo mencionado não garante a ausência de impasses (deadlocks), que é o foco da aula.
Problemas com Deadlocks
- Define-se um deadlock como uma situação onde um conjunto de transações está esperando umas pelas outras, criando um ciclo sem fim.
- Exemplo prático: Transação 1 espera pela 2, que espera pela 3, que por sua vez espera pela 1, resultando em um impasse.
Métodos para Tratar Deadlocks
Prevenção e Detecção
- Existem dois métodos principais para lidar com deadlocks: prevenção e detecção/recovery.
- O método de prevenção evita que o sistema entre em estado de deadlock desde o início, sendo mais eficaz quando a probabilidade desse problema é alta.
Abordagens para Prevenção
- A primeira abordagem exige que todas as transações obtenham todos os bloqueios necessários antes da execução. Isso previne deadlocks mas reduz a concorrência.
- Embora essa abordagem evite deadlocks, ela pode diminuir a eficiência do sistema devido à espera prolongada por recursos.
Abordagem Alternativa na Prevenção
Reversão e Selo de Tempo
- Uma segunda abordagem permite maior concorrência ao reverter transações se necessário. Se uma transação precisa ceder seu bloqueio, ela é revertida.
- Cada transação recebe um "timestamp" ou selo temporal no momento da execução. Se revertida, mantém esse timestamp original para futuras execuções.
Considerações Finais sobre Conflitos
Mecanismos de Espera e Morte em Transações
Protocólos de Espera e Morte
- O conceito de "esperar morrer" é introduzido, onde transações competem por dados. Se uma transação mais velha (tj) está bloqueando um dado que uma transação mais nova (tiê) deseja, a tiê pode ser desfeita.
- Se a transação tiê for mais nova do que tj, ela não poderá esperar e será eliminada do sistema. Isso garante que as transações mais velhas tenham prioridade.
- As transações no sistema operam de forma concorrente, solicitando e liberando travas. A regra principal é que as transações mais velhas podem esperar enquanto as novas são descartadas se tentarem acessar dados bloqueados.
Exemplos Práticos
- Um exemplo prático é apresentado com três transações (t2, t3 e t4). A t2 entra primeiro no sistema, seguida por t3 e depois t4. Se a t4 tentar acessar um dado mantido pela t3, ela será eliminada.
- Quando uma transação é eliminada, suas operações devem ser revertidas. Ao retornar ao sistema, ela terá um timestamp antigo e poderá ter prioridade novamente.
Esquema Alternativo: Esperar
- No esquema "esperar", se tiê solicitar um dado mantido por tj e for mais nova, ela espera; se for mais velha, elimina tj para continuar sua execução.
- Este método inverte a prioridade: agora as novas esperam enquanto as velhas têm o poder de eliminar.
Detecção de Deadlocks
- Uma segunda abordagem para gerenciar deadlocks envolve um procedimento que analisa periodicamente o estado do sistema para detectar impasses.
- O mecanismo recupera informações sobre a alocação atual dos itens de dados pelas transações ativas no sistema.
Algoritmos de Detecção
- Para implementar algoritmos que detectam deadlocks, utiliza-se conceitos gráficos onde cada aresta representa uma relação entre duas transações (uma esperando pela outra).
- Um exemplo simples ilustra como várias transações podem estar interligadas em um ciclo de espera mútuo.
Cenário Ilustrativo
- No gráfico apresentado, várias transações estão esperando umas pelas outras. Por exemplo, a t1 está aguardando a liberação da trava da t2 enquanto outras também estão interconectadas nesse ciclo.
Controle de Concorrência e Recuperação de Transações
Problemas de Impasse nas Transações
- A transação T4 não consegue ser executada devido a um ciclo de espera entre as transações, onde T2 aguarda por P4, P4 aguarda por T3, e assim por diante, resultando em um impasse.
- O sistema entra em um estado travado e é necessário implementar ações de recuperação para resolver essa situação.
Estratégias de Recuperação
- Uma das estratégias é "matar" uma transação, liberando suas travas para que outras possam prosseguir. Essa decisão deve considerar o custo mínimo para o sistema.
- É importante avaliar qual transação pode ser removida sem causar grandes danos ao sistema ou aos resultados esperados pelas outras transações.
Considerações sobre Transações Atômicas
- As transações devem ser atômicas; se forem revertidas, tudo que foi feito até aquele ponto precisa ser desfeito.
- Em vez de matar completamente uma transação, pode-se reverter apenas até o momento em que ela obteve a trava, permitindo que continue aguardando sem perder todo seu progresso.
Evitando Inanição
- Deve-se evitar situações onde uma transação é escolhida repetidamente como vítima para morrer (inanição), garantindo que isso ocorra apenas um número finito de vezes.
Controle de Concorrência e Isolamento
- O controle de concorrência deve garantir condições adequadas para a implementação do recuperador de falhas e escalonamentos recuperáveis.
- É crucial evitar cascatas durante a reversão das transações; se uma transação revertida afetou outra já executada, esta também precisará ser revertida.
Níveis de Isolamento
- Os níveis de isolamento são fundamentais no controle da concorrência. Existem diferentes níveis que garantem consistências variadas: forte ou fraca.
- O nível mais seguro é o serializado, que evita problemas como leitura suja e leitura fantasma. Cada tecnologia implementa seus próprios níveis permitidos.
Conclusão da Aula