Controle de Concorrência
• Um SGBD trabalha individualmente com uma transação, mas o grande desafio para sua consagração no mercado é sem dúvida a sua capacidade de tratar diversas transações simultaneamente.
• Multiprogramação - executar dois ou mais programas ao mesmo tempo.
• Multiprocessamento - sistema operacional que utiliza um computador multiprocessado e divide as tarefas para cada processador individualmente.
Controle de Concorrência
• O SGBD trabalha em conjunto com o Sistema Operacional para retirar a melhor performance possível na execução de transações concorrentes, garantindo inclusive a efetiva consistência de todas transações envolvidas.
• Um bom SGBD deve suportar e transacionar desde poucas transações ao mesmo tempo até dezenas e centenas de
transações simultaneamente.
• A sua capacidade de resolver os problemas que possam ocorrer durante as transações e a integridade que o mesmo garante, fazem com que o SGBD seja confiável.
Escalonamento ( schedules )
• Quando diversas transações são executadasconcorrentemente , a consistência do banco de dados pode ser destruída apesar de cada transação individual estar
correta.
• Escalonamento representa a ordem cronológica da execução de cada instrução.
• Uma transação de um programa deve sair de um estado consistente e levar o banco de dados a outro estado
consistente também.
Escalonamento
• Escalonamento Serial - consiste de uma seqüência de instruções de várias transações na qual as instruções pertencentes a uma única transação aparecem juntas naquele escalonamento.
• Vamos exemplificar com duas transações T0 e T1. • T0 - read A T1 - read A • A:=A-50 temp := A * 0.1 • write A A:=A-temp • read B write A • B:=B+50 read B • write B B:=B+temp • write B
Escalonamento
• T0 - read A 1000 • A:=A-50 950 • write A 950 • read B 2000 • B:=B+50 2050 • write B 2050 • T1 - read A 950 • temp:=A*0.1 • A:=A-temp 855 • write A 855 • read B 2050Escalonamento
• T1 - read A 1000 • temp:=A*0.1 • A:=A-temp 900 • write A 900 • read B 2000 • B:=B+temp 2100 • write B 2100 • T0 - read A 900 • A:=A-50 850 • write A 850 • read B 2100 • B:=B+50 2150 • write B 2150Escalonamento concorrente
• T0 - read A 1000 • A:=A-50 950 • write A 950 • T1 - read A 950 • temp:=A*0.1 • A:=A-temp 855 • write A 855 • read B 2000 • B:=B+50 2050 • write B 2050 • read B 2050Escalonamento
• Escalonamento Não Serial - consiste de uma seqüência de instruções de várias transações intercaladas entre si, o que pode provocar temporariamente um estado inconsistente. • Vamos exemplificar com duas transações T0 e T1.
• T0 - read A T1 - read A • A:=A-50 temp := A * 0.1 • write A A:=A-temp • read B write A • B:=B+50 read B • write B B:=B+temp • write B
Escalonamento
• T0 - read A 1000 • A:=A-50 950 • T1 - read A 1000 • temp:=A*0.1 • A:=A-temp 900 • write A 900 • read B 2000 • write A 950 • read B 2000 • B:=B+50 2050 • write B 2050Escalonamento
• Escalonamento de conflito serializável• X = read(A) Y = read(A) - a ordem não importa.
• X = read(A) Y = write(A) - se X vem antes de Y, então X não vai ler o valor que Y gravar, se Y vem antes de X, então X vai ler o valor de Y, a ordem é importante.
• X = write(A) Y = read(A) - a ordem é importante, pois é o mesmo raciocínio anterior.
• X = write(A) Y = write(A) - a ordem é importante, pois somente o último comando write é que vai prevalecer no final.
Protocolo baseado em bloqueios
• Um modo de assegurar a seriabilidade é requerer que oacesso aos itens de dados seja feito de uma maneira
mutuamente exclusiva; isto é, enquanto uma transação faz o acesso a um item de dado, nenhuma outra transação pode modificar aquele item.
• O método mais fácil de garantir isto, é fazer com que uma transação ao acessar um dado, mantenha um bloqueio
Protocolo baseado em bloqueios
• Bloqueios– Partilhado - se uma transação T obteve um bloqueio (lock) no modo partilhado (representado por P) no item Q, então T pode ler este item, mas não pode gravar Q. – Exclusivo - se uma transação T obteve um bloqueio
(lock) no modo exclusivo (representado por X) no item Q, então T pode ler e gravar Q.
• matriz de compatibilidade de bloqueios
• Partilhado eXclusivo
• Partilhado Verdadeiro Falso
Protocolo baseado em bloqueios
• O modo partilhado compartilha com outro modopartilhado e não com o exclusivo.
• Para representar um bloqueio partilhado utilizaremos a instrução lock-s(Q).
• Para representar um bloqueio exclusivo utilizaremos a instrução lock-x(Q).
• Para representar o desbloqueio utilizaremos a instrução unlock(Q).
Protocolo baseado em bloqueios
• Bloqueio de duas fases.– Fase de crescimento : uma transação pode obter bloqueios, mas não pode liberar nenhum bloqueio.
– Fase de encolhimento : uma transação libera bloqueios, mas não pode obter qualquer novo bloqueio.
• Inicialmente, uma transação está na fase de crescimento. Ela pode adquirir tantos bloqueios quantos forem
necessários. Uma vez que libere um bloqueio, a transação entra na fase de encolhimento e não pode mais bloquear nenhum dado, até que a transação termine. Só então ela pode começar uma outra transação com novos bloqueios.
Protocolo baseado em bloqueios
• Bloqueio baseado em grafos.
• O modelo mais simples requer que tenhamos o conhecimento anterior da ordem na qual os itens do banco de dados serão usados.
• A única instrução de bloqueio permitida é lock-x.
• O protocolo de bloqueio de árvore tem a vantagem sobre o protocolo de bloqueio de duas fase pois um desbloqueamento pode ocorrer mais cedo. Isso pode levar a menos tempo de espera e a um aumento na concorrência.
Protocolo baseado em bloqueios
• 1 - o primeiro bloqueio por T pode ser em qualquer itemde dado.
• 2 - subseqüentemente, um item de dado Q pode ser
bloqueado por T apenas se o pai de Q estiver atualmente bloqueado por T.
• 3 - itens de dados podem ser desbloqueados a qualquer momento.
• 4 - um item de dado que tenha sido bloqueado e
desbloqueado por T não pode ser subseqüentemente rebloqueado por T.
baseado em marcadores de tempo
• O método mais comum para fazer isso é usar o esquema deordenação por marcadores de tempo (timestamp ordering). • Dois métodos para implementar :
• Usar o valor do relógio do sistema como marcador de tempo; isto é, um marcador de tempo de uma transação equivalente ao valor marcado pelo relógio quando a transação entrar no sistema.
• Usar um contador lógico que seja incrementado depois que um novo marcador de tempo for atribuído; isto é um
baseado em marcadores de tempo
• W-timestamp (Q), que representa o maior marcador detempo de qualquer transação que executou write(Q) com sucesso.
• R-timestamp (Q), que representa o maior marcador de tempo de qualquer transação que executou read(Q) com sucesso.
• Esses marcadores de tempo são atualizados toda vez que uma nova instrução read(Q) ou write(Q) for executada.
Técnicas de validação
• Um esquema de controle de concorrência impõe algumas sobrecargas de execução de códigos e possíveis atrasos de transações.
• Pode ser desejável utilizar um esquema alternativo que imponha menos sobrecarga.
• Uma dificuldade em reduzir a sobrecarga é que não
sabemos previamente quais transações estarão envolvidas num conflito.
• Para tanto, precisamos fornecer um esquema para monitorar o sistema.
Técnicas de validação
• Fase de leitura - ocorre a execução da transação T, os vários dados são lidos, armazenados e gravados em
variáveis temporariamente. Todas as operações write são executadas em variáveis locais, sem atualizar o bd.
• Fase de validação - a transação T executa um teste de
validação para determinar se ela pode copiar para o banco de dados as variáveis locais temporárias que mantêm os resultados das operações write sem causar uma violação da seriabilidade.
• Fase de gravação - se a transação T obtém sucesso na validação (passo 2), então as atualizações são feitas no banco de dados. De outra forma, T é desfeita.
Granularidade múltipla
• Existem situações onde o bloqueio de todos os registros de uma tabela seria importante para garantir o sucesso de uma atualização total. Assim para uma sincronização da
transação necessitamos de uma forma de bloquear todos os registros de uma só vez.
• Esta situação chamamos de granularidade múltipla ou lock de estrutura.
• Este recurso ajuda no bloqueio dos registros, mas não
permite que nenhuma outra transação ocorra com nenhum registro desta tabela enquanto a mesma não encerrar.