Mongodb

即使所有數據都駐留在 RAM 中,MongoDB 也會出現頁面錯誤

  • July 6, 2014

我製作了一個範例應用程序來模擬我的真實應用程序。它只是一遍又一遍地遍歷特定集合的所有文件。

我啟動mongo(作為 Windows 服務)並mongostat顯示幾乎沒有常駐記憶體。

insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time
*0     *0     *0     *0       0     1|0       0      6.03g  6.12g    71m      0 local:0.0%          0       0|0     0|0    62b     3k     3   09:35:11

我在我擁有的單個集合(大約大小)上使用touch命令並顯示:2GB``mongostat

insert  query update delete getmore command flushes mapped  vsize    res faults          locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time
*0     *0     *0     *0       0     5|0       0      6.03g  6.12g   2.1g 427937 HamsterSchool:0.0%          0       0|0     0|0   408b     4k     3   09:39:59
*0     *0     *0     *0       0     1|0       0      6.03g  6.12g   2.1g      0         local:0.0%          0       0|0     0|0    62b     3k     3   09:40:00

看起來好像整個集合現在都駐留在記憶體中,但是當我執行範例應用程序時,無論多長時間,總會出現很多頁面錯誤:

insert  query update delete getmore command flushes mapped  vsize    res faults          locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time
*0     68     *0     *0       0     1|0       0      6.03g  6.12g   2.1g  35616 HamsterSchool:0.0%          0       0|0     1|0     6k    74m     4   09:43:15
*0     68     *0     *0       0     4|0       0      6.03g  6.12g   2.1g  36068 HamsterSchool:0.0%          0       0|0     0|0     6k    75m     5   09:43:16

那麼,如果一切都已經“觸及”,為什麼還會有任何頁面錯誤?重要的是要注意 mongo 在32GBRAM 64bitwindows 機器上執行,並且27GBRAM 始終是免費的。

Windows 上 MongoDB 的頁面錯誤度量本質上包含硬(實際上是命中磁碟)和軟(重新分配記憶體中的指針)頁面錯誤。如果您在 Linux 上執行相同的實驗,頁面錯誤指標僅報告硬頁面錯誤,您將看到您期望的行為。

這是 Windows 版本的一個已知問題,跟踪/投票的相關問題是SERVER-5799

引用自:https://dba.stackexchange.com/questions/69813