У меня на работе есть движение отойти от использования #temp таблиц и вместо этого использовать постоянные физические таблицы с SPID. Всякий раз, когда кто-то ранее вставлял в таблицу #temp, теперь INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)
требуется an - вместе с кучей DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID
операторов в начале, например, хранимой процедуры. Кроме того, само собой разумеется, что везде, где используются эти «постоянные таблицы для хранения временных данных», нужно быть осторожным, чтобы включить WHERE SPID = @@SPID
.
Логика, лежащая в основе этой практики, заключается в том, что она улучшит общую производительность сервера, на котором выполняются запросы (за счет уменьшения количества операций ввода-вывода и конфликтов в базе данных tempdb). Я не заинтересован в таком подходе по ряду причин - он уродлив, потенциально опасен и кажется, что он может сильно повредить производительности тех запросов, которые используют новую схему.
У кого-нибудь есть опыт использования этого или подобных подходов к устранению таблиц #temp?
источник
Это похоже на радикальное решение. В Интернете много статей о сокращении разногласий с tempdb (и об оптимизации его использования) - тщательно ли проверила ваша организация этот подход?
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
и т.п.
источник
Звуки мне , как вы должны быть устранение неисправностей проблемы с производительностью в пределах TempDb, есть несколько предложений в здесь
источник