Travamento em duas fasesEditar

De acordo com o protocolo de travamento em duas fases, uma transação lida com suas travas em duas fases distintas e consecutivas durante a execução da transação:

  1. Fase de expansão (também conhecida como fase de crescimento): as travas são adquiridas e nenhuma trava é liberada (o número de travas só pode aumentar).
  2. Fase de contração (aka Fase de contratação): as fechaduras são adquiridas e nenhuma fechadura é adquirida.

As duas regras de bloqueio de fase podem ser resumidas como: nunca adquirir uma fechadura depois de uma fechadura ter sido liberada. A propriedade de serialização é garantida para uma programação com transações que obedecem a esta regra.

Tipicamente, sem conhecimento explícito em uma transação no final da fase 1, ela é determinada com segurança somente quando uma transação tiver concluído o processamento e solicitado o commit. Neste caso, todos os bloqueios podem ser liberados de uma vez (fase 2).

Bloqueio conservador bifásicoEditar

A diferença entre 2PL e C2PL é que as transações de C2PL obtêm todos os bloqueios necessários antes que as transações comecem. Isto é para garantir que uma transação que já possui alguns cadeados não irá bloquear a espera de outros cadeados. Conservative 2PL previne bloqueios.

Strict two-phase lockingEdit

Para cumprir com o protocolo S2PL, uma transação precisa cumprir com a 2PL, e liberar seus bloqueios de escrita (exclusivos) somente após ter terminado, ou seja, ser comprometida ou abortada. Por outro lado, os bloqueios de leitura (compartilhados) são liberados regularmente durante a fase 2. Este protocolo não é apropriado em árvores B porque causa gargalo (enquanto as árvores B sempre começam a procurar a partir da raiz pai).

Bloqueio estrito estrito bifásico forteEditar

ou Rigor, ou Rigoroso agendamento, ou Rigoroso bloqueio bifásico

Para cumprir com o bloqueio estrito bifásico forte (SS2PL) o protocolo de bloqueio libera tanto os bloqueios de escrita (exclusivo) quanto os de leitura (compartilhado) aplicados por uma transação somente depois que a transação tiver terminado, ou seja somente após a execução completa (estar pronta) e o compromisso ou o aborto. Este protocolo também está de acordo com as regras S2PL. Uma transação obedecendo SS2PL pode ser vista como tendo a fase 1 que dura toda a duração da execução da transação, e nenhuma fase 2 (ou uma fase 2 degenerada). Assim, apenas uma fase é realmente deixada, e “duas fases” no nome parece ainda ser utilizada devido ao desenvolvimento histórico do conceito a partir da 2PL, e sendo a 2PL uma super-classe. A propriedade SS2PL de um cronograma também é chamada de Rigor. É também o nome da classe de horários que tem esta propriedade, e um horário SS2PL é também chamado de “horário rigoroso”. O termo “Rigorousness” é livre do legado desnecessário de “duas fases”, bem como é independente de qualquer mecanismo (de bloqueio) (em princípio, outros mecanismos de bloqueio podem ser utilizados). O respectivo mecanismo de bloqueio da propriedade é às vezes referido como Rigoroso 2PL.

SS2PL é um caso especial de S2PL, ou seja, a classe de horários SS2PL é uma subclasse adequada de S2PL (cada horário SS2PL é também um horário S2PL, mas existem horários S2PL que não são SS2PL).

SS2PL tem sido o protocolo de controle de concorrência de escolha para a maioria dos sistemas de banco de dados e tem sido utilizado desde os seus primeiros dias nos anos 70. Está provado ser um mecanismo eficaz em muitas situações, e fornece além da Serialização também a Stricidade (um caso especial de Recuperabilidade sem cascata), que é instrumental para a recuperação eficiente da base de dados, e também a Encomenda de Compromissos (CO) para participar em ambientes distribuídos onde são empregadas soluções de serialização distribuída baseadas em CO e serialização global. Sendo um subconjunto de CO, existe uma implementação eficiente de SS2PL distribuído sem um gerenciador de bloqueios distribuído (DLM), enquanto os bloqueios distribuídos (ver abaixo) são resolvidos automaticamente. O fato do SS2PL empregado em sistemas de banco de dados múltiplos garante que a serialização global é conhecida há anos antes da descoberta do CO, mas somente com o CO veio o entendimento do papel de um protocolo de compromisso atômico na manutenção da serialização global, assim como a observação da resolução automática de deadlocks distribuídos (veja um exemplo detalhado de SS2PL Distribuído). De fato, o SS2PL herdando propriedades de Recuperabilidade e CO é mais significativo do que ser um subconjunto de 2PL, o que por si só em sua forma geral, além de compreender um simples mecanismo de serialização (entretanto a serialização também está implícita no CO), não é conhecido por fornecer ao SS2PL quaisquer outras qualidades significativas. 2PL na sua forma geral, bem como quando combinado com o Strictness, ou seja, Strict 2PL (S2PL), não são conhecidos por serem utilizados na prática. O popular SS2PL não requer a marcação “fim da fase 1” como o 2PL e o S2PL, e por isso é mais simples de implementar. Além disso, ao contrário da 2PL geral, o SS2PL fornece, como mencionado acima, as úteis propriedades de ordenação Strictness and Commitment.

Existem muitas variantes do SS2PL que utilizam vários tipos de fechaduras com várias semânticas em diferentes situações, incluindo casos de mudança de tipo de fechadura durante uma transação. Notáveis são as variantes que utilizam Bloqueio de granularidade múltipla.

  1. SS2PL vs. S2PL: Ambas fornecem Serializabilidade e Rigor. Como S2PL é uma superclasse do SS2PL, pode, em princípio, fornecer mais simultaneidade. No entanto, nenhuma vantagem de simultaneidade é normalmente notada (existe exatamente o mesmo bloqueio para ambos, com liberação de bloqueio praticamente não muito anterior para S2PL), e a sobrecarga de lidar com um mecanismo de fim de fase 1 em S2PL, separado do fim da transação, não é justificada. Além disso, enquanto o SS2PL fornece o pedido de Compromisso, o S2PL não o faz. Isto explica a preferência do SS2PL em relação ao S2PL.
  2. Especialmente antes de 1990, mas também depois, em muitos artigos e livros, por exemplo, (Bernstein et al. 1987, p. 59), o termo “Strict 2PL” (S2PL) tem sido frequentemente definido pelo protocolo de bloqueio “Liberar todos os bloqueios somente após o fim da transação”, que é o protocolo do SS2PL. Assim, “Strict 2PL” não poderia estar lá o nome da intersecção de Strictness e 2PL, que é maior do que a classe gerada pelo protocolo SS2PL. Isto tem causado confusão. Com uma definição explícita de S2PL como a intersecção de Strictness e 2PL, um novo nome para SS2PL, e uma distinção explícita entre as classes S2PL e SS2PL, os artigos (Breitbart et al. 1991) e (Raz 1992) pretenderam esclarecer a confusão: o primeiro usando o nome “rigorosidade”, e o segundo “SS2PL”.”
  3. Existe uma propriedade mais geral do que SS2PL (uma superclasse de horário), ordenação de compromisso estrito (Strict CO, ou SCO), que também fornece serialização, rigor e CO, e tem uma sobrecarga de travamento semelhante. Ao contrário do SS2PL, o SCO não bloqueia um conflito de leitura-escrita (um bloqueio de leitura não bloqueia a aquisição de um bloqueio de gravação; tanto o SCO quanto o SS2PL têm o mesmo comportamento para conflitos de leitura-escrita e de gravação-escrita) ao custo de um possível commit atrasado, e sobre esse tipo de conflito o SCO tem um tempo médio de conclusão de transação mais curto e um desempenho melhor do que o SS2PL. Enquanto o SS2PL obedece à tabela de compatibilidade de bloqueio acima, o SCO tem a seguinte tabela:
Compatibilidade de bloqueio para SCO
Tipo de bloqueio Leitura-bloqueio Gravar-bloqueio
Leitura-lock
>grave-lock X X

Note que embora a SCO liberte todos os bloqueios no final da transacção e esteja em conformidade com as regras de bloqueio 2PL, SCO não é um subconjunto de 2PL devido à sua tabela de compatibilidade de fechaduras diferente. SCO permite conflitos de leitura-escrita materializados entre duas transações em suas fases 1, o que 2PL não permite na fase 1 (ver sobre conflitos materializados em Serializabilidade). Por outro lado, a 2PL permite outros tipos de conflitos materializados na fase 2, que a SCO não permite de forma alguma. Em conjunto, isso implica que as classes de programação 2PL e SCO são incomparáveis (ou seja, nenhuma classe contém a outra classe).

Resumo – Relações entre as classesEditar

Contenção de classes de horário: Uma seta da classe A para a classe B indica que a classe A contém estritamente B; a falta de um caminho dirigido entre as classes significa que as classes são incomparáveis. Uma propriedade está inerentemente bloqueando, se ela puder ser executada apenas bloqueando as operações de acesso aos dados da transação até que certos eventos ocorram em outras transações. (Raz 1992)

Entre quaisquer duas classes de horário (definidas pelas respectivas propriedades dos horários) que tenham horários comuns, ou uma contém a outra (contém estritamente se não forem iguais), ou são incomparáveis. As relações de contenção entre as classes 2PL e outras classes de programação principais estão resumidas no diagrama a seguir. 2PL e suas subclasses são inerentemente bloqueadoras, o que significa que não existem implementações otimistas para elas (e sempre que “Optimista 2PL” é mencionado refere-se a um mecanismo diferente com uma classe que inclui também programações não na classe 2PL).

Articles

Deixe uma resposta

O seu endereço de email não será publicado.