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)
|