我想找到一个健忘症数据库的总大小。我只有一个节点。
我可以通过某些功能获得记忆缺失的大小,还是可以通过某种方式计算出来?
我看过文档http://erlang.org/doc/man/mnesia.html,但找不到找到整个数据库的此类信息的功能。
我需要使用table_info/2
为每个表计算它吗?如果可以的话?
[注意:我不知道如何对当前数据点执行此操作,大小为2(用于测试,我只有2个条目),内存为348。
您需要用mnesia:system_info(tables)
遍历所有表,并用mnesia:table_info(Table, memory)
读取每个表存储器以获得表占用的words数。要将值转换为字节,您可以首先使用erlang:system_info(wordsize)
来获取您的机器体系结构的字长(以字节为单位)(在32位系统上,一个字为4字节,而一个64位为8字节),然后乘以Mnesia表内存。粗略的实现:
get_mnesia_memory() ->
WordSize = erlang:system_info(wordsize),
CollectMem = fun(Tbl, Acc) ->
Mem = mnesia:table_info(Tbl, memory) * WordSize,
Acc + Memory
end,
lists:foldl(CollectMem, 0, mnesia:system_info(tables)).