Comentários:
This section is applicable to all transactional systems, i.e., to all systems that use database transactions (atomic transactions; e.g., transactional objects in Systems management and in networks of smartphones which typically implement private, dedicated database systems), not only general-purpose database management systems (DBMSs).DBMSs need to deal also with concurrency control issues not typical just to database transactions but rather to operating systems in general. These issues (e.g., see Concurrency control in operating systems below) are out of the scope of this section.Controle de simultaneidade em sistemas de gerenciamento de banco de dados (DBMS; por exemplo, Bernstein et al. 1987, Weikum e Vossen 2001), outros objetos transacionais e aplicativos distribuídos relacionados (por exemplo, computação em grade e computação em nuvem) garantem que as transações de banco de dados sejam realizadas simultaneamente sem violação da violação da violação da violação da violação da violação da nuvem) Integridade dos dados dos respectivos bancos de dados. Assim, o controle de simultaneidade é um elemento essencial para a correção em qualquer sistema em que duas transações de banco de dados ou mais, executadas com sobreposição de tempo, podem acessar os mesmos dados, por exemplo, praticamente em qualquer sistema de banco de dados de uso geral. Consequentemente, um vasto corpo de pesquisas relacionadas foi acumulado desde que surgiram sistemas de banco de dados no início dos anos 1970. Uma teoria de controle de simultaneidade bem estabelecida para sistemas de banco de dados é descrita nas referências mencionadas acima: teoria da serialização, que permite projetar e efetivamente analisar os métodos e mecanismos de controle de simultaneidade. Uma teoria alternativa para o controle de simultaneidade das transações atômicas sobre tipos de dados abstratos é apresentada em (Lynch et al. 1993) e não utilizada abaixo. Essa teoria é mais refinada, complexa, com um escopo mais amplo, e tem sido menos utilizada na literatura do banco de dados do que a teoria clássica acima. Cada teoria tem seus prós e contras, ênfase e percepção. Até certo ponto, eles são complementares e sua fusão pode ser útil.
Para garantir a correção, os DBMs geralmente garantem que apenas os cronogramas de transações serializáveis sejam gerados, a menos que a serialização seja intencionalmente relaxada para aumentar o desempenho, mas apenas nos casos em que a correção da aplicação não é prejudicada. Para manter a correção em casos de transações com falha (abortada) (que sempre podem acontecer por muitos motivos) os horários também precisam ter a propriedade de recuperação (da abort). Um DBMS também garante que nenhum efeito das transações comprometidas seja perdido e nenhum efeito das transações abortadas (revertidas) permanece no banco de dados relacionado. A caracterização geral da transação é geralmente resumida pelas regras ácidas abaixo. À medida que os bancos de dados foram distribuídos ou necessários para cooperar em ambientes distribuídos (por exemplo, bancos de dados federados no início de 1990 e a computação em nuvem atualmente), a distribuição efetiva dos mecanismos de controle de simultaneidade recebeu atenção especial.
O conceito de transação de banco de dados (ou transação atômica) evoluiu para permitir um comportamento do sistema de banco de dados bem compreendido em um ambiente defeituoso, onde as falhas podem acontecer a qualquer momento e recuperação de uma falha para um estado de banco de dados bem compreendido. Uma transação de banco de dados é uma unidade de trabalho, normalmente encapsulando várias operações em um banco de dados (por exemplo, lendo um objeto de banco de dados, escrevendo, adquirindo bloqueio etc.), uma abstração suportada no banco de dados e também em outros sistemas. Cada transação possui limites bem definidos em termos de quais execuções de programa/código são incluídos nessa transação (determinado pelo programador da transação por meio de comandos de transação especiais). Toda transação de banco de dados obedece às seguintes regras (por suporte no sistema de banco de dados; ou seja, um sistema de banco de dados foi projetado para garantir as transações que executa):
Atomicity - Either the effects of all or none of its operations remain ("all or nothing" semantics) when a transaction is completed (committed or aborted respectively). In other words, to the outside world a committed transaction appears (by its effects on the database) to be indivisible (atomic), and an aborted transaction does not affect the database at all. Either all the operations are done or none of them are.Consistency - Every transaction must leave the database in a consistent (correct) state, i.e., maintain the predetermined integrity rules of the database (constraints upon and among the database's objects). A transaction must transform a database from one consistent state to another consistent state (however, it is the responsibility of the transaction's programmer to make sure that the transaction itself is correct, i.e., performs correctly what it intends to perform (from the application's point of view) while the predefined integrity rules are enforced by the DBMS). Thus since a database can be normally changed only by transactions, all the database's states are consistent.Isolation - Transactions cannot interfere with each other (as an end result of their executions). Moreover, usually (depending on concurrency control method) the effects of an incomplete transaction are not even visible to another transaction. Providing isolation is the main goal of concurrency control.Durability - Effects of successful (committed) transactions must persist through crashes (typically by recording the transaction's effects and its commit event in a non-volatile memory).O conceito de transação atômica foi estendida durante os anos ao que se tornou transações comerciais que realmente implementam tipos de fluxo de trabalho e não são atômicas. No entanto, essas transações aprimoradas normalmente utilizam transações atômicas como componentes.
Se as transações forem executadas em série, ou seja, sequencialmente sem sobreposição no tempo, não existe simultaneidade de transação. No entanto, se as transações simultâneas com operações de intercalação forem permitidas de maneira descontrolada, podem ocorrer alguns resultados inesperados e inesperáveis, como:
The lost update problem: A second transaction writes a second value of a data-item (datum) on top of a first value written by a first concurrent transaction, and the first value is lost to other transactions running concurrently which need, by their precedence, to read the first value. The transactions that have read the wrong value end with incorrect results.The dirty read problem: Transactions read a value written by a transaction that has been later aborted. This value disappears from the database upon abort, and should not have been read by any transaction ("dirty read"). The reading transactions end with incorrect results.The incorrect summary problem: While one transaction takes a summary over the values of all the instances of a repeated data-item, a second transaction updates some instances of that data-item. The resulting summary does not reflect a correct result for any (usually needed for correctness) precedence order between the two transactions (if one is executed before the other), but rather some random result, depending on the timing of the updates, and whether certain update results have been included in the summary or not.A maioria dos sistemas transacionais de alto desempenho precisa executar transações simultaneamente para atender aos seus requisitos de desempenho. Assim, sem o controle de simultaneidade, esses sistemas não podem fornecer resultados corretos nem manter seus bancos de dados de forma consistente.
As principais categorias de mecanismos de controle de simultaneidade são:
Optimistic - Delay the checking of whether a transaction meets the isolation and other integrity rules (e.g., serializability and recoverability) until its end, without blocking any of its (read, write) operations ("...and be optimistic about the rules being met..."), and then abort a transaction to prevent the violation, if the desired rules are to be violated upon its commit. An aborted transaction is immediately restarted and re-executed, which incurs an obvious overhead (versus executing it to the end only once). If not too many transactions are aborted, then being optimistic is usually a good strategy.Pessimistic - Block an operation of a transaction, if it may cause violation of the rules, until the possibility of violation disappears. Blocking operations is typically involved with performance reduction.Semi-optimistic - Block operations in some situations, if they may cause violation of some rules, and do not block in other situations while delaying rules checking (if needed) to transaction's end, as done with optimistic.Diferentes categorias fornecem desempenho diferente, ou seja, diferentes taxas médias de conclusão da transação (taxa de transferência), dependendo dos tipos de transações misturam, o nível de paralelismo de computação e outros fatores. Se a seleção e o conhecimento sobre trade-offs estiverem disponíveis, a categoria e o método devem ser escolhidos para fornecer o maior desempenho.
O bloqueio mútuo entre duas transações (onde cada uma bloqueia a outra) ou mais resulta em um impasse, onde as transações envolvidas são paralisadas e não podem chegar à conclusão. A maioria dos mecanismos não otimistas (com bloqueio) é propenso a deadlocks, que são resolvidos por um aborto intencional de uma transação paralisada (que libera as outras transações nesse impasse) e sua reinicialização e reexecução imediata. A probabilidade de um impasse é tipicamente baixa.
Bloqueio, impasse e abortos resultam em redução de desempenho e, portanto, as compensações entre as categorias.
MethodsExistem muitos métodos para controle de simultaneidade. A maioria deles pode ser implementada em qualquer categoria principal acima. Os principais métodos, que têm muitas variantes e, em alguns casos, podem se sobrepor ou ser combinados, são:
Locking (e.g., Two-phase locking - 2PL) - Controlling access to data by locks assigned to the data. Access of a transaction to a data item (database object) locked by another transaction may be blocked (depending on lock type and access operation type) until lock release.Serialization graph checking (also called Serializability, or Conflict, or Precedence graph checking) - Checking for cycles in the schedule's graph and breaking them by aborts.Timestamp ordering (TO) - Assigning timestamps to transactions, and controlling or checking access to data by timestamp order.Commitment ordering (or Commit ordering; CO) - Controlling or checking transactions' chronological order of commit events to be compatible with their respective precedence order.Outros grandes tipos de controle de simultaneidade utilizados em conjunto com os métodos acima incluem:
Multiversion concurrency control (MVCC) - Increasing concurrency and performance by generating a new version of a database object each time the object is written, and allowing transactions' read operations of several last relevant versions (of each object) depending on scheduling method.Index concurrency control - Synchronizing access operations to indexes, rather than to user data. Specialized methods provide substantial performance gains.Private workspace model (Deferred update) - Each transaction maintains a private workspace for its accessed data, and its changed data become visible outside the transaction only upon its commit (e.g., Weikum and Vossen 2001). This model provides a different concurrency control behavior with benefits in many cases.O tipo de mecanismo mais comum nos sistemas de banco de dados desde seus primeiros dias na década de 1970 tem sido um forte bloqueio bifásico rigoroso (SS2PL; também chamado de agendamento rigoroso ou 2PL rigoroso), que é um caso especial (variante) de ambos os bloqueios bifásicos (2PL (2PL ) e ordenação de compromisso (CO). É pessimista. Apesar de seu nome longo (por razões históricas), a idéia do mecanismo SS2PL é simples: "libere todas as fechaduras aplicadas por uma transação somente após o término da transação". O SS2PL (ou rigoroso) também é o nome do conjunto de todos os cronogramas que podem ser gerados por esse mecanismo, isto é, esses são cronogramas SS2PL (ou rigorosos), possuem a propriedade SS2PL (ou rigoroso).
Os mecanismos de controle de simultaneidade precisam primeiro de operar corretamente, isto é, para manter as regras de integridade de cada transação (conforme relacionadas à concorrência; regra de integridade específica de aplicativo está fora do escopo aqui) enquanto as transações estão em execução simultaneamente e, portanto, a integridade de todo o sistema transacional . A correção precisa ser alcançada com o melhor desempenho possível. Além disso, existe cada vez mais uma necessidade de operar efetivamente enquanto as transações são distribuídas em processos, computadores e redes de computadores. Outros sujeitos que podem afetar o controle de simultaneidade são recuperação e replicação.
CorrectnessSerializabilityPara correção, um objetivo principal comum da maioria dos mecanismos de controle de simultaneidade está gerando horários com a propriedade de serialização. Sem serializabilidade, pode ocorrer fenômenos indesejáveis, por exemplo, o dinheiro pode desaparecer de contas ou ser gerado do nada. A serialização de um cronograma significa equivalência (nos valores de banco de dados resultantes) a algum cronograma serial com as mesmas transações (ou seja, nas quais as transações são seqüenciais sem sobreposição no tempo e, portanto, completamente isoladas uma da outra: nenhum acesso concorrente por duas transações para os mesmos dados é possível). A serialização é considerada o nível mais alto de isolamento entre as transações de banco de dados e o principal critério de correção para transações simultâneas. Em alguns casos, formas de serialização comprometidas e relaxadas são permitidas para um melhor desempenho (por exemplo, o popular mecanismo de isolamento de instantâneos) ou para atender aos requisitos de disponibilidade em sistemas altamente distribuídos (consulte a consistência eventual), mas apenas se a correção da aplicação não for violada pelo relaxamento ( Por exemplo, nenhum relaxamento é permitido para transações em dinheiro, pois, por relaxamento, o dinheiro pode desaparecer ou aparecer do nada).
Quase todos os mecanismos de controle de simultaneidade implementados alcançam a serialização, fornecendo serialização de conflito, um amplo caso especial de serialização (ou seja, abrange, permite a maioria dos horários serializáveis e não imponha restrições adicionais significativas de causar atraso) que podem ser implementadas com eficiência.
RecoverabilitySee Recoverability in SerializabilityComentário: Enquanto na área geral dos sistemas, o termo "recuperação" pode se referir à capacidade de um sistema se recuperar da falha ou de um estado incorreto/proibido, dentro do controle de simultaneidade dos sistemas de banco de dados, este termo recebeu um significado específico.
O controle de simultaneidade normalmente também garante a propriedade de recuperação dos horários para manter a correção em casos de transações abortadas (que sempre podem acontecer por muitos motivos). A recuperação (de abortar) significa que nenhuma transação comprometida em um cronograma leu dados escritos por uma transação abortada. Esses dados desaparecem do banco de dados (no aborto) e são partes de um estado de banco de dados incorreto. A leitura desses dados viola a regra de consistência do ácido. Diferentemente da serialização, a recuperação não pode ser comprometida, relaxada a qualquer caso, uma vez que qualquer relaxamento resulta em uma rápida violação de integridade do banco de dados sobre os abortos. Os principais métodos listados acima fornecem mecanismos de serialização. Nenhum deles, em sua forma geral, fornece automaticamente a recuperação, e são necessárias considerações especiais e aprimoramentos de mecanismo para apoiar a recuperação. Um caso especial de recuperação comumente utilizado é o rigor, que permite a recuperação eficiente do banco de dados da falha (mas exclui implementações otimistas; por exemplo, o Strict Co (SCO) não pode ter uma implementação otimista, mas possui um semi-otimista).
Comentário: Observe que a propriedade de recuperação é necessária, mesmo que não ocorra falha no banco de dados e nenhuma recuperação do banco de dados da falha. É necessário que seja necessário lidar corretamente automaticamente abortos de transações, o que pode não estar relacionado à falha do banco de dados e à recuperação dele.
DistributionCom o rápido desenvolvimento tecnológico da computação, a diferença entre a computação local e distribuída em redes de baixa latência ou ônibus está desfoque. Assim, a utilização bastante eficaz de técnicas locais em ambientes distribuídos é comum, por exemplo, em clusters de computador e processadores multi-core. No entanto, as técnicas locais têm suas limitações e usam multiprocessos (ou threads) suportados por multiprocessadores (ou múltiplos núcleos) para escalar. Isso geralmente transforma transações em distribuídas, se elas próprias precisam abranger multipocessos. Nesses casos, a maioria das técnicas locais de controle de simultaneidade não escala bem.
Distributed serializability and commitment orderingSee Distributed serializability in SerializabilityÀ medida que os sistemas de banco de dados se distribuíam ou começaram a cooperar em ambientes distribuídos (por exemplo, bancos de dados federados no início dos anos 90 e hoje em dia computação, computação em nuvem e redes com smartphones), algumas transações foram distribuídas. Uma transação distribuída significa que a transação abrange processos e pode abranger computadores e locais geográficos. Isso gera uma necessidade em mecanismos de controle de simultaneidade distribuídos eficazes. A obtenção da propriedade de serialização da programação de um sistema distribuído (consulte a serialização distribuída e a serialização global (serializabilidade modular)) apresenta efetivamente desafios especiais normalmente não atendidos pela maioria dos mecanismos regulares de serialização, originalmente projetados para operar localmente. Isso se deve especialmente à necessidade de distribuição dispendiosa de informações de controle de simultaneidade em meio à comunicação e à latência do computador. A única técnica eficaz geral conhecida para a distribuição é a ordem de compromisso, divulgada publicamente em 1991 (depois de ser patenteada). Ordem de comprometimento (encomenda de comprometimento, CO; Raz 1992) significa que a ordem cronológica dos eventos cronológicos das transações é mantida compatível com sua respectiva ordem de precedência. O CO não requer a distribuição de informações de controle de simultaneidade e fornece uma solução eficaz geral (confiável, de alto desempenho e escalável) para a serialização distribuída e global, também em um ambiente heterogêneo com sistemas de banco de dados (ou outros objetos transacionais) com diferentes ( qualquer) mecanismos de controle de simultaneidade. O CO é indiferente a qual mecanismo é utilizado, pois não interfere em nenhum agendamento de operação de transação (que a maioria dos mecanismos controla) e apenas determina a ordem dos eventos de confirmação. Assim, o CO permite a distribuição eficiente de todos os outros mecanismos e também a distribuição de uma mistura de mecanismos locais diferentes (qualquer), para alcançar a serialização distribuída e global. A existência de tal solução foi considerada "improvável" até 1991 e, por muitos especialistas, também mais tarde, devido ao mal -entendido da solução da CO (consulte citações na serialização global). Um importante benefício lateral do CO é a resolução automática de impasse distribuído. Ao contrário do CO, praticamente todas as outras técnicas (quando não combinadas com CO) são propensas a deadlocks distribuídos (também chamados de deadlocks globais) que precisam de manuseio especial. O CO também é o nome da propriedade de programação resultante: um cronograma possui a propriedade CO se a ordem cronológica dos eventos de comprometimento de suas transações for compatível com a ordem precedência (parcial) das respectivas transações.
O SS2PL mencionado acima é uma variante (caso especial) de CO e, portanto, também eficaz para obter a serialização distribuída e global. Ele também fornece resolução automática de impasse distribuído (um fato negligenciado na literatura de pesquisa mesmo após a publicação da CO), bem como rigor e, portanto, recuperabilidade. Possuir essas propriedades desejadas, juntamente com implementações conhecidas e eficientes baseadas em travamento, explica a popularidade do SS2PL. O SS2PL foi utilizado para alcançar com eficiência a serialização distribuída e global desde 1980 e se tornou o padrão de fato para ela. No entanto, o SS2PL está bloqueando e restringindo (pessimista) e com a proliferação de distribuição e utilização de sistemas diferentes dos sistemas tradicionais de banco de dados (por exemplo, como na computação em nuvem), menos tipos de CO (por exemplo, CO) podem ser necessários para melhor performance.
Comentários:
The Distributed conflict serializability property in its general form is difficult to achieve efficiently, but it is achieved efficiently via its special case Distributed CO: Each local component (e.g., a local DBMS) needs both to provide some form of CO, and enforce a special vote ordering strategy for the Two-phase commit protocol (2PC: utilized to commit distributed transactions). Differently from the general Distributed CO, Distributed SS2PL exists automatically when all local components are SS2PL based (in each component CO exists, implied, and the vote ordering strategy is now met automatically). This fact has been known and utilized since the 1980s (i.e., that SS2PL exists globally, without knowing about CO) for efficient Distributed SS2PL, which implies Distributed serializability and strictness (e.g., see Raz 1992, page 293; it is also implied in Bernstein et al. 1987, page 78). Less constrained Distributed serializability and strictness can be efficiently achieved by Distributed Strict CO (SCO), or by a mix of SS2PL based and SCO based local components.About the references and Commitment ordering: (Bernstein et al. 1987) was published before the discovery of CO in 1990. The CO schedule property is called Dynamic atomicity in (Lynch et al. 1993, page 201). CO is described in (Weikum and Vossen 2001, pages 102, 700), but the description is partial and misses CO's essence. (Raz 1992) was the first refereed and accepted for publication article about CO algorithms (however, publications about an equivalent Dynamic atomicity property can be traced to 1988). Other CO articles followed. (Bernstein and Newcomer 2009) note CO as one of the four major concurrency control methods, and CO's ability to provide interoperability among other methods.Distributed recoverabilityDiferentemente da serialização, a recuperação distribuída e a rigidez distribuída podem ser alcançadas com eficiência de maneira direta, é a maneira como a Co é alcançada: em cada sistema de banco de dados, eles precisam ser aplicados localmente e empregar uma estratégia de ordem de voto para o protocolo de comprometimento de duas fases (2pc; Raz 1992, página 307).
Como foi mencionado acima, o SS2PL distribuído, incluindo a rigidez distribuída (recuperação) e a ordem de compromisso distribuída (serialização), emprega automaticamente a estratégia de ordem de voto necessária e é alcançada (globalmente) quando empregada localmente em cada sistema de dados (local) (como foi é conhecido e utilizado por muitos anos; por uma questão de fato, a localidade é definida pelo limite de um participante de 2pc (Raz 1992)).
Other major subjects of attentionO design dos mecanismos de controle de simultaneidade é frequentemente influenciado pelos seguintes assuntos:
RecoveryTodos os sistemas são propensos a falhas, e o tratamento da recuperação da falha é uma obrigação. As propriedades dos cronogramas gerados, que são ditados pelo mecanismo de controle de simultaneidade, podem afetar a eficácia e a eficiência da recuperação. Por exemplo, a propriedade de rigor (mencionada na recuperação da seção acima) é frequentemente desejável para uma recuperação eficiente.
ReplicationPara os objetos de alta disponibilidade, os objetos geralmente são replicados. As atualizações de réplicas de um mesmo objeto de banco de dados precisam ser mantidas sincronizadas. Isso pode afetar a maneira como o controle de simultaneidade é realizado (por exemplo, Gray et al. 1996).
Os sistemas operacionais multitarefa, especialmente os sistemas operacionais em tempo real, precisam manter a ilusão de que todas as tarefas que executam em cima delas estão todas em execução ao mesmo tempo, embora apenas uma ou algumas tarefas realmente estejam funcionando a qualquer momento devido ao Limitações do hardware em que o sistema operacional está em execução. Essa multitarefa é bastante simples quando todas as tarefas são independentes uma da outra. No entanto, quando várias tarefas tentam usar o mesmo recurso ou quando as tarefas tentam compartilhar informações, isso pode levar a confusão e inconsistência. A tarefa de computação simultânea é resolver esse problema. Algumas soluções envolvem "bloqueios" semelhantes aos bloqueios usados nos bancos de dados, mas correm o risco de causar problemas próprios, como o impasse. Outras soluções são algoritmos que não bloqueiam e read-copy-update.