什么SQL-Server锁定级别适合插入?

时间:2010-02-01 00:01:53

标签: sql-server multithreading concurrency locking connection-pooling

我希望每秒在表格中制作近1000个插页。而且每天我只想查询所有插入的行一次。我想通过多线程和连接池来提高效率。但我想知道哪种级别的并发控制更适合我。 SQL-Server的选项列表位于MSDN Site

谢谢。

2 个答案:

答案 0 :(得分:2)

你可能正在咆哮错误的树。请查看使用row-versioning transaction isolation而不是为单个语句提供锁定提示。

我与之交谈的很多人通过使用READ COMMITTED SNAPSHOT取得了良好的效果 - 可以在数据库级别启用,无需更改代码。

我可以说SNAPSHOT过去一直很好用,但确实需要更改代码。

请注意,请确保您的tempdb吞吐量良好,因为行版本会显着增加tempdb的负载。

答案 1 :(得分:2)

对于插入,您应该可以使用默认隔离级别。你有聚集索引吗?如果是这样,请确保在插入新行时它不会碎片化。通常guid会成为聚集索引的不良候选者。此外,如果您有企业版,并且您能够识别表中的分区,则可以使用此列(例如区域或城市)对表进行分区,并将表的分区存储在不同的文件组中。这样您可以避免IO争用。 如果您每天选择一次所有数据,并且您希望在选择期间保持插入速度而不会过多锁定,则可以考虑创建数据库快照(同样是Enterprise Edition)并从中进行选择。如果你可以使用脏读,你可以添加(nolock)提示你的选择。