Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang mnesia表的大小(MB)_Erlang_Elixir_Mnesia - Fatal编程技术网

Erlang mnesia表的大小(MB)

Erlang mnesia表的大小(MB),erlang,elixir,mnesia,Erlang,Elixir,Mnesia,您如何阅读:mnesia.info 例如,我只有一个表,一些表,并且:mnesia.info返回这个 ---> Processes holding locks <--- ---> Processes waiting for locks <--- ---> Participant transactions <--- ---> Coordinator transactions <--- ---> Uncertain transactions

您如何阅读
:mnesia.info

例如,我只有一个表,一些表,并且
: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: []

它返回我16020,我想这是键的数量,但是我如何获得内存使用率呢?

你可以使用
erlang:system\u info(wordsize)
以字节为单位获得字的大小,在32位系统上一个字是32位或4字节,在64位系统上是8字节。因此,您的表使用433455 x字号。

首先,您需要
mnesia:table\u info(table,memory)
来获取表占用的项目数,在您的示例中,您获取的是表中的项目数,而不是内存。要将该值转换为MB,您可以首先使用
erlang:system\u info(wordsize)
获取机器体系结构的字节大小(在32位系统上,一个字是4字节,64位是8字节),将其乘以Mnesia表内存以获得字节大小,最后将该值转换为兆字节,如:

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

根据,它的意思是,如果你在现代机器上,它是
16_020*64/8=128_160
bytes≈
128K
。一些表格:16020条记录占据433455个内存字:你必须知道你机器上一个字的大小(可能是64位,可能是32位)这个词让我困惑,不知道如何知道它的大小你能看看这个问题吗?表大小和实际二进制内存使用之间似乎存在很大差异(mnesia正在存储字符串)。我怀疑公式中缺少a*:mnesia MemoryMB=(mnesia:table_info(“some_table”,memory)*erlang:system_info(wordsize))/(1024*1024)。请小心。如果您的表仅使用
光盘\u副本
mnesia:table\u info
返回存储在光盘上的字节数,因此您不需要获取
字号
,您能看看这个问题吗?表大小和实际二进制内存使用之间似乎存在很大差异(mnesia存储字符串)
MnesiaMemoryMB = (mnesia:table_info("some_table", memory) * erlang:system_info(wordsize)) / (1024*1024).