亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

mongodb的監控與性能優化

系統 1811 0

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() 查看當前的監控日志。

如:

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的運行狀態

?

?

01 > db.serverStatus()
02 {
03 ???? "host" : "baobao-laptop" , #主機名
04 ???? "version" : "1.8.2" , #版本號
05 ???? "process" : "mongod" , #進程名
06 ???? "uptime" : 15549, #運行時間
07 ???? "uptimeEstimate" : 15351,
08 ???? "localTime" : ISODate( "2011-07-23T06:07:31.220Z" ),當前時間
09 ???? "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()查看某一個庫的原先狀況

?

01 > db.stats()
02 {
03 ???? "db" : "order" , #庫名
04 ???? "collections" : 4, #集合數
05 ???? "objects" : 2011622, #記錄數
06 ???? "avgObjSize" : 111.92214441878245, #每條記錄的平均值
07 ???? "dataSize" : 225145048, #記錄的總大小
08 ???? "storageSize" : 307323392, #預分配的存儲空間
09 ???? "numExtents" : 21, #事件數
10 ???? "indexes" : 1, #索引數
11 ???? "indexSize" : 74187744, #所以大小
12 ???? "fileSize" : 1056702464, #文件大小
13 ???? "ok" : 1
14 }

查看集合記錄用

?

01 > db.order.stats()
02 {
03 ???? "ns" : "order.order" , #命名空間
04 ???? "count" : 2010000, #記錄數
05 ???? "size" : 225039600, #大小
06 ???? "avgObjSize" : 111.96,
07 ???? "storageSize" : 307186944,
08 ???? "numExtents" : 18,
09 ???? "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的優化

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

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

01 > db.order. find ({ "status" : 1.0, "user.uid" : { $ gt : 2663199.0 } }).explain()
02 {
03 ???? "cursor" : "BasicCursor" , #游標類型
04 ???? "nscanned" : 2010000, #掃描數量
05 ???? "nscannedObjects" : 2010000, #掃描對象
06 ???? "n" : 337800, #返回數據
07 ???? "millis" : 2838, #耗時
08 ???? "nYields" : 0,
09 ???? "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})

創建后重新執行

01 db.order. find ({ "status" : 1.0, "user.uid" : { $ gt : 2663199.0 } }).explain()
02 {
03 ???? "cursor" : "BtreeCursor user.uid_1" ,
04 ???? "nscanned" : 337800,
05 ???? "nscannedObjects" : 337800,
06 ???? "n" : 337800,
07 ???? "millis" : 1371,
08 ???? "nYields" : 0,
09 ???? "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強制索引查找,返回只是需要的數據,對數據分頁等。

mongodb的監控與性能優化


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 思思久久这里只精品99re66 | 97免费在线视频 | 国产香蕉在线 | 曰本亚洲欧洲色a在线 | 久久亚洲国产精品五月天 | 亚洲视频日韩视频 | 国产一区二区三区毛片 | 精品国产视频在线观看 | 视频三区精品中文字幕 | 亚洲欧美色综合自拍 | 欧美影院 | 国产xxx视频| 免费一级a毛片在线播 | 欧美亚洲另类色国产综合 | 国内自拍青青草 | 伊人色综合久久天天网 | 午夜色站 | 成年黄网站免费大全毛片 | 国产96精品 | 国产精品久久国产精品99 | 亚洲精品二区中文字幕 | 波多野一区二区三区在线 | 91探花国产综合在线精品 | 春暖花开亚洲 | 久久99国产精一区二区三区 | 国产福利一区二区在线观看 | 在线欧美 | 亚洲国产大片 | 久久精品国产一区二区三区不卡 | 精品在线一区二区三区 | 日本在线 | 中文 | 色老头福影院韩国激情影院 | 免费观看日本污污ww网站精选 | 国产精品久久国产三级国不卡顿 | 久久久综合九色合综 | 22222se男人的天堂 | 97视频在线观看播放 | 亚洲欧美精品网站在线观看 | 成年女人免费 | 国产成人aa免费视频 | 婷婷99精品国产97久久综合 |