Suponha que eu tenha dois bancos de dados no mesmo servidor RCSI_Yes
e RSCI_No
. No primeiro, o RCSI está habilitado. No segundo, não é. Como o SQL Server decide qual nível de isolamento de transação deve ser usado quando escrevo uma consulta que atinge os dois bancos de dados? Faz diferença em quais bancos de dados eu executo minha consulta?
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
O nível de isolamento usado é "leitura confirmada" - o bloqueio versus o instantâneo são implementações diferentes desse nível de isolamento.
Em relação ao tipo usado, ele não terá outra escolha a não ser usar o tipo de bloqueio se estiver consultando um banco de dados que tenha a opção desabilitada (já que as versões de linha não estarão disponíveis).
Eu testei para ver como ele se comportava ao consultar
RCSI_Yes
noRCSI_No
. Isso usou RCSI.Você pode simplesmente testar isso sozinho.
Configurar
Fazer uma simples
SELECT
leitura confirmadaRCSI_Yes.dbo.T1
enquanto a transação de configuração está aberta retorna de forma confiável,1
independentemente do contexto de banco de dados a partir do qual o comando é executado e éRCSI_No.dbo.T1
bloqueado de forma confiável.Combinando os dois em uma única consulta como abaixo...
Consulta de teste
Devoluções
Então, no caso acima, ele leu
RCSI_Yes
sem bloqueio e leu a versão1
e foi então bloqueado para leituraRCSI_No
até que o bloqueio fosse liberado e então lido2
a partir daí. E finalmente lêRCSI_Yes
novamente a mesma linha do instantâneo.O comportamento acima difere de
O que retorna
Neste caso, o bloqueio
RCSI_No
acontece primeiro (antes daRCSI_Yes
execução da ramificação do plano) e, portanto, suponho que não seja possível criar uma transação no contexto 'RCSI_Yes' até que essa versão já esteja confirmada.Isto é um tanto surpreendente, pois é contrário ao comportamento documentado