3

我想每秒在表中創建近1000個插入。而且我每天都想查詢所有插入的行。我想通過多線程和連接池來提高效率。但我想知道哪個級別的併發控制更適合我。 SQL-Server的選項列表在MSDN Site什麼SQL-Server鎖定級別適合插入?

謝謝。

+0

你在說插入時是否在鎖定?或者在每天進行一次讀取時鎖定?還是你想確保多個線程不插入相同的項目? – slugster 2010-02-01 00:16:26

+0

每天一個是正常的。我想更改插入鎖定。但它應該與日報一致。 – Shayan 2010-02-01 00:27:45

回答

2

對於插入,您應該可以使用默認的隔離級別。你有聚集索引嗎?如果是這樣,請確保它在插入新行時不會碎裂。一般來說,guid是聚集索引的一個不好的候選者。另外,如果您擁有企業版,並且可以識別表中的分區,則可以使用此列(例如區域或城市)對錶進行分區,並將表的分區存儲在不同的文件組中。這樣可以避免IO爭用。 如果您每天選擇全部數據,並且您希望在選擇過程中保持插入速度而沒有太多鎖定,則可以考慮創建數據庫快照(再次Enterprise Edition)並從中進行選擇。如果你可以忍受髒讀,你可以添加(nolock)暗示給你的選擇。

2

你可能會吠叫錯誤的樹。看看使用row-versioning transaction isolation而不是提供個別語句的鎖定提示。

通過使用READ COMMITTED SNAPSHOT,可以在數據庫級別啓用並且不需要更改代碼,我與之交談的許多人都獲得了良好的結果。

我可以說SNAPSHOT在過去幫助過我,但它確實需要更改代碼。

還有一句警告,請確保您的tempdb吞吐量良好,因爲行版本化會顯着增加tempdb上的負載。