目前 ZMI 管理“打包数据库”的功能有点粗糙。
1) 是否有可能为 Web UI 提供某种进度指示器?例如,告诉您还剩多少分钟/小时,至少给出某种估计
2) ZODB 打包如何影响站点的响应性?所有交易都被阻止了吗?
3) 任何带有进度指示器的命令行脚本可用,以便您可以从 ZEO 命令行客户端执行此操作?
4) 至少有某种日志标记来注销输出... [INFO] 30% 完成... 3:15 开始
ZODB FileStorage 打包是将数据从一个文件选择性地复制到另一个文件的过程(仅限于“年轻”然后指定年龄的事务)。在此复制开始之前,在内存中构建了一些软索引以帮助处理。因此整个 ZODB 打包包含以下步骤:
我通常通过top
, vmstat
/ dstat
,的组合来监控这个过程watch ls -la var/filestorage
。
正如 Geir 所提到的,您可以有单独的 ZEO 客户端专门用于打包。这是合理的,因为您从阻塞调用打包直到打包完成的线程。现在,如果您使用 ZEO,则无需这样做。ZEO 服务器提供zeopack
直接连接到 ZEO 的实用程序(无需专用的 ZEO 客户端)并启动 FileStorage 打包。好处之一是不需要密码,只需适当的权限即可访问 ZEO 控制套接字。
由于打包是由 ZEO 服务器(甚至不是服务器而是 FileStorage 本身)执行的,因此与 ZEO 客户端正确通信进度的可能性是有限的。ZEO 协议并非旨在传达此类信息。
恕我直言,FileStorage 本身在通过日志文件进行通信时可能会更加冗长,它现在正在做什么。可以内置某种进度。如果您觉得需要进度指示器,那么您可以设计某种反馈通道,通过日志模块返回到 ZEO-client/Zope-instance 以传达回浏览器。
由于 FileStorage 打包是相当密集的磁盘操作,它减少了磁盘子系统的吞吐量。此外,它会清除磁盘缓存(在较大的 FileStorage 的情况下),即使在打包完成后也会影响磁盘性能,因为缓存应该再次预热。在 FileStorage 中导致打包时间更长但对系统影响更小的可能改进是:
O_DIRECT
操作(不要触摸文件缓存)ionice
为执行打包的线程降低磁盘调度优先级(在 Linux 上)对大型站点进行打包的推荐方法是在专门用于此类任务的单独 ZEO 实例上运行它——根本不监听 http 请求。
这也将消除对任何请求的功能的需求。
这不是一个问题,而是一个功能请求。它应该在http://plone.uservoice.com/输入,或者在https://bugs.launchpad.net/zope2输入更好,因为 ZMI 是 Zope 2 的特定功能。
1)没有这样的指标,可能很难实现(我希望通过 Zope 日志系统至少看到一些进度指标)
2) 未阻塞,但根据打包阶段,您可能会看到高 IO 和 CPU 使用率
3) 没有
4) 没有