亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

MongoDB性能優化及監控

2020-03-14 13:16:51
字體:
來源:轉載
供稿:網友

MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。

MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。

一、索引

MongoDB 提供了多樣性的索引支持,索引信息被保存在system.indexes 中,且默認總是為_id創建索引,它的索引使用基本和MySQL 等關系型數據庫一樣。其實可以這樣說說,索引是凌駕于數據存儲系統之上的另一層系統,所以各種結構迥異的存儲都有相同或相似的索引實現及使用接口并不足為 奇。

1.基礎索引

在字段age 上創建索引,1(升序);-1(降序):

db.users.ensureIndex({age:1}) 

_id 是創建表的時候自動創建的索引,此索引是不能夠刪除的。當系統已有大量數據時,創建索引就是個非常耗時的活,我們可以在后臺執行,只需指定“backgroud:true”即可。

db.t3.ensureIndex({age:1} , {backgroud:true}) 

2.文檔索引

索引可以任何類型的字段,甚至文檔:

db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } );//在addr 列上創建索引db.factories.ensureIndex( { addr : 1 } );//下面這個查詢將會用到我們剛剛建立的索引db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );//但是下面這個查詢將不會用到索引,因為查詢的順序跟索引建立的順序不一樣db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } ); 

3. 組合索引

跟其它數據庫產品一樣,MongoDB 也是有組合索引的,下面我們將在addr.city 和addr.state上建立組合索引。當創建組合索引時,字段后面的1 表示升序,-1 表示降序,是用1 還是用-1 主要是跟排序的時候或指定范圍內查詢 的時候有關的。

db.factories.ensureIndex( { "addr.city" : 1, "addr.state" : 1 } );// 下面的查詢都用到了這個索引db.factories.find( { "addr.city" : "Beijing", "addr.state" : "BJ" } );db.factories.find( { "addr.city" : "Beijing" } );db.factories.find().sort( { "addr.city" : 1, "addr.state" : 1 } );db.factories.find().sort( { "addr.city" : 1 } ) 

4. 唯一索引

只需在ensureIndex 命令中指定”unique:true”即可創建唯一索引。例如,往表t4 中插入2 條記錄:

db.t4.ensureIndex({firstname: 1, lastname: 1}, {unique: true}); 

5.強制使用索引

hint 命令可以強制使用某個索引。

db.t5.find({age:{$lt:30}}).hint({name:1, age:1}).explain() 

6.刪除索引

//刪除t3 表中的所有索引db.t3.dropIndexes()//刪除t4 表中的firstname 索引db.t4.dropIndex({firstname: 1}) 

二、explain執行計劃

MongoDB 提供了一個 explain 命令讓我們獲知系統如何處理查詢請求。利用 explain 命令,我們可以很好地觀察系統如何使用索引來加快檢索,同時可以針對性優化索引。

db.t5.ensureIndex({name:1})db.t5.ensureIndex({age:1})db.t5.find({age:{$gt:45}}, {name:1}).explain(){"cursor" : "BtreeCursor age_1","nscanned" : 0,"nscannedObjects" : 0,"n" : 0,"millis" : 0,"nYields" : 0,"nChunkSkips" : 0,"isMultiKey" : false,"indexOnly" : false,"indexBounds" : {"age" : [[45,1.7976931348623157e+308]]}} 

字段說明:

•cursor: 返回游標類型(BasicCursor 或 BtreeCursor)
•nscanned: 被掃描的文檔數量
•n: 返回的文檔數量
•millis: 耗時(毫秒)
•indexBounds: 所使用的索引

三、優化器profile

在MySQL 中,慢查詢日志是經常作為我們優化數據庫的依據,那在MongoDB 中是否有類似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。

1.開啟profiling功能

有兩種方式可以控制 Profiling 的開關和級別,第一種是直接在啟動參數里直接進行設置。啟動MongoDB 時加上–profile=級別 即可。也可以在客戶端調用db.setProfilingLevel(級別) 命令來實時配置,Profiler 信息保存在system.profile 中。我們可以通過db.getProfilingLevel()命令來獲取當前的Profile 級別,類似如下操作:

db.setProfilingLevel(2); 

上面profile 的級別可以取0,1,2 三個值,他們表示的意義如下:

1.0 – 不開啟
2.1 – 記錄慢命令 (默認為>100ms)
3.2 – 記錄所有命令

Profile 記錄在級別1 時會記錄慢命令,那么這個慢的定義是什么?上面我們說到其默認為100ms,當然有默認就有設置,其設置方法和級別一樣有兩種,一種是通過添加 –slowms 啟動參數配置。第二種是調用db.setProfilingLevel 時加上第二個參數:

db.setProfilingLevel( level , slowms )db.setProfilingLevel( 1 , 10 ); 

2.查詢 Profiling 記錄

與MySQL 的慢查詢日志不同,MongoDB Profile 記錄是直接存在系統db 里的,記錄位置system.profile ,所以,我們只要查詢這個Collection 的記錄就可以獲取到我們的 Profile 記錄了。列出執行時間長于某一限度(5ms)的 Profile 記錄:

db.system.profile.find( { millis : { $gt : 5 } } ) 

MongoDB Shell 還提供了一個比較簡潔的命令show profile,可列出最近5 條執行時間超過1ms 的 Profile 記錄。 

四、常用性能優化方案

1.創建索引

2.限定返回結果數

3.只查詢使用到的字段

4.采用capped collection

5.采用Server Side Code Execution

6.使用Hint,強制使用索引

7.采用Profiling

五、性能監控工具

1. mongosniff

此工具可以從底層監控到底有哪些命令發送給了MongoDB 去執行,從中就可以進行分析:以root 身份執行:

$./mongosniff --source NET lo 

然后其會監控位到本地以localhost 監聽默認27017 端口的MongoDB 的所有包請求。

2.Mongostat

此工具可以快速的查看某組運行中的MongoDB 實例的統計信息 字段說明:
•insert: 每秒插入量
•query: 每秒查詢量
•update: 每秒更新量
•delete: 每秒刪除量
•locked: 鎖定量
•qr | qw: 客戶端查詢排隊長度(讀|寫)
•ar | aw: 活躍客戶端量(讀|寫)
•conn: 連接數
•time: 當前時間

它每秒鐘刷新一次狀態值,提供良好的可讀性,通過這些參數可以觀察到一個整體的性能情況。

3. db.serverStatus

這個命令是最常用也是最基礎的查看實例運行狀態的命令之一。

4.db.stats

下面給大家介紹下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() 查看當前的監控日志。
如:

> db.system.profile.find({millis:{$gt:500}}) { "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 } { "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的運行狀態

> db.serverStatus() { "host" : "baobao-laptop",#主機名 "version" : "1.8.2",#版本號 "process" : "mongod",#進程名 "uptime" : 15549,#運行時間 "uptimeEstimate" : 15351, "localTime" : ISODate("2011-07-23T06:07:31.220Z"),當前時間 "globalLock" : { "totalTime" : 15548525410,#總運行時間(ns) "lockTime" : 89206633, #總的鎖時間(ns) "ratio" : 0.005737305027178137,#鎖比值 "currentQueue" : { "total" : 0,#當前需要執行的隊列 "readers" : 0,#讀隊列 "writers" : 0#寫隊列 }, "activeClients" : { "total" : 0,#當前客戶端執行的鏈接數 "readers" : 0,#讀鏈接數 "writers" : 0#寫鏈接數 } }, "mem" : {#內存情況 "bits" : 32,#32位系統 "resident" : 337,#占有物理內存數 "virtual" : 599,#占有虛擬內存 "supported" : true,#是否支持擴展內存 "mapped" : 512 }, "connections" : { "current" : 2,#當前鏈接數 "available" : 817#可用鏈接數 }, "extra_info" : { "note" : "fields vary by platform", "heap_usage_bytes" : 159008,#堆使用情況字節 "page_faults" : 907 #頁面故作 }, "indexCounters" : { "btree" : { "accesses" : 59963, #索引被訪問數 "hits" : 59963, #所以命中數 "misses" : 0,#索引偏差數 "resets" : 0,#復位數 "missRatio" : 0#未命中率 } }, "backgroundFlushing" : { "flushes" : 259, #刷新次數 "total_ms" : 3395, #刷新總花費時長 "average_ms" : 13.108108108108109, #平均時長 "last_ms" : 1, #最后一次時長 "last_finished" : ISODate("2011-07-23T06:07:22.725Z")#最后刷新時間 }, "cursors" : { "totalOpen" : 0,#打開游標數 "clientCursors_size" : 0,#客戶端游標大小 "timedOut" : 16#超時時間 }, "network" : { "bytesIn" : 285676177,#輸入數據(byte) "bytesOut" : 286564,#輸出數據(byte) "numRequests" : 2012348#請求數 }, "opcounters" : { "insert" : 2010000, #插入操作數 "query" : 51,#查詢操作數 "update" : 5,#更新操作數 "delete" : 0,#刪除操作數 "getmore" : 0,#獲取更多的操作數 "command" : 148#其他命令操作數 }, "asserts" : {#各個斷言的數量 "regular" : 0, "warning" : 0, "msg" : 0, "user" : 2131, "rollovers" : 0 }, "writeBacksQueued" : false, "ok" : 1 } db.stats()查看某一個庫的原先狀況> db.stats() { "db" : "order",#庫名 "collections" : 4,#集合數 "objects" : 2011622,#記錄數 "avgObjSize" : 111.92214441878245,#每條記錄的平均值 "dataSize" : 225145048,#記錄的總大小 "storageSize" : 307323392,#預分配的存儲空間 "numExtents" : 21,#事件數 "indexes" : 1,#索引數 "indexSize" : 74187744,#所以大小 "fileSize" : 1056702464,#文件大小 "ok" : 1 } 

查看集合記錄用

> db.order.stats() { "ns" : "order.order",#命名空間 "count" : 2010000,#記錄數 "size" : 225039600,#大小 "avgObjSize" : 111.96, "storageSize" : 307186944, "numExtents" : 18, "nindexes" : 1, "lastExtentSize" : 56089856, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 74187744, "indexSizes" : { "_id_" : 74187744#索引為_id_的索引大小 }, "ok" : 1 }

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

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


注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影大全免费观看2023年上| 欧美视频在线观看 亚洲欧| 亚洲a中文字幕| 欧美日韩国产中字| 奇米影视亚洲狠狠色| 国产一区二区三区精品久久久| 久久久伊人日本| 日韩欧美中文在线| 欧美电影免费观看电视剧大全| 亚洲综合中文字幕在线观看| 欧美激情高清视频| 国产成人在线一区| 欧美激情视频播放| 日韩欧美精品在线观看| 在线亚洲男人天堂| 国产精品99久久99久久久二8| 日韩精品中文在线观看| 午夜免费在线观看精品视频| 96sao精品视频在线观看| 久久成人精品电影| 日韩av一区二区在线| 成人在线观看视频网站| 亚洲一区二区少妇| 国产91精品久久久久| 欧美电影免费看| 国产亚洲激情视频在线| 久久精品国产亚洲精品| 中文字幕自拍vr一区二区三区| 日韩电视剧在线观看免费网站| 夜夜狂射影院欧美极品| 欧美大尺度在线观看| 精品无码久久久久久国产| 欧美最猛性xxxxx亚洲精品| 在线视频亚洲欧美| 国产一区欧美二区三区| 日韩精品高清视频| 成人国产精品av| 国产精品海角社区在线观看| 日韩亚洲欧美成人| 国产美女91呻吟求| 国产成人啪精品视频免费网| 日本成熟性欧美| 日本高清不卡的在线| 8090成年在线看片午夜| 欧美最猛性xxxx| 5566成人精品视频免费| 亚洲最大av网站| 91久久久久久久久| 日韩在线观看免费高清完整版| 中文一区二区视频| 欧美日韩国产一区中文午夜| 97香蕉超级碰碰久久免费的优势| 色与欲影视天天看综合网| 毛片精品免费在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 综合激情国产一区| 国产欧美精品久久久| 黄色精品一区二区| 久久久久成人网| 国产91精品久久久| 亚洲精品在线看| 夜色77av精品影院| 亚洲成人精品久久久| 精品久久香蕉国产线看观看gif| 久久99视频精品| 欧美日韩视频在线| 国产亚洲激情视频在线| 久久久国产精品x99av| 91在线中文字幕| 欧美自拍视频在线| 久久激情五月丁香伊人| 亚洲国产精品va在线观看黑人| 91国内产香蕉| 亚洲第一网站男人都懂| 欧美一级电影免费在线观看| 另类色图亚洲色图| 亚洲精品小视频在线观看| 国产一区二区三区在线播放免费观看| 欧美做受高潮电影o| 国产精品欧美久久久| 国产精品日韩电影| 亚洲第一免费网站| 久久久久国产精品免费网站| 欧美激情精品在线| 国产国产精品人在线视| 国产精品欧美风情| 亚洲精品一区二区三区婷婷月| 欧美国产亚洲精品久久久8v| 国产精品福利片| 91亚洲国产成人精品性色| 国产成人精品电影久久久| 疯狂做受xxxx高潮欧美日本| 精品国产一区二区三区久久狼黑人| 好吊成人免视频| 久久精品国产一区二区三区| 亚洲国产精品成人av| 国产精品xxxxx| 国产精品久久久久久久久久99| 欧美乱大交xxxxx| 亚洲一二在线观看| 精品亚洲一区二区| 日韩二区三区在线| 色偷偷888欧美精品久久久| 国内精品久久久久久久久| 日韩精品免费在线观看| 成人国产在线激情| 亚洲精品国精品久久99热一| 久久亚洲综合国产精品99麻豆精品福利| 超薄丝袜一区二区| 久热精品视频在线观看一区| 97在线精品视频| 久久99热这里只有精品国产| 免费91在线视频| 亚洲国产精品中文| 欧美成人sm免费视频| 国产成人jvid在线播放| 97精品视频在线观看| 免费91麻豆精品国产自产在线观看| 在线视频欧美日韩精品| 亚洲精品欧美极品| 亚洲欧洲日韩国产| 91久久久久久久久| 一本久久综合亚洲鲁鲁| 激情懂色av一区av二区av| 欧美亚洲国产成人精品| 国产精品亚洲美女av网站| 日韩av高清不卡| 国产精品普通话| 久久国产精品电影| 亚洲精品小视频| 久久久久久久久国产精品| 91极品视频在线| 国产精品视频自在线| 国产91对白在线播放| 92看片淫黄大片看国产片| 久久久免费观看| 亚洲一区二区三区视频| 日韩在线免费av| 69久久夜色精品国产69乱青草| 成人伊人精品色xxxx视频| 午夜精品久久久久久99热| 国产欧美一区二区白浆黑人| 国产97在线播放| 国产精品久久国产精品99gif| 久久精品一本久久99精品| 国产免费一区二区三区在线能观看| 久久91精品国产91久久跳| 成人欧美一区二区三区黑人| 91禁国产网站| 精品国产成人在线| 成人免费观看网址| 精品中文字幕在线观看| 国产91成人在在线播放| 亚洲成人三级在线| 日韩av在线电影网| 在线视频精品一| 久久人91精品久久久久久不卡| 欧美视频不卡中文| 国产成人精品一区二区三区| 国产成人激情视频| 色综合五月天导航| 欧美日韩一区二区在线播放| 色偷偷9999www| 2019中文字幕在线|