Mongodb

高背景刷新平均mongodb

  • May 13, 2014

類似問題:Mongodb 上的 High Global Lock %

概述

我們在 v2.4.8 mongodb 中有一個生產設置副本集,執行在五個 4 核、28gb RAM 虛擬機上,標準 azure datadisk HDD 在 64 位 CentOS 6 上執行。我們以大約 600-700 ops/sec/secondary 的速度在輔助節點上分配讀取。每個輔助節點的 CPU 使用率約為 15%。主伺服器上的 CPU 使用率約為 5-10%。我們目前在我們的主節點上遇到高全域寫入鎖定和後台刷新平均值的問題。儘管每秒只有大約 200 次插入/更新/刪除,但我們的主節點上的全域寫入鎖定在 30-40% 之間(請參閱下面的 MMS 輸出)。我們還注意到我們的後台刷新平均在 2 到 15 秒之間。不幸的是,這會導致大量緩慢的查詢(每秒最多 50 次更新/插入 > 100 毫秒)。我們考慮過分片,但覺得 mongodb 的性能應該比這更好。

測試

這告訴我,我們在寫入 HDD 時遇到問題,但執行一個簡單的 iostat 顯示我們在 sdc(我們正在寫入的磁碟)上的使用率沒有達到最大值,並且在 20% 到 40% 之間:

$ iostat -x 1

4秒的結果:

Linux 2.6.32-279.14.1.el6.openlogic.x86_64 (mongodb3-wus)   05/08/2014  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          5.28    0.00    1.82    5.50    0.00   87.40

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.05     0.04    0.06    0.11     3.25     1.23    26.13     0.00   18.07  14.87   0.25
sdc               0.02   216.57    1.70   95.83   216.22  3106.45    34.07     9.27   95.07   4.32  42.11
sdb               0.00    11.35    0.01    0.56     0.05    95.25   169.44     0.01   18.44   0.11   0.01

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          2.56    0.00    2.05    0.00    0.00   95.38

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00   15.00     0.00   624.00    41.60     0.20   11.80  13.47  20.20
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          3.07    0.00    3.07    0.26    0.00   93.61

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    3.00   15.00    24.00   352.00    20.89     0.25   15.17  13.44  24.20
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          3.33    0.00    1.79    0.77    0.00   94.10

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00    11.00    0.00   17.00     0.00   768.00    45.18     0.26   15.18  14.35  24.40
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

我還使用 dd 執行了一個簡單的負載測試:

dd if=/dev/zero of=/dev/sdc1 count=512 bs=1024k

該測試的結果表明寫入速度約為 840 MB/s:

512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 0.638451 s, 841 MB/s

mongodb的ulimit結果:

[mongod #8066 -- limits]
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            10485760             unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             224341               224341               processes 
Max open files            20000                20000                files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       224341               224341               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us   

MMS、Mongostat、Mongotop 用於初級

我還在下面提供了我們的 MMS 輸出、mongostat 和 mongotop 輸出:

!MMS:彩信輸出點擊這裡

蒙古國:

connected to: 127.0.0.1:27019
   insert  query update delete getmore command flushes mapped  vsize    res faults      locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn set repl       time 
       26     41     95     *0     294   178|0       0  52.4g   107g  25.1g      0  chronicle:5.6%          0      65|2     1|4    45k   136k   486 rs0  PRI   23:15:18 
       96    158    524     *0    1266   783|0       0  52.4g   107g  25.1g      1 chronicle:82.9%          0       0|0     0|0   235k   759k   486 rs0  PRI   23:15:19 
       33     62    109     *0     637   253|0       0  52.4g   107g  25.1g      0      local:7.2%          0       0|0     0|0    78k   208k   486 rs0  PRI   23:15:20 
       58     89    153     *0     920   321|0       0  52.4g   107g  25.1g      0     local:16.1%          0       0|0     0|1   113k   569k   486 rs0  PRI   23:15:21 
       55     95    138     *0     887   322|0       0  52.4g   107g  25.1g      0 chronicle:20.3%          0       0|0     0|0   111k   297k   486 rs0  PRI   23:15:22 
       24     59     81     *0     217   174|0       0  52.4g   107g  25.1g      1         .:88.5%          0      23|0     0|1    46k   141k   486 rs0  PRI   23:15:23 
       51     64    136     *0     760   263|0       0  52.4g   107g  25.1g      0 chronicle:17.1%          0       0|0     0|0    93k   266k   486 rs0  PRI   23:15:24 
       42     60    129     *0     695   288|0       0  52.4g   107g  25.1g      0      local:7.3%          0       0|0     0|0    90k   253k   486 rs0  PRI   23:15:25 
       33     55     99     *0     693   215|0       0  52.4g   107g  25.1g      1      local:3.1%          0       0|0     0|0    76k   455k   486 rs0  PRI   23:15:26 
       45     70     95     *0     763   250|0       0  52.4g   107g  25.1g      1      local:9.0%          0       0|0     0|0    88k   225k   486 rs0  PRI   23:15:27 

蒙戈托普:

connected to: 127.0.0.1:27019

                                    ns       total        read       write     2014-05-07T23:09:17
                     chronicle.ledgers        93ms         0ms        93ms
                        local.oplog.rs        47ms        47ms         0ms
                        cliqueme.sites        13ms         0ms        13ms
                   chronicle.analytics         4ms         0ms         4ms
         chronicle_test.system.indexes         0ms         0ms         0ms
      chronicle_test.system.namespaces         0ms         0ms         0ms
           chronicle_test.system.users         0ms         0ms         0ms

                                    ns       total        read       write     2014-05-07T23:09:18
                     chronicle.ledgers       101ms         0ms       101ms
                        local.oplog.rs        66ms        66ms         0ms
                      cliqueme.cliques        19ms         0ms        19ms
                   chronicle.analytics         6ms         0ms         6ms
                        cliqueme.sites         4ms         0ms         4ms
                          local.slaves         1ms         0ms         1ms
                cliqueme.notifications         0ms         0ms         0ms
                     cliqueme.messages         0ms         0ms         0ms

                                    ns       total        read       write     2014-05-07T23:09:19
                        local.oplog.rs        66ms        66ms         0ms
                     chronicle.ledgers        52ms         0ms        52ms
                   chronicle.analytics        24ms         0ms        24ms
                      cliqueme.cliques         7ms         0ms         7ms
                        cliqueme.sites         4ms         0ms         4ms
                          local.slaves         1ms         0ms         1ms
                cliqueme.notifications         0ms         0ms         0ms
                     cliqueme.messages         0ms         0ms         0ms

                                    ns       total        read       write     2014-05-07T23:09:20
                     chronicle.ledgers      1842ms         0ms      1842ms
                        cliqueme.sites       885ms         0ms       885ms
                      cliqueme.cliques        70ms         0ms        70ms
                        local.oplog.rs        55ms        55ms         0ms
                   chronicle.analytics         5ms         0ms         5ms
                          local.slaves         1ms         0ms         1ms
                cliqueme.notifications         0ms         0ms         0ms
                     cliqueme.messages         0ms         0ms         0ms

                                    ns       total        read       write     2014-05-07T23:09:21
                     chronicle.ledgers        84ms         0ms        84ms
                        local.oplog.rs        64ms        64ms         0ms
                        cliqueme.sites        41ms         0ms        41ms
                      cliqueme.cliques        11ms         0ms        11ms
                   chronicle.analytics         4ms         0ms         4ms
         chronicle_test.system.indexes         0ms         0ms         0ms
      chronicle_test.system.namespaces         0ms         0ms         0ms
           chronicle_test.system.users         0ms         0ms         0ms

                                    ns       total        read       write     2014-05-07T23:09:22
                     chronicle.ledgers       276ms         0ms       276ms
                        local.oplog.rs        90ms        90ms         0ms
                      cliqueme.cliques        16ms         0ms        16ms
                   chronicle.analytics         6ms         0ms         6ms
                        cliqueme.sites         4ms         0ms         4ms
                          local.slaves         1ms         0ms         1ms
                cliqueme.notifications         0ms         0ms         0ms
                     cliqueme.messages         0ms         0ms         0ms

有人對我們如何優化此性能有任何建議嗎?我們聽說有些人在單機中可以達到每秒 2K 的寫入量?從 HDD 切換到 RAID 或 SSD 可能會解決這個問題嗎?

我們希望使用分片作為最後的手段。

更新:我們仍然無法解決這個問題,但是因為我們需要一個快速的解決方案,所以我們已經轉移到了一個分片集群。我們仍然想找出問題所在,因為它仍然影響著分片集群中的我們​​。

您的 mongo 統計數據顯示更新數量高於插入數量。可能導致高寫入鎖定問題的一件事是,如果您的更新通常會增加文件大小並導致文件在數據文件中移動。我們自己也遇到了這個問題,但當時我們正在與 mongo 支持人員合作以解決這個問題,所以我不記得是什麼指標或統計數據會告訴你這種情況。如果您的文件尺寸非常大,這可能只是一個問題。我們最終拆分了一個子數組,該子數組總是被添加到它自己的集合中,這樣我們就只是添加新文件而不是修改現有文件。

集合上的 usePowerOf2Sizes 標誌也可以通過為文件提供增長空間來幫助緩解這種情況。這顯然是現在 2.6 的預設設置,但如果您還沒有使用 2.6,則需要將其打開。此處描述的設置:http: //docs.mongodb.org/manual/reference/command/collMod/

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