Mnesia 的大小(以 MB 为单位)table
Size in MB of mnesia table
你是怎么读:mnesia.info
的?
比如我只有一个table、some_table和:mnesia.info
returns我这个
---> 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)
它returns me 16020 我认为是键数,但是如何获取内存使用量?
您可以使用 erlang:system_info(wordsize)
获取以字节为单位的字大小,在 32 位系统上一个字是 32 位或 4 个字节,在 64 位系统上是 8 个字节。所以你的 table 使用了 433455 x wordsize。
首先,您需要mnesia:table_info(Table, memory)
获取您的table占用的words个数,在您的示例中,您获取的是table中的项目数,不是记忆。要将该值转换为 MB,您可以首先使用 erlang:system_info(wordsize)
获取机器架构的字大小(以字节为单位)(在 32 位系统上,一个字是 4 个字节,64 位是 8 个字节),将它乘以您的Mnesia table 内存获取以字节为单位的大小,最后将值转换为兆字节,如:
MnesiaMemoryMB = (mnesia:table_info("some_table", memory) * erlang:system_info(wordsize)) / (1024*1024).
你是怎么读:mnesia.info
的?
比如我只有一个table、some_table和:mnesia.info
returns我这个
---> 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)
它returns me 16020 我认为是键数,但是如何获取内存使用量?
您可以使用 erlang:system_info(wordsize)
获取以字节为单位的字大小,在 32 位系统上一个字是 32 位或 4 个字节,在 64 位系统上是 8 个字节。所以你的 table 使用了 433455 x wordsize。
首先,您需要mnesia:table_info(Table, memory)
获取您的table占用的words个数,在您的示例中,您获取的是table中的项目数,不是记忆。要将该值转换为 MB,您可以首先使用 erlang:system_info(wordsize)
获取机器架构的字大小(以字节为单位)(在 32 位系统上,一个字是 4 个字节,64 位是 8 个字节),将它乘以您的Mnesia table 内存获取以字节为单位的大小,最后将值转换为兆字节,如:
MnesiaMemoryMB = (mnesia:table_info("some_table", memory) * erlang:system_info(wordsize)) / (1024*1024).