获取或计算Mnesia的总大小

问题描述 投票:1回答:1

我想找到一个健忘症数据库的总大小。我只有一个节点。

我可以通过某些功能获得记忆缺失的大小,还是可以通过某种方式计算出来?

我看过文档http://erlang.org/doc/man/mnesia.html,但找不到找到整个数据库的此类信息的功能。

我需要使用table_info/2为每个表计算它吗?如果可以的话?

[注意:我不知道如何对当前数据点执行此操作,大小为2(用于测试,我只有2个条目),内存为348。

erlang elixir mnesia
1个回答
0
投票

您需要用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)).
© www.soinside.com 2019 - 2024. All rights reserved.