Hay un movimiento en marcha en mi lugar de trabajo para alejarme del uso de tablas #temp y, en su lugar, usar tablas físicas permanentes con SPID. Siempre que uno hubiera INSERTADO previamente en una tabla #temp, ahora INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)
se requiere una, junto con un conjunto de DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID
declaraciones al comienzo de, por ejemplo, un procedimiento almacenado. Además, no hace falta decir que en cualquier lugar donde se usen estas 'tablas permanentes para almacenar datos temporales', hay que tener cuidado de incluir a WHERE SPID = @@SPID
.
La lógica detrás del movimiento hacia esta práctica es que mejorará el rendimiento general del servidor en el que se ejecutan las consultas (al reducir la E / S y la contención en tempdb). No estoy interesado en este enfoque por varias razones: es feo, potencialmente peligroso y parece que puede dañar el rendimiento de esas consultas que usan el nuevo esquema.
¿Alguien tiene alguna experiencia con este o enfoques similares para eliminar las tablas #temp?
fuente
Esto parece una solución drástica. Hay muchos artículos en línea sobre cómo reducir la contención de tempdb (y optimizar su uso). ¿Su organización ha examinado a fondo esa vía?
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.
fuente
Me parece que deberías solucionar los problemas de rendimiento dentro de tempDB, hay algunas sugerencias aquí
fuente