Database
 sql >> Base de Dados >  >> RDS >> Database

Dicas para bloqueios de leitura/gravação dependendo do nível de isolamento da transação no MSSQL


Ler não confirmado
  • Se os dados estiverem sendo alterados em uma transação, a seleção desses dados (em outra transação ou sem uma transação) não aguardará até que a primeira transação seja concluída e retornará entradas de dados de transações não confirmadas.
  • Se os dados estiverem sendo lidos em uma transação, as atualizações desses dados em outra transação não aguardarão até que a primeira transação seja concluída.
  • Os bloqueios compartilhados não são usados. Idêntico à configuração t ele NOLOCK dica para todas as seleções em Read Committed.
  • Os bloqueios exclusivos são ativados durante a execução da instrução e desativados no final do do transação .



Ler confirmado + read_committed_snapshot desativado
(alterar banco de dados xxx definir read_committed_snapshot off)
  • Se os dados estiverem sendo alterados em uma transação, a seleção desses dados (em outra transação ou sem transação) aguardará até que a primeira transação seja concluída. Sele tratar com o NOCHECK dica retornará dados modificados, mas não confirmados.
  • Se os dados estiverem sendo lidos em uma transação, as atualizações desses dados em outra transação não aguardarão até que a primeira transação seja concluída.
  • Os bloqueios compartilhados estão sendo ativados durante a execução da instrução e desativados no final do estado execução .
  • Os bloqueios exclusivos estão sendo habilitados durante a execução da instrução e desabilitados no final da transação .

Ler confirmado + read_committed_snapshot ativado
(alterar banco de dados xxx definir read_committed_snapshot ativado)
  • Se os dados estiverem sendo alterados em uma transação, a seleção desses dados (em outra transação ou sem transação) não aguardará até que a primeira transação seja concluída e retornará valores no momento t de o início da transação . Selecione com o Dica NOCHECK retornará dados modificados, mas não confirmados.
  • Se os dados estiverem sendo lidos em uma transação, as atualizações desses dados em outra transação não aguardarão até que a primeira transação seja concluída.
  • Os bloqueios compartilhados não são usados. O mecanismo de controle de versão de linha é usado - os dados dos registros atualizados são armazenados em tempdb .
  • Os bloqueios exclusivos estão sendo habilitados durante a execução da instrução e são desabilitados no final da transação .

Leitura repetível
  • Se os dados estiverem sendo alterados em uma transação, a seleção desses dados (em outra transação ou sem uma transação) aguardará até que a primeira transação seja concluída. Selecione com o A dica NOLOCK retornará dados modificados, mas não confirmados.
  • Se os dados estiverem sendo lidos em uma transação, as atualizações desses dados em outra transação aguardarão até que a primeira transação seja concluída.
  • Os bloqueios compartilhados estão sendo ativados durante a execução da instrução e desativados no final da transação , ao contrário de Ler confirmado.
  • Os bloqueios exclusivos estão sendo habilitados durante a execução da instrução e desabilitados no final da transação .

Serializável
  • Se os dados estiverem sendo alterados em uma transação, a seleção desses dados (em outra transação ou sem transação) aguardará até que a primeira transação seja concluída. Selecione com o A dica NOLOCK irá retorna dados modificados, mas não confirmados.
  • Se os dados estiverem sendo lidos em uma transação, as atualizações desses dados em outra transação aguardarão até que a primeira transação seja concluída.
  • Os bloqueios compartilhados são ativados durante a execução da instrução e desativados no final da transação .
  • Os bloqueios exclusivos estão sendo habilitados durante a execução da instrução e estão sendo desabilitados no final da transação.
  • Os bloqueios de intervalo exclusivos estão sendo ativados para chaves que atendem ao intervalo de critérios de consulta. Não são permitidas inserções de novos registros dentro desse intervalo. Idêntico à configuração o ESPERA CK dica para todos os SELECTs em Leia Comprometido.

Instantâneo
(alterar banco de dados xxx definir allow_snapshot_isolation on)
  • Se os dados estiverem sendo alterados em uma transação, a seleção desses dados (em outra transação ou sem uma transação) não aguardará até que a primeira transação seja concluída. e retornará valores no momento de o início da transação . Selecione com o A dica NOLOCK irá retorna dados modificados, mas não confirmados.
  • Se os dados estiverem sendo lidos em uma transação, as atualizações desses dados em outra transação não aguardarão até que a primeira transação seja concluída.
  • Os bloqueios compartilhados não são usados. O mecanismo de controle de versão de linha é usado - os dados dos registros atualizados são armazenados em tempdb .
  • Os bloqueios exclusivos estão sendo habilitados durante a execução da instrução e desabilitados no final da transação.

Testado em MSSQL 2014.