带有 mnesia/dets 的 Erlang 以崩溃后的缓慢启动时间而闻名。基本上与旧文件系统上的 fsck 问题相同。
但是我在定期关机后也遇到了缓慢的启动时间:在一台强大的机器上,大约 8 分钟的 250 MB 磁盘数据。
所以除了输入“q()”之外,我还必须在关机时做一些特别的事情?有没有办法加快启动时间?
到目前为止我发现的事情:
mnesia:create_table()
不足以更改表类型。采用mnesia:change_table_copy_type()
我通过修复两个表上的表类型问题并将我的数据库大小缩小到 4 MB 来解决我的问题。
在您的主管中,在所有写入 mnesia 的进程都停止后,您应该调用:
application:stop(mnesia)
这将正确关闭该节点上的 mnesia。
q() 应该向 mnesia 应用程序发送停止信号,这与 application:stop(mnesia) 命令相同。我建议尝试使用 mnesia:stop() 命令很好地降低它。
来自 mnesia 文档:
-mnesia no_table_loaders NUMBER
指定启动期间并行表加载器的数量。如果网络延迟很高或者很多表包含很少的记录,则更多的加载器可能会更好。默认值为 2。
如果您有许多表,这将允许您并行加载它们。但它不会加快单个表的开始时间。为此,最好的方法是使用小表,您可以通过将它们分段来完成。