2017-09-28 66 views
0

我有兩個應用程序對同一個SQL Server表執行某些操作。一個應用程序使用C#SqlBulkCopy將大約二十萬條記錄導入到SQL Server表中,而另一個應用程序則從同一個SQL Server表中查詢數據。SQL Server暫停

我找到了這條信息 - 請檢查截圖。這張桌子有一億行。我該如何解決它?

Please check this picture

+2

如果您的應用程序#1將大量的200,000行加載到表中,那麼在加載過程中該表將被**獨佔鎖定**因此,您的應用程序#2將無法查詢該表,**直到加載過程完成。** –

+0

所以我什麼都不能做?我認爲SqlBulkCopy wait_time = 4314076毫秒是慢。是SqlBulkCopy問題嗎? –

回答

1

如果任何事務修改表和影響超過5000行,那麼SQL Server將升級從行級鎖鎖定爲獨佔表鎖。

因此,如果您的應用程序#1將大量的200,000行加載到表中,那麼在加載過程中該表將被獨佔鎖定。

因此,您的應用程序#2或任何其他客戶端將無法查詢該表,直到加載過程完成。

這是SQL Server部分的正常,記錄,預期行爲

請確保您在營業時間內一次加載少於5000行的批量數據,或者在沒有人受到獨佔表鎖的負面影響後,再進行批量加載。

+0

在這種情況下,「NOLOCK」暗示會有幫助嗎? – Nisarg

+0

@NisargShah:我不這麼認爲,因爲整個桌子都被鎖定 –