Erlang 如何确保mnesia的快速启动时间

Erlang 如何确保mnesia的快速启动时间,erlang,mnesia,Erlang,Mnesia,带有mnesia/dets的Erlang以崩溃后启动速度慢而闻名。基本上与旧文件系统上的fsck问题相同 但我也经历了定期关机后的缓慢启动时间:在一台健壮的机器上,250MB的磁盘数据大约需要8分钟 所以,除了键入“q()”,我还必须在关机时做一些特殊的事情?有没有办法加快启动时间?在您的主管中,在所有写入mnesia的进程停止后,您应该调用: application:stop(mnesia) 这将正确关闭该节点上的mnesia。q()应向mnesia应用程序发送停止信号,该信号与applic

带有mnesia/dets的Erlang以崩溃后启动速度慢而闻名。基本上与旧文件系统上的fsck问题相同

但我也经历了定期关机后的缓慢启动时间:在一台健壮的机器上,250MB的磁盘数据大约需要8分钟


所以,除了键入“q()”,我还必须在关机时做一些特殊的事情?有没有办法加快启动时间?

在您的主管中,在所有写入mnesia的进程停止后,您应该调用:

application:stop(mnesia)

这将正确关闭该节点上的mnesia。

q()应向mnesia应用程序发送停止信号,该信号与application:stop(mnesia)命令相同。我建议尝试使用mnesia:stop()命令将其很好地关闭。

到目前为止我发现的情况:

  • 仅磁盘\u\u表似乎会导致 启动时间比磁盘表长得多
  • 使用新表类型调用
    mnesia:create_table()
    不足以更改表类型。使用
    mnesia:change\u table\u copy\u type()
  • 似乎只有磁盘\u\u表不会收缩,如果删除项目,加载速度也不会加快
我通过修复两个表上的表类型问题并将数据库大小缩小到4 MB来解决问题。

来自mnesia文档:

-mnesia no_table_loaders NUMBER
指定平行工作台的数量 装载机在启动期间。更多的装载机可以 如果网络延迟很高,请保持良好状态 或者如果许多表包含的数据很少 记录。默认值为2


如果您有许多表,这将允许您并行加载它们。但它不会加快单个表的启动时间。为此,最好的方法是使用小表,您可以通过将它们分割来完成。

很抱歉,我没有提到:我调用application:stop(mnesia),但这无助于启动时间。谢谢您的建议。曼妮西亚:停止()没有帮助。似乎我的数据库需要很长时间才能启动。您的mnesia集群中有多少个节点?一个还是多个?有多少张桌子?你对他们使用什么选项?我猜这不是一个关于不干净关机的简单问题,我也想知道更多关于mnesia在大型实际部署中的行为。我只使用了一个节点和十几个表。尝试过了,没有帮助。我现在解决了这个问题,将大约500 MB的数据转移到CouchDB,只在Mnesia中保留了大约10 MB的操作数据,这导致了相当长的启动时间。