Вам нужно перебрать все таблицы с помощью mnesia:system_info(tables)
и прочитать память каждой таблицы с помощью mnesia:table_info(Table, memory)
, чтобы получить количество слов , занятых вашей таблицей. Чтобы преобразовать это значение в байты, вы можете сначала использовать erlang:system_info(wordsize)
, чтобы получить размер слова в байтах для вашей машинной архитектуры (в 32-битной системе слово составляет 4 байта, а 64 бит - 8 байтов) и умножить его на вашу Mnesia таблица памяти. Примерная реализация:
%% 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)).