Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 28055|Resposta: 3

[Fonte] Controle de concorrência multi-versão do SQL Server

[Copiar link]
Publicado em 28/01/2021 17:55:52 | | |
A consistência do banco de dados também é um dos indicadores importantes para medir o desempenho do SGBD. Atualmente, a maioria dos bancos de dados comerciais (DB2, SQL Server) utiliza o protocolo de Travamento de Duas Fases (2PL) para controle de concorrência, que garante a serialização da execução concorrente de transações. No entanto, o 2PL precisa travar qualquer dado antes de poder ler ou gravar neles. Na matriz de compatibilidade de bloqueio, bloqueios S (bloqueios de compartilhamento) e bloqueios X (bloqueios exclusivos) são incompatíveis, então quando a transação 1 está realizando uma operação de leitura sobre o dado A (mais um bloqueio S), e a transação 2 quer escrever nos dados (adicionar um bloqueio X), a transação 2 deve esperar que a transação 1 libere o bloqueio S nos dados A antes de prosseguir. O Controle de Concorrência Multi-Versão (MVCC) resolve bem esse problema. Em um sistema multiversão, cada dado de escrita gera uma nova versão, e a operação de leitura pode ler a versão apropriada conforme necessário, de modo que as operações de leitura e escrita não se bloqueiam. O MVCC aumenta a concorrência, mas também introduz a sobrecarga de armazenamento de manter múltiplas versões.

O motor de banco de dados Microsoft SQL Server introduz uma nova implementação do nível de isolamento de transações existente - leituras comprometidas, que fornecem snapshots em nível de instrução usando versionamento de linhas. O mecanismo de banco de dados SQL Server também introduz um novo nível de isolamento de transações – snapshots para fornecer snapshots em nível de transação que também utilizam versionamento de linhas.

Configurar a opção READ_COMMITTED_SNAPSHOT do banco de dados para LIGADA permite o isolamento de leitura comprometido usando versionamento de linhas. Configurar a opção ALLOW_SNAPSHOT_ISOLATION do banco de dados para LIGADA ativa o isolamento de snapshots. Quando qualquer uma das opções é ativada para o banco de datos, o mecanismo de banco mantém a versão de cada linha que foi modificada. Sempre que uma transação modifica uma linha, a imagem da linha anterior à modificação é copiada para uma página no armazenamento de versões. Um armazenamento de versões é uma coleção de páginas de dados em tempdb. Se houver múltiplas linhas de modificação de transações, múltiplas versões dessas linhas serão vinculadas em uma cadeia de versões. Uma operação de leitura usando versionamento de linha recuperará a última versão de cada linha que foi comprometida no momento do início da transação ou instruto.

Aplicações escritas para SQL Server 2008 ou novas no SQL Server implementam isolamento de commits de leitura usando versionamento de linhas, especificando o nível de isolamento da transação para commits de leitura quando a opção READ_COMMITTED_SNAPSHOT banco de dados está ATIVADA. Todas as leituras vão olhar para a versão da linha que foi comprometida quando a declaração começou. Isso fornecerá um snapshot em nível de instrução dos dados.

Aplicações escritas para SQL Server implementarão o isolamento de snapshots especificando o nível de isolamento da transação snapshot quando a opção ALLOW_SNAPSHOT_ISOLATION banco de dados estiver ATIVADA. Todas as leituras em uma transação snapshot vão olhar para a versão da linha que foi comprometida quando a transação começou. Isso fornecerá um snapshot em nível de transação dos dados.

Para transações que utilizam níveis de isolamento baseados em linhas, as leituras não solicitam bloqueios compartilhados nos dados. Isso significa que leitores que usam versionamento por linha não impedem que outros leitores ou escritores acessem os mesmos dados. Da mesma forma, o escritor não atrapalha o leitor. No entanto, os escritores atrapalham uns aos outros (mesmo quando rodam em um nível de isolamento baseado na versão de linha). Duas operações de escrita não podem modificar os mesmos dados ao mesmo tempo.

O recurso de Isolamento de Snapshots estende a estrutura de travamento no SQL Server 2008, permitindo que aplicações visualizem valores antes que ocorram quaisquer modificações de dados. Isso evita que a aplicação seja bloqueada, mas ainda fornece dados realmente enviados. O Read Committed Snapshot do SQL Server 2008 requer que um administrador de banco de dados seja ativado, permitindo que dados sejam lidos por transações somente leitura. Portanto, o controle de concorrência da SI sobre transações somente leitura é muito bom, mas não está claro se isso ocorre para transações de atualização. É mais desfavorável que transações de atualização de longo prazo concorram com transações de alto nível de curto prazo. Se uma transação entre bancos de dados tentar usar o padrão de Isolamento de Snapshot (SI), em vez de todos os bancos de dados configurados, a transação falha. Isso, sem dúvida, cria certos obstáculos à escalabilidade. Parece que a Microsoft ainda tem um longo caminho a percorrer para alcançar seu próprio SI, que seja mais forte que a especificação SQL 92.

Antes de qualquer modificação, faça uma cópia da versão anterior, e todas as operações de leitura subsequentes leem a versão copiada, e a modificação criará uma nova versão. Dessa forma,Operações de leitura e escrita não se bloqueiam. A vantagem de usar esse mecanismo de versionamento de linha é que a concorrência do programa é relativamente alta, mas a desvantagem é que, embora o usuário não leia um dado sujo, ele pode ser um valor de dado que está sendo modificado e está prestes a expirar. Se você modificar os dados com base nesse valor expirado, isso causará um erro lógico

Comandos SQL:


Links de referência:

O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.





Anterior:Elasticsearch (ES) replica o índice clone
Próximo:Tutorial do cubase10.5
Publicado em 29/01/2021 09:13:40 |
xuexi
Publicado em 15/07/2021 20:37:16 |
Eu quero, eu quero, eu quero, eu queroquerer
Publicado em 12/12/2021 01:22:12 |
Eu quero, eu quero, eu quero
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com