日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

mongodb的監(jiān)控與性能優(yōu)化

系統(tǒng) 2118 0

mongodb可以通過profile來監(jiān)控?cái)?shù)據(jù),進(jìn)行優(yōu)化。

查看當(dāng)前是否開啟profile功能用命令

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

開始profile功能為

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

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

通過db.system.profile.find() 查看當(dāng)前的監(jiān)控日志。

如:

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:命令執(zhí)行時間

info:命令的內(nèi)容

query:代表查詢

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

reslen:返回的結(jié)果集大小,byte數(shù)

nscanned:掃描記錄數(shù)量

nquery:后面是查詢條件

nreturned:返回記錄數(shù)及用時

millis:所花時間

?

如果發(fā)現(xiàn)時間比較長,那么就需要作優(yōu)化。

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

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

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

mongo可以通過db.serverStatus()查看mongod的運(yùn)行狀態(tài)

?

?

01 > db.serverStatus()
02 {
03 ???? "host" : "baobao-laptop" , #主機(jī)名
04 ???? "version" : "1.8.2" , #版本號
05 ???? "process" : "mongod" , #進(jìn)程名
06 ???? "uptime" : 15549, #運(yùn)行時間
07 ???? "uptimeEstimate" : 15351,
08 ???? "localTime" : ISODate( "2011-07-23T06:07:31.220Z" ),當(dāng)前時間
09 ???? "globalLock" : {
10 ???????? "totalTime" : 15548525410, #總運(yùn)行時間(ns)
11 ???????? "lockTime" : 89206633,? #總的鎖時間(ns)
12 ???????? "ratio" : 0.005737305027178137, #鎖比值
13 ???????? "currentQueue" : {
14 ???????????? "total" : 0, #當(dāng)前需要執(zhí)行的隊(duì)列
15 ???????????? "readers" : 0, #讀隊(duì)列
16 ???????????? "writers" : 0 #寫隊(duì)列
17 ???????? },
18 ???????? "activeClients" : {
19 ???????????? "total" : 0, #當(dāng)前客戶端執(zhí)行的鏈接數(shù)
20 ???????????? "readers" : 0, #讀鏈接數(shù)
21 ???????????? "writers" : 0 #寫鏈接數(shù)
22 ???????? }
23 ???? },
24 ???? "mem" : { #內(nèi)存情況
25 ???????? "bits" : 32, #32位系統(tǒng)
26 ???????? "resident" : 337, #占有物理內(nèi)存數(shù)
27 ???????? "virtual" : 599, #占有虛擬內(nèi)存
28 ???????? "supported" : true , #是否支持?jǐn)U展內(nèi)存
29 ???????? "mapped" : 512
30 ???? },
31 ???? "connections" : {
32 ???????? "current" : 2, #當(dāng)前鏈接數(shù)
33 ???????? "available" : 817 #可用鏈接數(shù)
34 ???? },
35 ???? "extra_info" : {
36 ???????? "note" : "fields vary by platform" ,
37 ???????? "heap_usage_bytes" : 159008, #堆使用情況字節(jié)
38 ???????? "page_faults" : 907 #頁面故作
39 ???? },
40 ???? "indexCounters" : {
41 ???????? "btree" : {
42 ???????????? "accesses" : 59963, #索引被訪問數(shù)
43 ???????????? "hits" : 59963, #所以命中數(shù)
44 ???????????? "misses" : 0, #索引偏差數(shù)
45 ???????????? "resets" : 0, #復(fù)位數(shù)
46 ???????????? "missRatio" : 0 #未命中率
47 ???????? }
48 ???? },
49 ???? "backgroundFlushing" : {???
50 ???????? "flushes" : 259,? #刷新次數(shù)
51 ???????? "total_ms" : 3395, #刷新總花費(fèi)時長
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, #打開游標(biāo)數(shù)
58 ???????? "clientCursors_size" : 0, #客戶端游標(biāo)大小
59 ???????? "timedOut" : 16 #超時時間
60 ???? },
61 ???? "network" : {
62 ???????? "bytesIn" : 285676177, #輸入數(shù)據(jù)(byte)
63 ???????? "bytesOut" : 286564, #輸出數(shù)據(jù)(byte)
64 ???????? "numRequests" : 2012348 #請求數(shù)
65 ???? },
66 ???? "opcounters" : {
67 ???????? "insert" : 2010000, #插入操作數(shù)
68 ???????? "query" : 51, #查詢操作數(shù)
69 ???????? "update" : 5, #更新操作數(shù)
70 ???????? "delete" : 0, #刪除操作數(shù)
71 ???????? "getmore" : 0, #獲取更多的操作數(shù)
72 ???????? "command" : 148 #其他命令操作數(shù)
73 ???? },
74 ???? "asserts" : { #各個斷言的數(shù)量
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, #集合數(shù)
05 ???? "objects" : 2011622, #記錄數(shù)
06 ???? "avgObjSize" : 111.92214441878245, #每條記錄的平均值
07 ???? "dataSize" : 225145048, #記錄的總大小
08 ???? "storageSize" : 307323392, #預(yù)分配的存儲空間
09 ???? "numExtents" : 21, #事件數(shù)
10 ???? "indexes" : 1, #索引數(shù)
11 ???? "indexSize" : 74187744, #所以大小
12 ???? "fileSize" : 1056702464, #文件大小
13 ???? "ok" : 1
14 }

查看集合記錄用

?

01 > db.order.stats()
02 {
03 ???? "ns" : "order.order" , #命名空間
04 ???? "count" : 2010000, #記錄數(shù)
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命令查看運(yùn)行中的實(shí)時統(tǒng)計(jì),表示每秒實(shí)時執(zhí)行的次數(shù)

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

二.mongodb的優(yōu)化

根據(jù)上面這些監(jiān)控手段,找到問題后,我們可以進(jìn)行優(yōu)化

上面找到了某一下慢的命令,現(xiàn)在我們可以通過執(zhí)行計(jì)劃跟蹤一下,如

01 > db.order. find ({ "status" : 1.0, "user.uid" : { $ gt : 2663199.0 } }).explain()
02 {
03 ???? "cursor" : "BasicCursor" , #游標(biāo)類型
04 ???? "nscanned" : 2010000, #掃描數(shù)量
05 ???? "nscannedObjects" : 2010000, #掃描對象
06 ???? "n" : 337800, #返回?cái)?shù)據(jù)
07 ???? "millis" : 2838, #耗時
08 ???? "nYields" : 0,
09 ???? "nChunkSkips" : 0,
10 ???? "isMultiKey" : false ,
11 ???? "indexOnly" : false ,
12 ???? "indexBounds" : { #使用索引(這里沒有)
13 ???????? ?
14 ???? }
15 }

對于這樣的,我們可以創(chuàng)建索引

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

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

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

創(chuàng)建后重新執(zhí)行

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 }

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

?

2.其他優(yōu)化可以用hint強(qiáng)制索引查找,返回只是需要的數(shù)據(jù),對數(shù)據(jù)分頁等。

mongodb的監(jiān)控與性能優(yōu)化


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 衢州市| 枣庄市| 威远县| 阿克陶县| 成都市| 农安县| 肇东市| 荥经县| 济源市| 乌拉特后旗| 丰镇市| 西畴县| 南木林县| 文登市| 山丹县| 益阳市| 汽车| 新竹县| 滁州市| 察雅县| 海原县| 翼城县| 沙坪坝区| 新泰市| 依安县| 延吉市| 罗城| 余江县| 招远市| 页游| 博客| 武邑县| 章丘市| 百色市| 辽阳县| 宜阳县| 安宁市| 磐安县| 昌都县| 镇沅| 中宁县|