segunda-feira, 21 de julho de 2014

Leia um pouco sobre Controle de concorrência de banco de dados!

Controle de concorrência de banco de dados



Controle de concorrência
Um SGBD trabalha individualmente com uma transação muito bem, mas o grande desafio para a sua consagração no mercado é sem dúvida a sua capacidade de tratar diversas transações simultaneamente.
Hoje em dia é muito comum e fácil o acesso a computadores com vários processadores ou então com processadores com vários núcleos, a esta característica chamamos de multiprocessador.
Existe também o multiprocessamento, que é a capacidade do sistema operacional executar mais de um programa ao mesmo tempo.
Isto pode ocorrer com um computador com um único processador, neste caso o processador acaba realizando o processamento em paralelo de diversos programas ao simultaneamente.
Se colocarmos mais processadores, ele vai distribuir as tarefas passando rotinas de processamento para cada processador, de modo independente.
E se apenas um programa estiver sendo executado, apenas um processador é utilizado, os demais ficam ociosos.
Mas existem sistemas operacionais mais inteligentes, que aproveitam a capacidade de multiprocessadores dos computadores e realizam uma melhor distribuição de carga de processamento.
Se apenas um programa estiver executando no servidor, o sistema operacional divide as tarefas deste programa entre os diversos processadores do servidor, otimizando assim a carga sobre um único processador e distribuindo entre os vários processadores, acelerando em muito a conclusão do processo.
Este tipo de sistema operacional é conhecido como multiprocessamento simétrico ou SMP, onde é realizado o balanceamento de carga.
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 as 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 executadas concorrentemente, a consistência do banco de dados pode ser destruída apesar de cada transação individual estar correta.
Podemos afirmar que o escalonamento representa a ordem cronológica da execução de cada instrução no banco de dados.
Uma transação de um programa deve sair de um estado consistente e levar o banco de dados para outro estado consistente também.
Surge então o conceito de seriabilidade, ou seja, o escalonamento das execuções.

Escalonamento serial
Um 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.
A ordem das transações afeta diretamente o resultado final.

Escalonamento não serial
Um 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.
Podemos concluir que o escalonamento não serial pode comprometer a consistência do banco de dados e causar transtornos enormes.

Por uma questão óbvia o escalonamento não serial não é permitido nos SGBDs comerciais mais famosos.

Protocolo baseado em bloqueios
Um modo de assegurar a seriabilidade é requerer que o acesso 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 neste dado até o término da sua transação.

Formas de bloqueio
Bloqueio partilhado – se uma transação T obteve um bloqueio (lock) no modo partilhado (representado por P) no item de dado A, então T pode ler este item A mas não pode gravar A.
Bloqueio exclusivo – se uma transação T obteve um bloqueio (lock) no modo exclusivo (representado por X) no item de dado A, então T pode ler este item A e somente T poderá gravar A.
Bloqueio de duas fases – nesta forma de bloqueio, o protocolo divide-se em:
  • Fase de crescimento – uma transação pode obter bloqueios, mas não pode liberar nenhum dos bloqueios feitos.
  • Fase de encolhimento – uma transação libera um dos bloqueios, mas não pode obter nenhum outro bloqueio até concluir a transação atual.
Inicialmente, uma transação está na fase de crescimento, obtendo quanto bloqueios forem necessários para a sua transação. Uma vez que libere um bloqueio, a transação entrará na fase de encolhimento e não pode mais bloquear nenhum outro dado, até que a transação atual termine. Só então ela poderá começar outra transação com novos bloqueios.
Bloqueio baseado em grafos – nesta técnica, o modelo mais simples requer que tenhamos o conhecimento anterior da ordem na qual os itens do banco de dados serão utilizados, a única instrução permitida é o lock-x (modo exclusivo).
Os bloqueios são realizados utilizando a árvore de acesso aos dados. Muitos dados desnecessários são bloqueados e pode comprometer outras transações.
É um protocolo livre de deadlock, porém bloqueia muitos dados desnecessários para a transação.
Bloqueio baseado em marcador de tempo – o método mais comum para fazer isso é utilizar o esquema de ordenação por marcadores de tempo, criando duas variáveis w-timestamp(A) e r-timestamp (A).
Estas variáveis contêm os marcadores de tempo lógico do sistema para identificar nas transações quem chegou primeiro e quem chegou depois no dado.
Os marcadores de tempo são atualizados toda vez que uma instrução read ou write for executada.



Nenhum comentário:

Postar um comentário