如何摆脱ZEO工作者的ConflictError?

gfo*_*ada 7 zope plone 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)
Run Code Online (Sandbox Code Playgroud)

因为他们被记录,INFO我认为这根本不是有害的吗?

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

Mar*_*ers 9

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

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

如果没有流量数据以及特定内容PersistentMapping或应用程序对其执行的操作,则无法确定4天内的78次冲突是很多还是一次,以及是否值得您切换到不同的容器.


Ste*_*veM 6

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

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

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