5

目前 ZMI 管理“打包数据库”的功能有点粗糙。

1) 是否有可能为 Web UI 提供某种进度指示器?例如,告诉您还剩多少分钟/小时,至少给出某种估计

2) ZODB 打包如何影响站点的响应性?所有交易都被阻止了吗?

3) 任何带有进度指示器的命令行脚本可用,以便您可以从 ZEO 命令行客户端执行此操作?

4) 至少有某种日志标记来注销输出... [INFO] 30% 完成... 3:15 开始

4

4 回答 4

7

包装解剖

ZODB FileStorage 打包是将数据从一个文件选择性地复制到另一个文件的过程(仅限于“年轻”然后指定年龄的事务)。在此复制开始之前,在内存中构建了一些软索引以帮助处理。因此整个 ZODB 打包包含以下步骤:

  1. 建筑包索引
  2. 将事务复制到临时文件
  3. 附加打包开始后执行的事务
  4. 用打包的文件替换原始文件存储并以读/写模式重新打开它

我通常通过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-in​​stance 以传达回浏览器。

包装时的性能

由于 FileStorage 打包是相当密集的磁盘操作,它减少了磁盘子系统的吞吐量。此外,它会清除磁盘缓存(在较大的 FileStorage 的情况下),即使在打包完成后也会影响磁盘性能,因为缓存应该再次预热。在 FileStorage 中导致打包时间更长但对系统影响更小的可能改进是:

  • 恢复O_DIRECT操作(不要触摸文件缓存)
  • ionice为执行打包的线程降低磁盘调度优先级(在 Linux 上)
  • 节流包装速度
于 2011-03-06T00:06:38.573 回答
3

对大型站点进行打包的推荐方法是在专门用于此类任务的单独 ZEO 实例上运行它——根本不监听 http 请求。

这也将消除对任何请求的功能的需求。

于 2011-03-03T15:31:13.833 回答
2

这不是一个问题,而是一个功能请求。它应该在http://plone.uservoice.com/输入,或者在https://bugs.launchpad.net/zope2输入更好,因为 ZMI 是 Zope 2 的特定功能。

于 2011-03-02T21:12:35.397 回答
2

1)没有这样的指标,可能很难实现(我希望通过 Zope 日志系统至少看到一些进度指标)

2) 未阻塞,但根据打包阶段,您可能会看到高 IO 和 CPU 使用率

3) 没有

4) 没有

于 2011-03-03T06:44:52.623 回答