我在SQL Server 2008中有大約70列的大表。多線程.NET應用程序正在調用數據庫上的存儲過程以插入/更新表。頻率大約是每秒3次。在SQL Server上插入/更新表鎖定
由於幾乎每個查詢在表上都有一個datetime
約束,我已經在表上做了每週分區。
有時插入/更新表格需要很長時間。我懷疑有時INSERTION會使UPDATE等待;有時UPDATE會使INSERTION等待。可能嗎?
我該如何設計表格來避免這種鎖?性能是這裏的主要問題。
我在SQL Server 2008中有大約70列的大表。多線程.NET應用程序正在調用數據庫上的存儲過程以插入/更新表。頻率大約是每秒3次。在SQL Server上插入/更新表鎖定
由於幾乎每個查詢在表上都有一個datetime
約束,我已經在表上做了每週分區。
有時插入/更新表格需要很長時間。我懷疑有時INSERTION會使UPDATE等待;有時UPDATE會使INSERTION等待。可能嗎?
我該如何設計表格來避免這種鎖?性能是這裏的主要問題。
你說得對,你可能正在造成死鎖,導致事情等待。首先要檢查幾件事情;
NOLOCK是否可用於插入/更新? –
NOLOCK提示不可用於插入/更新「READPAST,NOLOCK和READUNCOMMITTED不允許」(來源:http://msdn.microsoft.com/en-us/library/aa260662(v=sql.80)的.aspx) – Gibron
是否可以批量插入條目?如果是這樣,您可以累積一分鐘的值並進行批量插入。還要檢查在該表上的觸發器中是否執行了任何性能密集型操作。 –
批量插入是不可能的。因爲每個記錄都是通過Web服務調用接收的 –
表的讀取頻率如何?如果表經常被讀取,你可能會考慮在選擇查詢中使用「noLock」。同樣,如果更新不會基於相同的主鍵來執行,您也可以考慮更新/插入中的nolock。 –