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

Vista: 12282|Resposta: 0

[Fonte] O SQL Server define o nível de isolamento das transações

[Copiar link]
Publicado em 05/02/2021 11:53:34 | | | |
Otimização de Consultas do Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Bloqueios de banco de dados NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
O nível de isolamento das transações no SQL Server e sua relação com leituras sujas, leituras não repetíveis, leituras fantasmas, etc. (argumentos de código e sequências temporais)

Compreendendo esses problemas que podem surgir no caso de acesso concorrente ao banco de dados, podemos continuar a entender o conceito de nível de isolamento do banco de dados, em termos simples: como você quer isolar transações concorrentes e em que medida? Por exemplo, se leituras sujas podem ser toleradas, ou se você não quiser que transações concorrentes tenham leituras sujas, então elas podem ser definidas para o nível de isolamento para tornar o isolamento entre transações concorrentes frouxo ou severo.

Quanto maior o nível de isolamento, menor a chance de ler dados sujos ou incompletos, mas maior é a degradação do desempenho em sistemas de alta concorrência. Quanto menor o nível de isolamento, maior a melhoria de desempenho no sistema concorrente, mas os dados em si podem estar incompletos.

No SQL Server 2012, você pode definir o nível de isolamento de uma transação (de baixo para alto) usando esta sintaxe:

DEFINIR O NÍVEL DE ISOLAMENTO DA TRANSAÇÃO
    { LEIA NÃO COMPROMETIDO
    | LEIA COMPROMETIDO
    | LEITURA REPETÍVEL
    | SNAPSHOT
    | SERIALIZÁVEL
    }
[ ; ]
Primeiro, crie um novo script de teste, crie um banco de dados e insira os dados de teste, da seguinte forma:



Crie uma nova janela A, abrir uma transação, realizar a operação de atualização e esperar 10 segundos antes de comprometer, o código é o seguinte:

Criar uma nova janela B, defina a transação READ UNCOMMITTED (leitura não comprometida, o nível mais baixo, o problema fácil é a leitura suja, porque pode ler os dados modificados por outras transações, mas não comprometidos.) Ele faz a mesma coisa que configurar (NOLOCK) na tabela de objetos de instrução SELECT em uma transação. Consulte os dados, o código é o seguinte:

Crie uma nova janela C, consulta diretamente os dados, da seguinte forma:

Por sua vez,Execute as janelas A, B e C, e veja que, ao atualizar dados, a janela B pode devolver dados imediatamente (É possível que a leitura seja um dado sujo), a janela C precisa esperar a janela A terminar de ser executadadevolverão os dados, conforme mostrado na figura abaixo:


(Janela B)


(Janela C)

(Fim)





Anterior:Diferença de persistência Redis entre RDB e AOF
Próximo:O MySQL exporta os resultados da consulta para um arquivo
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