2011-07-26 73 views
1

我們有一個冗長的數據庫操作。當我們使用enlist = true執行此操作時,需要29分鐘才能完成。當我們使用enlist = false執行此操作時,僅需15分鐘即可完成。如此巨大的業績衝擊的原因是什麼?它與數據庫服務器有關嗎?交易登記表現問題

我們如何避免它?請分享你的想法。

數據庫:SQL Server 2005

Frameowrk:.Net 3.0

+1

a:操作的本質是什麼(大量小執行?一個大執行?等等)和b:實際上是否存在交易時間? –

+0

csv文件中的總行數爲100000.這些記錄將被插入到表中。我們正在調用相同的存儲過程大約5次。該參數作爲連接字符串傳遞給存儲過程。在SP的每次迭代中將會有一個大的插入物,其中有大約20000條記錄。 – Lijo

+1

建議您發佈代碼,甚至可能是您的服務器/數據庫設置。 –

回答

3

我們該如何避免呢?

在csv文件的行的總數爲100000。

在這種情況下,使用SqlBulkCopy到100,000行寫入到一個臨時表(一個基本和獨立的表,不是你的事務表的一部分;沒有觸發器,外鍵等)。一旦數據在暫存表中,使用TSQL(直接或SPROC)從暫存表執行INSERT,然後執行事務性表,即您的數據所在的位置。該事務只需要跨越這最後一個操作。

這實現了幾個關鍵的事情:

  • SqlBulkCopy使用相同的API批量插入;它是通過網絡將大量數據轉移到SQL Server的最快方式,它最大限度地減少了事務的大小,最顯着的原因是不包括事務中的所有數據傳輸時間;只有核心INSERT是交易型的,但此時所有數據都是本地的
+1

+1。如上所述,舞臺絕對是您的選擇。 –

+0

謝謝... SQLBulkCopyworks 10倍脂肪: - )...閱讀http://stackoverflow.com/questions/6855871/bulkcopy-from-stored-procedure也 – Lijo