我们遇到数据库德比问题。有时写作操作需要很多时间。 有可能很多阅读阻止写作的操作? 感谢。
答案 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
允许不可重复的读取和幻像读取,但不允许脏读。)
减少读者阻止作者的另一种方法是让读者跑得更快。通过阅读查询执行计划,明智地使用单列和多列索引,以及定期重建索引以减少碎片来调整查询。