是否可以通过读取操作来阻止写入的数据库操作?

时间:2011-10-25 07:44:18

标签: database derby

我们遇到数据库德比问题。有时写作操作需要很多时间。 有可能很多阅读阻止写作的操作? 感谢。

1 个答案:

答案 0 :(得分:2)

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

  

允许尝试读取相同数据的另一个事务   读取,但尝试更新数据的事务将是   在共享锁被释放之前阻止这样做。

另见Derby的Type and Scope of Locks

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

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