W moim miejscu pracy następuje ruch, aby odejść od używania tabel #temp i zamiast tego używać stałych fizycznych tabel z identyfikatorami SPID. Ilekroć ktoś wcześniej WSTAWIŁO DO tabeli #temp, teraz INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)
jest wymagane - wraz z wiązką DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID
instrukcji na początku np. Procedury składowanej. Ponadto nie trzeba dodawać, że wszędzie tam, gdzie używane są te „stałe tabele do przechowywania danych tymczasowych”, należy zachować ostrożność, aby dołączyć WHERE SPID = @@SPID
.
Logika stojąca za przejściem do tej praktyki polega na tym, że poprawi ona ogólną wydajność serwera, na którym działają zapytania (poprzez zmniejszenie I / O i rywalizacji w tempdb). Nie podoba mi się to podejście z wielu powodów - jest brzydkie, potencjalnie niebezpieczne i wydaje się, że może zaszkodzić wydajności zapytań korzystających z nowego schematu.
Czy ktoś ma jakieś doświadczenie z tym lub podobnym podejściem do eliminowania tabel #temp?
źródło
To wydaje się drastycznym rozwiązaniem. Istnieje wiele artykułów online na temat zmniejszania rywalizacji o tempdb (i optymalizacji jej wykorzystania) - czy Twoja organizacja dokładnie zbadała tę drogę?
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
itp.
źródło
Brzmi dla mnie jak powinno być rozwiązywanie problemów z wydajnością w ramach tempdb, istnieje kilka sugestii w tutaj
źródło