如何监控 mnesia 负载?

Posted

技术标签:

【中文标题】如何监控 mnesia 负载?【英文标题】:How to monitor mnesia load? 【发布时间】:2014-04-25 12:32:17 【问题描述】:

在主要使用async_dirty 查询和ram_copies 表时,我有时会收到mnesia overloaded 错误消息。因此,要了解发生了什么,我想获取有关 mnesia 状态的更多信息,例如每秒查询数或查询队列的大小。我搜索了很多,发现了两种可能的方法。

第一个是mnesia:system_info函数,可以返回当前交易的列表。但它似乎无法提供有关非事务性查询的信息。

第二种是订阅mnesia events,但是使用这种方式需要一些主动的后台处理以及手动订阅每个表事件。

有没有更好的方法来获取这些信息?

【问题讨论】:

您能否更具体地说明您想要什么样的信息?这并不完全清楚。 @IGIVECRAPANSWERS,有关查询执行率的任何信息。它可能是在最后一秒内执行的基本读/写次数。也可能是排队但未完成的基本读/写次数。 【参考方案1】:

我知道这不是最直接的答案,而且我不像四年前那样熟悉代码,但我曾经有同样的问题,并制作了一个监控 mnesia 写入统计信息的 erlang 应用程序服务于SVG 吞吐量图:

Mnesia Graphs

如果它是您想要的东西,测试会执行功能:https://github.com/woahdae/mnesia_graphs/blob/master/test/mnesia_graphs_srv_tests.erl

如果它真的是你想要的,我可以再看看这个项目。我又在 Erlang 工作了,所以这是一个很好的练习。

另外,还有一个提醒,一个好的 README 是给谁的:四年后的你自己!

【讨论】:

好的。看起来没有办法避免主动监控。感谢您的回答。我会看看你的代码。【参考方案2】:

默认限制为 4。 您必须将 dc_dump_limit 从 4 更改为 50 或其他内容。 比它对你有用。

【讨论】:

dc_dump_limit 控制disc_copies 表从内存中转储的频率。就我而言,这无济于事,因为我没有 disc_copies 表。无论如何,问题是如何测量导致过载的“负载”。 -mnesia dc_dump_limit Number and (Log) > (filesize(Tab)/ Dc_dump_limit) 它是一个配置参数。【参考方案3】:

16 岁之前的二郎 1> appmon:start(). 需要使用后 1> observer:start(). 任何时候你都需要 32 位 WxWidget

过去两年我们使用Folsomite Erlang event capture,为了触发和可视化捕获的事件和指标,我们使用Icinga和Graphite

【讨论】:

以上是关于如何监控 mnesia 负载?的主要内容,如果未能解决你的问题,请参考以下文章

生产中的超大型 Mnesia 表

如何将 mnesia 节点添加到现有集群

如何将节点添加到 mnesia 集群?

Erlang-如何在没有记录的情况下使用 Mnesia

Erlang:为 mnesia 指定工作目录?

如何向所有连接的节点添加一列 - mnesia 表