Eu me pergunto se:
- o nível de isolamento é Read Committed
- os dados são inseridos ou excluídos ou lidos
são os mesmos bloqueios (compartilhados para leitura e exclusivos para inserção/exclusão) usados para a tabela temporária global que a tabela tradicional de armazenamento de linhas.
Para tabela temporária acredito que não haverá bloqueio pois ela "vive" durante o contexto atual, então não consigo ler e inserir dados ao mesmo tempo.
Mas para a tabela temporária global, digamos que eu tenha muitas operações - algumas estão inserindo novos dados, algumas estão excluindo dados e algumas querem ler os dados que serão excluídos.
Digamos que a estrutura da tabela seja:
GroupID EntityID
1 101
1 102
1 103
2 101
2 104
3 100
As mesmas regras são aplicadas aqui?
Eu estava curioso para esta pergunta e queria experimentar e ver se tempdb é um banco de dados especial ou apenas como outro banco de dados de usuário em que o isolamento padrão "Read Committed" é aplicado ou não.
Abaixo estão as consultas que eu executei:
Consulta de atualização executada para alguns registros dessas tabelas na próxima janela
Ambas as instruções acima atualizaram 22 linhas conforme o esperado.
Mais tarde, executei a instrução select nessas duas tabelas em duas janelas diferentes e até agora ambas estão travadas:
Uma coisa que notei é que na primeira consulta nenhum registro está aparecendo na tela, enquanto no segundo caso, 8830 registros estão na tela e presos depois (não tenho certeza do porquê?) eles estão aguardando a atualização ser concluída. Isso é o que se esperava no comportamento padrão do banco de dados MSSQL.
Eu validei o mesmo usando sp_whoisactive e pude ver que há bloqueio de banco de dados como abaixo:
Informações de bloqueio para cada um deles são fornecidas para detalhes.
1º:
2º:
3º:
Também verifiquei o nível de isolamento para cada uma dessas transações usando o comando abaixo:
Resultado:
Com tudo isso, pode-se afirmar que também para o tempdb, o nível de isolamento é definido como "Read Committed" e as regras se aplicam de maneira semelhante a outros bancos de dados.
Eu executei essas consultas na versão MSSQL 2019.