5

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

但是我在定期关机后也遇到了缓慢的启动时间:在一台强大的机器上,大约 8 分钟的 250 MB 磁盘数据。

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

4

4 回答 4

3

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

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

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

于 2009-01-20T22:35:20.663 回答
1

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

application:stop(mnesia)

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

于 2008-12-27T21:45:47.263 回答
1

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

于 2009-01-02T01:04:22.523 回答
1

来自 mnesia 文档:

-mnesia no_table_loaders NUMBER指定启动期间并行表加载器的数量。如果网络延迟很高或者很多表包含很少的记录,则更多的加载器可能会更好。默认值为 2。

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

于 2009-07-24T15:31:09.607 回答