7

看着我的 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 上的写入太多?

4

2 回答 2

9

冲突确实是因为两个请求同时试图改变 a 而引起PersistentMapping的。然后强制其中之一重试提交。

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

如果没有流量数据以及具体的内容PersistentMapping或您的应用程序如何处理流量数据,就无法判断 4 天内 78 次冲突是多还是少,以及是否值得您切换到不同的容器。

于 2013-10-18T12:29:10.447 回答
6

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

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

如果问题只是内容写入,请寻求减少目录索引和元数据。如果可能,将旧的 Archetypes 样式内容替换为 Dexterity 内容类型。灵巧在内容创建方面要高效得多。

于 2013-10-18T12:29:45.253 回答