Un mouvement est en cours à mon lieu de travail pour s'éloigner de l'utilisation des tables #temp et utiliser des tables physiques permanentes avec des SPID. Chaque fois que l' on aurait déjà inséré dans une table #temp, maintenant INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)
est nécessaire - avec un tas de DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID
déclarations au début, par exemple , une procédure stockée. De plus, il va sans dire que partout où ces «tables permanentes de stockage de données temporaires» sont utilisées, il faut veiller à inclure a WHERE SPID = @@SPID
.
La logique derrière cette évolution est qu'elle améliorera les performances globales du serveur sur lequel les requêtes s'exécutent (en réduisant les E / S et les conflits dans tempdb). Je n'apprécie pas cette approche pour un certain nombre de raisons - elle est moche, potentiellement dangereuse et semble pouvoir nuire aux performances des requêtes qui utilisent le nouveau schéma.
Quelqu'un a-t-il une expérience avec cette approche ou des approches similaires pour éliminer les tables #temp?
la source
Cela semble être une solution radicale. Il existe de nombreux articles en ligne sur la réduction des conflits de tempdb (et l'optimisation de son utilisation) - votre organisation a-t-elle soigneusement examiné cette avenue?
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.
la source
Cela me semble que vous devriez résoudre les problèmes de performances dans tempDB, il y a quelques suggestions ici
la source