Um movimento está em andamento no meu local de trabalho para deixar de usar #temp tables e, em vez disso, usar tabelas físicas permanentes com SPIDs. Sempre que alguém inseriu anteriormente em uma tabela #temp, agora INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)
é necessário - junto com várias DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID
instruções no início de, por exemplo, um procedimento armazenado. Além disso, escusado será dizer que em qualquer lugar em que essas 'tabelas permanentes para armazenamento de dados temporários' sejam usadas, é preciso ter cuidado para incluir a WHERE SPID = @@SPID
.
A lógica por trás da mudança em direção a essa prática é que ela melhorará o desempenho geral do servidor no qual as consultas estão em execução (reduzindo a E / S e a contenção em tempdb). Não gosto muito dessa abordagem por várias razões - é feia, potencialmente perigosa e parece que pode prejudicar o desempenho das consultas que usam o novo esquema.
Alguém tem alguma experiência com essa ou outras abordagens semelhantes para eliminar as tabelas #temp?
fonte
Parece uma solução drástica. Existem muitos artigos on-line sobre como reduzir a contenção de tempdb (e otimizar seu uso) - sua organização examinou completamente essa avenida?
http://www.sql-server-performance.com/tips/tempdb_p1.aspx
http://www.sqlservercentral.com/blogs/robert_davis/archive/2010/03/05/Breaking-Down-TempDB-Contention.aspx
http://searchsqlserver.techtarget.com/tip/Optimize-tempdb-in-SQL-Server-by-striping-and-splitting-to-multiple-files
etc.
fonte
Parece-me que você deveria solucionar os problemas de desempenho no tempDB, há algumas sugestões aqui
fonte