记忆表的MB大小

时间:2018-10-11 08:40:57

标签: erlang elixir mnesia

您如何阅读: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 :(得分:3)

首先,您需要mnesia:table_info(Table, memory)来获取表占用的words数,在您的示例中,您获取的是表中的项目数,而不是内存。要将值转换为MB,您可以首先使用erlang:system_info(wordsize)获得适用于您的计算机体系结构的字长(以字节为单位)(在32位系统上,一个字为4字节,而一个64位为8字节),然后乘以Mnesia表内存获取以字节为单位的大小,最后将值转换为兆字节,如:

MnesiaMemoryMB = (mnesia:table_info("some_table", memory) * erlang:system_info(wordsize)) / (1024*1024).

答案 1 :(得分:2)

您可以使用y,x = np.where(img) value = img[np.nonzero(img)] >>> y array([0, 1, 1, 2, 2, 3, 4, 5]) >>> x array([0, 0, 1, 0, 1, 0, 0, 0]) >>> value array([38, 46, 3, 46, 3, 74, 74, 74]) 来获取字的大小(以字节为单位),在32位系统上,一个字是32位或4个字节,在64位上是8个字节。因此您的表使用的是433455 x字长。