Estou tendo um problema com um DBA que afirma que as variáveis da tabela residem no ldf do tempdb e quando uma grande quantidade de dados é carregada na variável da tabela, os logs do tempdb são preenchidos.
A solução do DBA é usar tabela temporária ao invés de variável de tabela. Embora eu veja a justificativa para usar a tabela temporária no caso de grandes conjuntos de dados, não entendo como a tabela temporária é criada e armazenada no mdf do tempdb, enquanto a variável da tabela é armazenada no ldf. Alguém por favor pode jogar alguma luz?
Seu DBA está certo de que as ações nas variáveis da tabela são registradas no
tempdb
log de transações, mas também as operações nas#temp
tabelas, portanto, a resolução proposta não ajuda. De fato, se houver alguma transação de usuário ao redor, a#temp
versão da tabela pode ser pior, pois otempdb
log não pode ser truncado até que seja concluído.Ambos têm suas páginas alocadas no arquivo de dados (mdf).
O entendimento de que a variável da tabela é "armazenada no ldf" é completamente incorreto. Tudo o que é gravado no log são as informações necessárias para reverter a instrução (necessário caso a instrução encontre um erro e precise ser revertida)
Você pode ver exemplos do log envolvido usando
sys.fn_dblog
. O script abaixo insere algumas linhas em uma variável de tabela e#temp
tabela e as atualiza.Resultados de exemplo
(Os registros de log relacionados à variável de tabela aparecem com o nome gerado pelo sistema
#162F4418
na saída abaixo)Roteiro