获取或计算 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)).
我想查找 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)).