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

时间:2008-12-27 21:32:08

标签: erlang mnesia

Erlang与mnesia / dets以崩溃后的启动时间慢而闻名。基本上与旧文件系统上的fsck相同。

但是我经常关机后的启动时间也很慢:在一台强大的机器上,大约需要8分钟的250 MB磁盘数据。

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

4 个答案:

答案 0 :(得分:3)

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

  • disk_only_tables似乎导致了 比disk_tables更长的启动时间
  • 使用新表类型调用mnesia:create_table()不足以更改表类型。使用mnesia:change_table_copy_type()
  • 如果删除项目,似乎disk_only_tables不收缩,加载速度也不快。

我通过修复两个表上的表类型问题并将数据库大小缩小到4 MB来解决了我的问题。

答案 1 :(得分:1)

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

application:stop(mnesia)

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

答案 2 :(得分:1)

q()应该将停止信号发送到mnesia应用程序,该应用程序与应用程序:stop(mnesia)命令相同。我建议尝试使用mnesia:stop()命令很好地降低它。

答案 3 :(得分:1)

来自mnesia docs:

  

-mnesia no_table_loaders NUMBER指定并行表的数量   装载机在启动时。更多的装载机可以   如果网络延迟很高,那就好了   或者如果许多表包含很少   记录。默认值为2.

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