如何摆脱ZEO工作者的ConflictError?

时间:2013-10-18 12:17:31

标签: plone zope zodb

看着我的ZEO工作人员,我会看到很多:

2013-10-18T11:59:54 INFO ZPublisher.Conflict ConflictError at
/VirtualHostBase/http/www.domain.com:80/Plone/VirtualHostRoot/:
database conflict error (oid 0x533cd5, class
persistent.mapping.PersistentMapping) (78 conflicts (0 unresolved)
since startup at Mon Oct 14 04:09:45 2013)

因为它们被记录为INFO我应该认为这根本没有害处吗?

我想如果发生冲突是因为ZODB上的写入太多了?

2 个答案:

答案 0 :(得分:9)

冲突确实是因为两个请求同时尝试更改PersistentMapping。然后,其中一个被迫重试提交。

使用这些条目来查明应用程序中的瓶颈;也许用BTree.OOBTree替换特定映射,通过在单独的持久存储桶上传播键值对来最小化冲突。

如果没有流量数据以及特定PersistentMapping拥有什么或您的应用程序使用了什么,就不可能说出4天内的78次冲突是很多还是一点,并且如果值得您转换的话到另一个容器。

答案 1 :(得分:6)

冲突错误本身并不是有害的。 ZEO服务器将重试几次以解决错误。但它们是数据库中写入争用的标志,其中很多都表明您的当前配置存在瓶颈。您的用户很快就会抱怨性能不佳。

您应该开始分析,以确定您是否有一些附加程序包正在对数据库进行过多或非常低效的写入。例如,最糟糕的情况是,某些代码试图在每个页面加载时写入数据库,就像流量记录器一样。 ZODB针对读取而非写入进行了优化,应重新设计这些操作,以将其数据存储放在ZODB以外的其他位置。

如果只是内容写入是问题,请查看减少目录索引和元数据。如果可能的话,用Dexterity内容类型替换旧的Archetypes风格的内容。敏捷在内容创建方面效率更高。