什么SQL Server锁定级别适用于插入?

3
我希望每秒能在一个表中插入近1000条记录。每天我也想一次性查询所有已插入的行。我想通过多线程和连接池来提高效率。但是我想知道哪种并发控制级别更适合我。SQL-Server的选项列表在MSDN网站上。谢谢。

你是在谈论插入时的锁定吗?还是在进行每天一次的读取时的锁定?或者你是想确保多个线程不会插入相同的项目? - slugster
每日一次是正常的。我想改变插入锁定。但它应该与每日一次保持一致。 - Shayan
2个回答

2
你可能在错误的方向上努力。不妨考虑使用行版本事务隔离,而不是为个别语句提供锁提示。
我和许多人交流后发现,使用“读提交快照”能够取得良好的效果,它可以在数据库级别启用,无需更改代码。
我可以说,过去“快照”对我很有帮助,但它确实需要更改代码。
还要注意一点,确保你的tempdb吞吐量良好,因为行版本控制会显著增加tempdb的负载。

2

对于插入操作,您应该使用默认隔离级别就可以了。您是否有聚集索引?如果是,确保在插入新行时不会碎片化。通常,guid 不是聚集索引的好选择。此外,如果您有企业版,并且能够识别表中的分区,则可以使用此列(例如 region 或 city)对表进行分区,并将表的分区存储在不同的文件组中。这样,您就可以避免 IO 冲突。

如果您每天需要一次选择所有数据,并且希望在选择过程中维护插入速度而不会出现太多锁定,则可以考虑创建数据库快照(再次使用企业版),然后从中进行选择。如果您可以接受脏读取,可以在选择语句中添加 with(nolock) 提示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接