【问题标题】:Berkeley DB: Number of lock objects for hash access methodBerkeley DB:哈希访问方法的锁定对象数
【发布时间】:2010-08-17 04:28:39
【问题描述】:
【问题讨论】:
标签:
hash
locking
berkeley-db
【解决方案1】:
这里描述的是如何计算应用程序所需的锁对象的数量,尽管默认的锁对象配置(1000)通常就足够了。它描述了给定的单个数据访问操作需要多少锁对象,以便您可以乘以并发数据访问操作的数量并适当地配置锁对象的数量。这并不是真正谈论锁争用。
对于 HASH 访问方法,给定的键值直接映射到哈希桶。为了访问数据,只需要查看(并锁定)一页。这与 Btree(需要遍历内部索引节点才能获取数据)和 Queue(需要锁定每条记录和记录所在的页面)不同。
在最近的版本中,我们实际上消除了一些不需要的锁,因此更简单的方法是:
每个数据库操作都需要
- 一个锁对象用于正在访问的页面(Btree、Hash 或 Recno)或记录(队列),
- 为元数据页加一个锁对象,
- 加上一个锁对象如果需要一个Btree分页,
- 每页加一个锁对象如果正在使用队列
基本上,每次数据访问通常需要 2-3 个锁对象。事务累积锁对象直到事务完成,因此如果您的应用程序中的事务通常访问 10 条记录,则该事务将需要 20-30 个锁对象。如果您的应用程序中最多可以有 10 个并发线程,那么您需要将系统配置为拥有大约 300 个锁对象。配置比您需要的更多总是更好,这样您就不会用完并且过度分配锁对象的内存开销最小(它们是小型结构)。
希望对你有帮助。
戴夫