获取或计算 Mnesia 总大小

Get or calculate Mnesia total size

我想查找 mnesia 数据库的总大小。我只有一个节点。

我可以从某个函数中获取 mnesia 的大小吗?或者我可以通过某种方式计算它吗?

我查看了文档 http://erlang.org/doc/man/mnesia.html,但找不到为整个数据库获取此类信息的函数。

我是否需要使用 table_info/2 按 table 计算?如果是的话怎么办?

NOTE: I don't know how to do that with the current data points, the size is 2 (for testing I have only 2 entries) and memory is 348.

需要用mnesia:system_info(tables)遍历所有table,用mnesia:table_info(Table, memory)读取每个table内存,得到words占用的个数通过你的 table。要将该值转换为字节,您可以先使用 erlang:system_info(wordsize) 获取机器架构的字节大小(在 32 位系统上,一个字是 4 个字节,64 位是 8 个字节)并将它乘以你的 Mnesia table 记忆。粗略的实现:

%% Obtain the memory in of bytes of all the mnesia tables.
-spec get_mnesia_memory() -> MemInBytes :: number().
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)).