No banco de dados hospedado em uma instância do SQL Server 2012, habilitei ALLOW_SNAPSHOT_ISOLATION
e verifiquei o estado ON
usando
SELECT snapshot_isolation_state_desc,name from sys.databases
No entanto, em 2 sessões separadas, se eu executar uma seleção de longa duração TABLOCK
na 1ª e UPDATE
na 2ª (ou vice-versa), a consulta que começar primeiro bloqueia a segunda consulta (conforme sp_who2
)
Olhando para
select * from sys.dm_exec_requests
, ambas as consultas têm um nível de isolamento de transação de leitura confirmada (2)
Pelo que entendi, com o isolamento de instantâneo ativado, o uso do tempdb deve aumentar, mas o bloqueio não deve ocorrer nessa situação. Estou perdendo algumas etapas de configuração para obter esse comportamento?
Se sua intenção é evitar que os leitores bloqueiem os escritores e vice-versa no
READ_COMMITTED
nível de isolamento padrão, ative aREAD_COMMITTED_SNAPSHOT
opção de banco de dados. Isso fará com que o controle de versão da linha em vez do bloqueio seja usado para implementar a consistência de leitura no nível da instrução.Embora muitas vezes confusa, a
ALLOW_SNAPSHOT_ISOLATION
opção não está relacionada aREAD_COMMITTED_SNAPSHOT
.ALLOW_SNAPSHOT_ISOLATION
permite que oSNAPSHOT
nível de isolamento separado seja usado para fornecer consistência de leitura de várias instruções, mas alterações de código são necessárias para usá-lo. AREAD_COMMITTED_SNAPSHOT
opção fornece consistência de leitura em nível de instrução sem alterações de código, embora devamos estar cientes das implicações que o comportamento de bloqueio tem em aplicativos que dependem de bloqueio.Habilitar
ALLOW_SNAPSHOT_ISOLATION
não altera o comportamento do seu código. Em vez disso, ele estabelece as bases para que você possa usar o controle de versão de linha , se desejar. Depois que o isolamento de instantâneo for aplicado ao banco de dados, uma consulta poderá usar com êxito o controle de versão de linha se a seguinte instrução for usada:Este post de Kendra Little oferece uma boa introdução aos níveis de isolamento de snapshot .