Размер в МБ таблицы мнезии - PullRequest
0 голосов
/ 11 октября 2018

Как вы читаете :mnesia.info?

Например, у меня есть только одна таблица, some_table, и :mnesia.info возвращает мне это.

---> Processes holding locks <--- 
---> Processes waiting for locks <--- 
---> Participant transactions <--- 
---> Coordinator transactions <---
---> Uncertain transactions <--- 
---> Active tables <--- 
some_table: with 16020    records occupying 433455   words of mem
schema         : with 2        records occupying 536      words of mem
===> System info in version "4.15.5", debug level = none <===
opt_disc. Directory "/home/ubuntu/project/Mnesia.nonode@nohost" is NOT used.
use fallback at restart = false
running db nodes   = [nonode@nohost]
stopped db nodes   = [] 
master node tables = []
remote             = []
ram_copies         = ['some_table',schema]
disc_copies        = []
disc_only_copies   = []
[{nonode@nohost,ram_copies}] = [schema,'some_table']
488017 transactions committed, 0 aborted, 0 restarted, 0 logged to disc
0 held locks, 0 in queue; 0 local transactions, 0 remote
0 transactions waits for other nodes: []

Также звоните:

:mnesia.table_info("some_table", :size)

Возвращает мне 16020, которое, я думаю, является количеством ключей, но как я могу получить использование памяти?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Во-первых, вам нужно mnesia:table_info(Table, memory), чтобы получить количество слов , занятых вашей таблицей, в вашем примере вы получаете количество элементов в таблице, а не память.Чтобы преобразовать это значение в МБ, вы можете сначала использовать erlang:system_info(wordsize), чтобы получить размер слова в байтах для архитектуры вашей машины (в 32-битной системе слово составляет 4 байта, а в 64 битах - 8 байтов), умножьте его на таблицу Mnesia.память для получения размера в байтах и, наконец, преобразования значения в мегабайты, например:

MnesiaMemoryMB = (mnesia:table_info("some_table", memory) * erlang:system_info(wordsize)) / (1024*1024).
0 голосов
/ 12 октября 2018

Вы можете использовать erlang:system_info(wordsize), чтобы получить размер слова в байтах, в 32-битной системе слово составляет 32 бита или 4 байта, в 64-битной - 8 байтов.Таким образом, ваша таблица использует 433455 x wordize.

...