2014-03-19 82 views
14

我有時在使用async_dirty查詢和ram_copies表時,有時會收到mnesia overloaded錯誤消息。因此,要了解正在發生的事情,我希望獲得有關mnesia狀態的更多信息,如每秒查詢次數或查詢隊列大小。我搜查了很多,發現了兩種可能的方法。如何監視mnesia負載?

第一個是mnesia:system_info函數,它可以返回當前事務的列表。但它似乎無法提供有關非事務性查詢的信息。

第二個是訂閱mnesia events,但使用這種方式需要一些活動的後臺處理以及手動訂閱每個表事件。

有沒有更好的方式獲取這些信息?

+1

你可以像你想要什麼樣的信息更具體?這並不完全清楚。 –

+0

@IGIVECRAPANSWERS,關於查詢執行率的任何信息。它可能是最後一秒內執行的元素讀取/寫入次數。也可能是排隊但未完成的基本讀/寫的數量。 – citxx

回答

0

默認情況下,它限制爲4.
您必須將dc_dump_limit從4更改爲50或其他值。 比它會爲你工作。

+0

'dc_dump_limit'控制'disc_copies'表從內存轉儲的頻率。在我的情況下,它不會幫助,因爲我沒有'disc_copies'表。無論如何,問題是如何衡量導致超載的「負載」。 – citxx

+0

-mnesia dc_dump_limit編號 和 (日誌)>(文件大小(選項卡)/ Dc_dump_limit) 其配置參數。 – 2014-03-27 10:59:12

1

我知道這不是最直接的答案,我不像四年前那樣熟悉代碼,但我曾經有過同樣的問題,並且製作了一個監測mnesia寫入統計信息的erlang應用程序吞吐量的SVG圖形:

Mnesia Graphs

如果它是那種你想要的東西,這些測試行使功能:https://github.com/woahdae/mnesia_graphs/blob/master/test/mnesia_graphs_srv_tests.erl

如果是真的你想要的東西,我可能需要在第二次看該項目。我再次在Erlang工作,所以這是一個很好的練習。

此外,還有一個關於誰是好README的提醒是:四年後你自己!

+0

好的。看起來似乎沒有辦法避免主動監控。感謝你的回答。我會看你的代碼。 – citxx

0

前16二郎 1> appmon:start(). 後,您需要使用 1> observer:start(). 對於您需要32位的所有時間WxWidget