2011-10-25 54 views

回答

2

读取需要共享锁。写入(更新)需要独占锁。要获得排他锁,事务必须等待释放共享锁。所以a reader can block a writer

试图读取相同数据的另一个事务被允许 读取,而是试图更新数据的事务将这样做,直到共享锁被释放可防止 。

另请参阅德比的Type and Scope of Locks

您可以通过更改一个或多个交易的isolation level来降低影响。德比的默认值是READ COMMITTED,这意味着您必须将一个或多个读取器设置为READ UNCOMMITTED以提高并发性。但READ UNCOMMITTED允许脏读,不可重复读取和幻像读取。 (READ COMMITTED允许不可重复的读取和幻像读取,但不允许脏读取。)

减少阅读器阻止作者的另一种方法是使阅读器运行得更快。通过阅读查询执行计划,明智地使用单列索引和多列索引以及定期重建索引以减少碎片来调整查询。