Gerakan sedang berlangsung di tempat kerja saya untuk menjauh dari menggunakan tabel #temp dan alih-alih menggunakan tabel fisik permanen dengan SPID. Kapan pun seseorang sebelumnya akan menyisipkan ke tabel #temp, sekarang INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)
diperlukan - bersama-sama dengan sekelompok DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPID
pernyataan di awal misalnya prosedur tersimpan. Selain itu, tidak perlu dikatakan bahwa dimanapun 'tabel permanen untuk menyimpan data sementara' ini digunakan, kita harus berhati-hati untuk memasukkan a WHERE SPID = @@SPID
.
Logika di balik langkah menuju praktik ini adalah bahwa ia akan meningkatkan kinerja keseluruhan server tempat kueri berjalan (dengan mengurangi I / O dan pertikaian dalam tempdb). Saya tidak tertarik pada pendekatan ini karena sejumlah alasan - itu jelek, berpotensi berbahaya dan sepertinya itu mungkin merusak kinerja pertanyaan-pertanyaan yang menggunakan skema baru.
Apakah ada yang punya pengalaman dengan ini atau pendekatan serupa untuk menghilangkan tabel #temp?
sumber
Ini sepertinya solusi yang drastis. Ada banyak artikel online tentang mengurangi pertikaian tempdb (dan mengoptimalkan penggunaannya) - sudahkah org Anda memeriksa dengan seksama jalan itu?
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
dll.
sumber
Bagi saya sepertinya Anda harus mengatasi masalah kinerja dalam tempDB, ada beberapa saran di sini
sumber