<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    mongodb的監控與性能優化

    .mongodb的監控

     

    mongodb可以通過profile來監控數據,進行優化。

    查看當前是否開啟profile功能用命令

    db.getProfilingLevel()  返回level等級,值為0|1|2,分別代表意思:0代表關閉,1代表記錄慢命令,2代表全部

    開始profile功能為

    db.setProfilingLevel(level);  #level等級,值同上

    level為1的時候,慢命令默認值為100ms,更改為db.setProfilingLevel(level,slowms)如db.setProfilingLevel(1,50)這樣就更改為50毫秒

    通過db.system.profile.find() 查看當前的監控日志。

    如:

     

     

    Js代碼  
    1. > db.system.profile.find({millis:{$gt:500}})  
    2. { "ts" : ISODate("2011-07-23T02:50:13.941Z"), "info" : "query order.order reslen:11022 nscanned:672230  \nquery: { status: 1.0 } nreturned:101 bytes:11006 640ms", "millis" : 640 }  
    3. { "ts" : ISODate("2011-07-23T02:51:00.096Z"), "info" : "query order.order reslen:11146 nscanned:672302  \nquery: { status: 1.0, user.uid: { $gt: 1663199.0 } }  nreturned:101 bytes:11130 647ms", "millis" : 647 }  

     這里值的含義是

     

    ts:命令執行時間

    info:命令的內容

    query:代表查詢

    order.order: 代表查詢的庫與集合

    reslen:返回的結果集大小,byte數

    nscanned:掃描記錄數量

    nquery:后面是查詢條件

    nreturned:返回記錄數及用時

    millis:所花時間


     

    如果發現時間比較長,那么就需要作優化。

    比如nscanned數很大,或者接近記錄總數,那么可能沒有用到索引查詢。

    reslen很大,有可能返回沒必要的字段。

    nreturned很大,那么有可能查詢的時候沒有加限制。


    mongo可以通過db.serverStatus()查看mongod的運行狀態

     

     

    Js代碼  
    1. > db.serverStatus()  
    2. {  
    3.     "host" : "baobao-laptop",#主機名  
    4.     "version" : "1.8.2",#版本號  
    5.     "process" : "mongod",#進程名  
    6.     "uptime" : 15549,#運行時間  
    7.     "uptimeEstimate" : 15351,  
    8.     "localTime" : ISODate("2011-07-23T06:07:31.220Z"),當前時間  
    9.     "globalLock" : {  
    10.         "totalTime" : 15548525410,#總運行時間(ns)  
    11.         "lockTime" : 89206633,  #總的鎖時間(ns)  
    12.         "ratio" : 0.005737305027178137,#鎖比值  
    13.         "currentQueue" : {  
    14.             "total" : 0,#當前需要執行的隊列  
    15.             "readers" : 0,#讀隊列  
    16.             "writers" : 0#寫隊列  
    17.         },  
    18.         "activeClients" : {  
    19.             "total" : 0,#當前客戶端執行的鏈接數  
    20.             "readers" : 0,#讀鏈接數  
    21.             "writers" : 0#寫鏈接數  
    22.         }  
    23.     },  
    24.     "mem" : {#內存情況  
    25.         "bits" : 32,#32位系統  
    26.         "resident" : 337,#占有物理內存數  
    27.         "virtual" : 599,#占有虛擬內存  
    28.         "supported" : true,#是否支持擴展內存  
    29.         "mapped" : 512  
    30.     },  
    31.     "connections" : {  
    32.         "current" : 2,#當前鏈接數  
    33.         "available" : 817#可用鏈接數  
    34.     },  
    35.     "extra_info" : {  
    36.         "note" : "fields vary by platform",  
    37.         "heap_usage_bytes" : 159008,#堆使用情況字節  
    38.         "page_faults" : 907 #頁面故作  
    39.     },  
    40.     "indexCounters" : {  
    41.         "btree" : {  
    42.             "accesses" : 59963, #索引被訪問數  
    43.             "hits" : 59963, #所以命中數  
    44.             "misses" : 0,#索引偏差數  
    45.             "resets" : 0,#復位數  
    46.             "missRatio" : 0#未命中率  
    47.         }  
    48.     },  
    49.     "backgroundFlushing" : {      
    50.         "flushes" : 259,  #刷新次數  
    51.         "total_ms" : 3395, #刷新總花費時長  
    52.         "average_ms" : 13.108108108108109, #平均時長  
    53.         "last_ms" : 1, #最后一次時長  
    54.         "last_finished" : ISODate("2011-07-23T06:07:22.725Z")#最后刷新時間  
    55.     },  
    56.     "cursors" : {  
    57.         "totalOpen" : 0,#打開游標數  
    58.         "clientCursors_size" : 0,#客戶端游標大小  
    59.         "timedOut" : 16#超時時間  
    60.     },  
    61.     "network" : {  
    62.         "bytesIn" : 285676177,#輸入數據(byte)  
    63.         "bytesOut" : 286564,#輸出數據(byte)  
    64.         "numRequests" : 2012348#請求數  
    65.     },  
    66.     "opcounters" : {  
    67.         "insert" : 2010000, #插入操作數  
    68.         "query" : 51,#查詢操作數  
    69.         "update" : 5,#更新操作數  
    70.         "delete" : 0,#刪除操作數  
    71.         "getmore" : 0,#獲取更多的操作數  
    72.         "command" : 148#其他命令操作數  
    73.     },  
    74.     "asserts" : {#各個斷言的數量  
    75.         "regular" : 0,  
    76.         "warning" : 0,  
    77.         "msg" : 0,  
    78.         "user" : 2131,  
    79.         "rollovers" : 0  
    80.     },  
    81.     "writeBacksQueued" : false,  
    82.     "ok" : 1  
    83. }  
     

     

    db.stats()查看某一個庫的原先狀況

     

    Java代碼  
    1. > db.stats()  
    2. {  
    3.     "db" : "order",#庫名  
    4.     "collections" : 4,#集合數  
    5.     "objects" : 2011622,#記錄數  
    6.     "avgObjSize" : 111.92214441878245,#每條記錄的平均值  
    7.     "dataSize" : 225145048,#記錄的總大小  
    8.     "storageSize" : 307323392,#預分配的存儲空間  
    9.     "numExtents" : 21,#事件數  
    10.     "indexes" : 1,#索引數  
    11.     "indexSize" : 74187744,#所以大小  
    12.     "fileSize" : 1056702464,#文件大小  
    13.     "ok" : 1  
    14. }  

     

     查看集合記錄用

    Java代碼  收藏代碼
    1. > db.order.stats()  
    2. {  
    3.     "ns" : "order.order",#命名空間  
    4.     "count" : 2010000,#記錄數  
    5.     "size" : 225039600,#大小  
    6.     "avgObjSize" : 111.96,  
    7.     "storageSize" : 307186944,  
    8.     "numExtents" : 18,  
    9.     "nindexes" : 1,  
    10.     "lastExtentSize" : 56089856,  
    11.     "paddingFactor" : 1,  
    12.     "flags" : 1,  
    13.     "totalIndexSize" : 74187744,  
    14.     "indexSizes" : {  
    15.         "_id_" : 74187744#索引為_id_的索引大小  
    16.     },  
    17.     "ok" : 1  
    18. }  
     

    mongostat命令查看運行中的實時統計,表示每秒實時執行的次數

    mongodb還提供了一個機遇http的監控頁面,可以訪問http://ip:28017來查看,這個頁面基本上是對上面的這些命令做了一下綜合,所以這里不細述了。

    二.mongodb的優化

    根據上面這些監控手段,找到問題后,我們可以進行優化

    上面找到了某一下慢的命令,現在我們可以通過執行計劃跟蹤一下,如

    Java代碼  
    1. > db.order.find({ "status": 1.0, "user.uid": { $gt: 2663199.0 } }).explain()  
    2. {  
    3.     "cursor" : "BasicCursor",#游標類型  
    4.     "nscanned" : 2010000,#掃描數量  
    5.     "nscannedObjects" : 2010000,#掃描對象  
    6.     "n" : 337800,#返回數據  
    7.     "millis" : 2838,#耗時  
    8.     "nYields" : 0,  
    9.     "nChunkSkips" : 0,  
    10.     "isMultiKey" : false,  
    11.     "indexOnly" : false,  
    12.     "indexBounds" : {#使用索引(這里沒有)  
    13.           
    14.     }  
    15. }  
     對于這樣的,我們可以創建索引

    可以通過  db.collection.ensureIndex({"字段名":1}) 來創建索引,1為升序,-1為降序,在已經有多數據的情況下,可用后臺來執行,語句db.collection.ensureIndex({"字段名":1} , {backgroud:true}) 

    獲取索引用db.collection.getIndexes() 查看

    這里我們創建一個user.uid的索引 >db.order.ensureIndex({"user.uid":1})

    創建后重新執行

    Java代碼  
    1. db.order.find({ "status": 1.0, "user.uid": { $gt: 2663199.0 } }).explain()  
    2. {  
    3.     "cursor" : "BtreeCursor user.uid_1",  
    4.     "nscanned" : 337800,  
    5.     "nscannedObjects" : 337800,  
    6.     "n" : 337800,  
    7.     "millis" : 1371,  
    8.     "nYields" : 0,  
    9.     "nChunkSkips" : 0,  
    10.     "isMultiKey" : false,  
    11.     "indexOnly" : false,  
    12.     "indexBounds" : {  
    13.         "user.uid" : [  
    14.             [  
    15.                 2663199,  
    16.                 1.7976931348623157e+308  
    17.             ]  
    18.         ]  
    19.     }  
    20. }  
     

    掃描數量減少,速度提高。mongodb的索引設計類似與關系數據庫,按索引查找加快書讀,但是多了會對寫有壓力,所以這里就不再敘述了。


    2.其他優化可以用hint強制索引查找,返回只是需要的數據,對數據分頁等。

    posted on 2015-12-16 18:50 paulwong 閱讀(763) 評論(0)  編輯  收藏 所屬分類: MONGODB

    主站蜘蛛池模板: 黄色短视频免费看| 成人浮力影院免费看| 久久精品亚洲综合专区| 99久久国产热无码精品免费| 国产大陆亚洲精品国产| 亚洲福利视频一区| 国产免费av一区二区三区| 大地资源在线资源免费观看 | 亚洲精品国产高清嫩草影院| 国产一区二区免费| 亚洲丁香婷婷综合久久| 国产亚洲美女精品久久久久狼| 欧美大尺寸SUV免费| 99免费在线视频| 亚洲男人的天堂网站| 亚洲精品无码国产| 国产无遮挡吃胸膜奶免费看视频| 一级毛片免费不卡直观看| 亚洲一区二区三区免费在线观看 | 亚洲AV无码专区在线亚| 不卡精品国产_亚洲人成在线| 成人免费在线看片| a级片免费在线播放| 蜜桃传媒一区二区亚洲AV| 亚洲精品影院久久久久久| 亚洲综合图色40p| 日韩在线视频免费看| 亚洲一级免费毛片| 99在线热播精品免费99热| 国产亚洲精品免费| 日韩亚洲不卡在线视频中文字幕在线观看 | 亚洲电影国产一区| 亚洲日韩人妻第一页| 毛片基地免费视频a| 99热在线免费观看| 久久一区二区免费播放| 免费精品国产自产拍在线观看 | 亚洲欧美国产日韩av野草社区| 色噜噜综合亚洲av中文无码| 国产乱辈通伦影片在线播放亚洲| 在线观看国产情趣免费视频|