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).