亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于MongoDB數(shù)據(jù)庫索引構(gòu)建情況全面分析

 更新時間:2017年07月20日 08:47:02   投稿:jingxian  
下面小編就為大家?guī)硪黄贛ongoDB數(shù)據(jù)庫索引構(gòu)建情況全面分析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前面的話

本文將詳細介紹MongoDB數(shù)據(jù)庫索引構(gòu)建情況分析

概述

創(chuàng)建索引可以加快索引相關(guān)的查詢,但是會增加磁盤空間的消耗,降低寫入性能。這時,就需要評判當前索引的構(gòu)建情況是否合理。有4種方法可以使用

1、mongostat工具

2、profile集合介紹

3、日志

4、explain分析

mongostat

mongostat是mongodb自帶的狀態(tài)檢測工具,在命令行下使用。它會間隔固定時間獲取mongodb的當前運行狀態(tài),并輸出。如果發(fā)現(xiàn)數(shù)據(jù)庫突然變慢或者有其他問題的話,首先就要考慮采用mongostat來查看mongo的狀態(tài)

mongostat是查看mongodb運行狀態(tài)的程序,使用方式如下

mongostat -h ip:port

【字段說明】

insert/s : 每秒插入數(shù)據(jù)庫的對象數(shù)量,如果是slave,則數(shù)值前有*,則表示復(fù)制集操作
query/s : 每秒的查詢操作次數(shù)
update/s : 每秒的更新操作次數(shù)
delete/s : 每秒的刪除操作次數(shù)
getmore/s: 每秒查詢cursor(游標)時的getmore操作數(shù)
command: 每秒執(zhí)行的命令數(shù),在主從系統(tǒng)中會顯示兩個值(例如 3|0),分別代表 本地|復(fù)制 命令
dirty: 臟數(shù)據(jù)字節(jié)的緩存百分比
used:正在使用中的緩存百分比
flushes:checkpoint的觸發(fā)次數(shù)在一個輪詢間隔期間。一般都是0,間斷性會是1, 通過計算兩個1之間的間隔時間,可以大致了解多長時間flush一次。flush開銷是很大的,如果頻繁的flush,可能就要找找原因了
vsize: 虛擬內(nèi)存使用量,單位MB 
res: 物理內(nèi)存使用量,單位MB。 res會慢慢的上升,如果res經(jīng)常突然下降,要查看下是否有別的程序狂吃內(nèi)存
qr: 客戶端等待從MongoDB實例讀數(shù)據(jù)的隊列長度
qw:客戶端等待從MongoDB實例寫入數(shù)據(jù)的隊列長度
ar: 執(zhí)行讀操作的活躍客戶端數(shù)量
aw: 執(zhí)行寫操作的活客戶端數(shù)量。如果ar或aw數(shù)值很大,那么就是DB被堵住了,DB的處理速度不及請求速度。查看是否有開銷很大的慢查詢。如果查詢一切正常,確實是負載很大,就需要加機器了
netIn:MongoDB實例的網(wǎng)絡(luò)進流量
netOut:MongoDB實例的網(wǎng)絡(luò)出流量
conn: 打開連接的總數(shù),是qr,qw,ar,aw的總和
time:當前時間

【實例】

插入100000條數(shù)據(jù),并打開mongostat查詢mongodb運行狀態(tài)

由下圖看出,插入值insert值在插入數(shù)據(jù)時大量增加,在插入完畢后變成0。flush兩個1之間的間隔時間很長,說明性能還不錯;res在慢慢上升,沒有出現(xiàn)突然下降的情況,說明沒有其他的程序大量占用內(nèi)容的情況;qrw及arw數(shù)據(jù)很小,說明數(shù)據(jù)庫讀寫狀態(tài)正常,負載較小??傮w而言,mongodb數(shù)據(jù)庫運行狀態(tài)良好

profile

mongodb可以通過profile來監(jiān)控數(shù)據(jù),進行優(yōu)化

【級別】

首先,要查看當前是否開啟profile功能

使用下面的命令會返回level等級,值為0|1|2,0代表關(guān)閉,即不記錄任何操作;1代表記錄慢命令(默認值為100ms),即記錄運行時間超過100ms的操作;2代表全部,即記錄任何操作

db.getProfilingLevel() 

使用下面的命令可以設(shè)置level等級

db.setProfilingLevel() 

如下圖所示,默認地,profile關(guān)閉。使用setProfilingLevel()方法以50ms慢命令的方式開啟profile

【狀態(tài)】

操作被記錄到system.profile集合中

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

op:操作類型
ns:命名空間
query:查詢字符串
responseLength:返回長度
ts:時間
mills:執(zhí)行耗時

【使用】

在系統(tǒng)中開啟profile之后,如果profile記錄的數(shù)據(jù)非常大,會比較明顯的降低系統(tǒng)的性能。因此,profile的使用場景一般是新系統(tǒng)上線之前的測試階段,以及剛上線時的觀察階段,查看數(shù)據(jù)庫的設(shè)計及應(yīng)用程序的使用是否正常。如果profile記錄了大量的字段,需要調(diào)整系統(tǒng)附在、調(diào)整索引等,減小它的大小

日志

在配置日志文件時,可以使用verbose參數(shù)來配置日志詳細程度,參數(shù)值從'v'到'vvvvv','v'越多,詳細度越高

日志會記錄mongodb的運行狀態(tài),包括連接時間、當前正在進行的操作等

explain

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

explain有三種模式,分別是:queryPlanner、executionStats、allPlansExecution?,F(xiàn)實開發(fā)中,常用的是executionStats模式

首先,插入10萬條數(shù)據(jù)

在time字段上建立索引

接著,尋找time范圍在100和200之間的文檔,并使用explain()

結(jié)果分為queryPlanner、executionStats和serverInfo三個部分。接下來,將分別對這三個部分的結(jié)果進行詳細分析

【queryPlanner】

queryPlanner.plannerVersion: 版本

queryPlanner.namespace: 查詢的表

queryPlanner.indexFilterSet: 針對該query是否有indexfilter

queryPlanner.parsedQuery: 查詢條件

queryPlanner.winningPlan: 查詢優(yōu)化器針對該query所返回的最優(yōu)執(zhí)行計劃的詳細內(nèi)容

queryPlanner.winningPlan.stage: 最優(yōu)執(zhí)行計劃的stage

queryPlanner.winningPlan.inputStage: 用來描述子stage,并且為其父stage提供文檔和索引關(guān)鍵字。

queryPlanner.winningPlan.inputstage.stage,此處是IXSCAN,表示進行的是index scanning

queryPlanner.winningPlan.inputstage.keyPattern: 索引鍵值對

queryPlanner.winningPlan.inputstage.indexName:索引名稱

queryPlanner.winningPlan.inputstage.isMultiKey: 是否是Multikey,此處返回是false,如果索引建立在array上,此處將是true

queryPlanner.winningPlan.inputstage.direction:查詢順序,此處是forward,如果用了.sort({time:-1})將顯示backward

queryPlanner.winningPlan.inputstage.indexBounds: 所掃描的索引范圍

queryPlanner.rejectedPlans:其他執(zhí)行計劃

【executionStats】

executionStats.executionSuccess: 是否成功

executionStats.nReturned: 查詢返回條目個數(shù)

executionStats.totalKeysExamined: 索引掃描條目個數(shù)

executionStats.totalDocsExamined: 文檔掃描條目個數(shù)

executionStats.executionStages.stage: 掃描類型

executionStats.executionTimeMillis: 整體查詢時間

executionStats.executionStages.executionTimeMillisEstimate: 根據(jù)索引檢索文檔獲得數(shù)據(jù)的時間

executionStats.executionStages.inputStage.executionTimeMillisEstimate: 掃描索引所用時間

【serverInfo】

serverInfo.host: 主機名

serverInfo.port: 端口

serverInfo.version: 版本

serverInfo.gitVersion: git版本

【性能分析】

1、執(zhí)行時間

executionTimeMillis值越小越好

2、條目數(shù)量

最理想的狀態(tài)是: nReturned=totalKeysExamined=totalDocsExamined

3、stage類型

stage的類型列舉如下:

COLLSCAN:全表掃描
IXSCAN:索引掃描
FETCH:根據(jù)索引去檢索指定document
SHARD_MERGE:將各個分片返回數(shù)據(jù)進行merge
SORT:表明在內(nèi)存中進行了排序
LIMIT:使用limit限制返回數(shù)
SKIP:使用skip進行跳過
IDHACK:針對_id進行查詢
SHARDING_FILTER:通過mongos對分片數(shù)據(jù)進行查詢
COUNT:利用db.coll.explain().count()之類進行count運算
COUNTSCAN:count不使用Index進行count時的stage返回
COUNT_SCAN:count使用了Index進行count時的stage返回
SUBPLA:未使用到索引的$or查詢的stage返回
TEXT:使用全文索引進行查詢時候的stage返回
PROJECTION:限定返回字段時候stage的返回

不希望看到包含如下的stage:

COLLSCAN(全表掃描)
SORT(使用sort但是無index)
不合理的SKIP
SUBPLA(未用到index的$or)
COUNTSCAN(不使用index進行count)

以上這篇基于MongoDB數(shù)據(jù)庫索引構(gòu)建情況全面分析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MongoDB數(shù)據(jù)庫簡介與安裝方法

    MongoDB數(shù)據(jù)庫簡介與安裝方法

    這篇文章介紹了MongoDB數(shù)據(jù)庫簡介與安裝方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • Mongodb?刪除文檔Delete與Remove的區(qū)別解析

    Mongodb?刪除文檔Delete與Remove的區(qū)別解析

    這篇文章主要介紹了Mongodb?刪除文檔Delete與Remove的區(qū)別,要從集合中刪除所有文檔,請將空過濾器文檔傳遞{}給該?db.collection.deleteMany()方法,本文通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • mongodb eval 執(zhí)行服務(wù)器端腳本

    mongodb eval 執(zhí)行服務(wù)器端腳本

    在MongoDB的服務(wù)器端可以通過db.eval函數(shù)來執(zhí)行javascript腳本,如我們可以定義一個javascript函數(shù),然后通過db.eval在服務(wù)器端來運行!我們前面其實也接觸過在服務(wù)器段運行一個預(yù)定義的javascript腳本的情況,如在$where查詢,執(zhí)行mapreduce任務(wù)等。
    2015-05-05
  • CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程

    CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程

    這篇文章主要介紹了CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程,本文共分5個步驟完成MongoDB的安裝,需要的朋友可以參考下
    2015-01-01
  • MongoDB固定集合(capped collection)的知識小結(jié)

    MongoDB固定集合(capped collection)的知識小結(jié)

    固定集合指的是事先創(chuàng)建,并且大小固定的集合。下面這篇文章主要給大家總結(jié)介紹了MongoDB固定集合(capped collection)的知識,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起學習學習吧
    2018-10-10
  • Navicat Premium連接mongodb詳細教程

    Navicat Premium連接mongodb詳細教程

    這篇文章主要介紹了Navicat Premium連接mongodb詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • springboot整合mongodb

    springboot整合mongodb

    這篇文章主要介紹了springboot如何整合mongodb,mongodb的安裝和使用,感興趣的同學可以參考閱讀本文
    2023-03-03
  • MongoDB如何正確中斷正在創(chuàng)建的索引詳解

    MongoDB如何正確中斷正在創(chuàng)建的索引詳解

    這篇文章主要給大家介紹了關(guān)于MongoDB如何正確中斷正在創(chuàng)建的索引的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • MongoDB加入到Windows服務(wù)的方法

    MongoDB加入到Windows服務(wù)的方法

    這篇文章主要介紹了Windows中把MongoDB加入到本地服務(wù)的方法,即把MongoDB加入到Windows服務(wù)中隨機啟動,需要的朋友可以參考下
    2014-10-10
  • Mongodb批量刪除gridfs文件實例

    Mongodb批量刪除gridfs文件實例

    這篇文章主要介紹了Mongodb批量刪除gridfs文件實例,本文根據(jù)生產(chǎn)環(huán)境實際需求總結(jié)而來,需要的朋友可以參考下
    2015-01-01

最新評論