Obtenha log mínimo ao carregar dados em tabelas temporárias

10

Mesmo depois de ler o Guia de desempenho de carregamento de dados , ainda não tenho certeza se é necessário adicionar a dica de tabela TABLOCK a uma tabela temporária vazia, definida com um índice em cluster para obter o mínimo de log.

Obviamente, a tabela temp é criada no TempDB, que opera no modo de recuperação SIMPLE, então eu pensaria que era um candidato perfeito para o log mínimo, no entanto, não consigo encontrar uma passagem para confirmá-lo.

Uma tabela temporária é candidata a um log mínimo e, em caso afirmativo, vale a pena adicionar a dica TABLOCK, conforme recomendado para tabelas permanentes?

Pixelated
fonte

Respostas:

18

Não tenho certeza se é necessário adicionar a TABLOCKdica de tabela a uma tabela temporária vazia, definida com um índice em cluster para obter um log mínimo.

Não. As tabelas temporárias locais ( #temp) são privadas para a sessão de criação, portanto, uma dica de bloqueio de tabela não é necessária. Uma dica de bloqueio de tabela seria necessária para uma tabela temporária global ( ##temp) ou uma tabela regular ( dbo.temp) criada tempdb, porque elas podem ser acessadas a partir de várias sessões.

Observe que, mesmo onde as otimizações mínimas completas de registro não são aplicadas, as tabelas criadas se tempdbbeneficiam de outras otimizações, como a necessidade de registrar REDOinformações. Você pode testar se as linhas ou páginas estão sendo registradas usando o documento não documentado sys.fn_dblog. O registro regular apresentará registros registrados em linhas como LOP_INSERT_ROWS.


Observe que a adição TABLOCKa uma tabela temporária local é necessária para obter execução paralela com INSERT...SELECTconsultas no SQL Server 2016, consulte o artigo da Base de Dados de Conhecimento da Microsoft:

Baixo desempenho ao executar as operações INSERT .. SELECT no SQL Server 2016

Paul White 9
fonte