不管是在關(guān)系型還是非關(guān)系型數(shù)據(jù)庫(kù)中,查詢(xún)語(yǔ)句的優(yōu)化在數(shù)據(jù)庫(kù)的的優(yōu)化中占了很大比例。在Oracle中,通過(guò)性能視圖,可以獲取TOPSQL,而在Mysql、PG、Mongodb這些稍小型的數(shù)據(jù)庫(kù)中,均只能通過(guò)設(shè)置慢查詢(xún)閾值的方式,獲取慢SQL。在Mysql中,慢日志有獨(dú)立的慢日志文件,而PG和Mongo中慢日志都是輸出到數(shù)據(jù)庫(kù)的運(yùn)行日志里面。在Mongodb中,數(shù)據(jù)庫(kù)在輸出慢日志的同時(shí)會(huì)顯示語(yǔ)句執(zhí)行時(shí)的執(zhí)行計(jì)劃。
Mongodb慢日志通過(guò)如下參數(shù)設(shè)置:
operationProfiling:
mode: slowOp --表示抓取慢查詢(xún)
slowOpThresholdMs: 200 --抓取執(zhí)行時(shí)間超過(guò)200ms的查詢(xún)
也可以在實(shí)例啟動(dòng)后,在數(shù)據(jù)庫(kù)層動(dòng)態(tài)的設(shè)置慢查詢(xún)閾值db.setProfilingLevel(1,{ slowms: 200 })。
設(shè)置之后,在當(dāng)前數(shù)據(jù)庫(kù)中會(huì)產(chǎn)生一個(gè)名為system.profile的集合,該集合是一個(gè)capped集合,固定大小為1MB,當(dāng)超過(guò)1MB后,會(huì)自動(dòng)覆蓋舊數(shù)據(jù)。使用showprofile可以顯示最近的5條慢查詢(xún)記錄以及語(yǔ)句的執(zhí)行計(jì)劃。
同時(shí),在配置了慢查詢(xún)閾值后,mongodb會(huì)在運(yùn)行日志中打印出慢日志,如下: 8e126deb942317dd49c), syncId: "173758523", resourceId: "1115439752", type: "ml_song_material", originalStatus: "1", doneStatus: "0", lastModifiedTime: new Date(1601140961092) }, multi: false, upsert: true } planSummary: IDHACK keysEx amined:1 docsExamined:1 nMatched:1 nModified:1 keysInserted:3 keysDeleted:3 numYields:1 locks:{ Global: { acquireCount: { r: 4, w: 4 } }, Database: { acquireCount: { w: 4 } }, Collection: { acquireCount: { w: 3 } }, oplog: { acquireCo unt: { w: 1 } } } 221ms 2020-09-27T01:22:41.310+ |
由于在Mongodb中沒(méi)有綁定變量的概念,所以當(dāng)業(yè)務(wù)大量執(zhí)行慢查詢(xún)時(shí),system.profile集合中存不了多少數(shù)據(jù),且可能大都是不同變量的相同語(yǔ)句,同時(shí)在數(shù)據(jù)庫(kù)運(yùn)行日志中會(huì)出現(xiàn)慢查詢(xún)刷屏的現(xiàn)象。在這種情況下,建議使用mtools工具的mloginfo對(duì)慢查詢(xún)進(jìn)行分析和過(guò)濾,結(jié)果如下:
該工具會(huì)按照查詢(xún)條件進(jìn)行分組統(tǒng)計(jì),相當(dāng)于oracle的綁定變量,輸出結(jié)果直觀明了。
基本在所有的數(shù)據(jù)庫(kù)中,都可以使用explain查看語(yǔ)句的執(zhí)行計(jì)劃,Mongodb也不例外,其用法為db.collectionname.find({field_name:***}).explain();
例如:
同時(shí)也可以使用
db.collectionname.explain().find({field_name:***}).其中,explain支持如下3種模式:
db.Text.explain("queryPlanner").find({"txtId":"5855"});--只生成執(zhí)行計(jì)劃,默認(rèn)模式
db.Text.explain("executionStats").find({"txtId":"5855"});--生成執(zhí)行計(jì)劃并執(zhí)行,顯示被拒絕的執(zhí)行計(jì)劃,同時(shí)顯示執(zhí)行的統(tǒng)計(jì)信息
db.Text.explain("allPlansExecution").find({"txtId":"5855"});--包含以上兩種模式,并且顯示在生成執(zhí)行計(jì)劃時(shí)被拒絕的執(zhí)行計(jì)劃的統(tǒng)計(jì)信息,有點(diǎn)類(lèi)似Oracle10053 event.
對(duì)于update和delete等寫(xiě)操作,在explain()時(shí)會(huì)被執(zhí)行,但是結(jié)果不會(huì)應(yīng)用到數(shù)據(jù)庫(kù)。
示例(此處不描述輸出的各行信息的意思):
Mongodb的執(zhí)行計(jì)劃包括全表掃描(COLLSCAN)、索引掃描(IXSCAN)、分片合并(SHARD_MERGE)、_ID過(guò)濾(IDHACK),因?yàn)開(kāi)ID列上有一個(gè)特殊的唯一索引,所以一般情況下來(lái)說(shuō)如果語(yǔ)句的執(zhí)行計(jì)劃是IDHACK,無(wú)疑該執(zhí)行計(jì)劃是最優(yōu)的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/130125.html
摘要:優(yōu)志愿張海鵬宋體背景宋體每年月下旬到月下旬期間是高考填志愿的高峰期,也是優(yōu)志愿后端面臨大流量高并發(fā)請(qǐng)求的業(yè)務(wù)高峰期。對(duì)于優(yōu)志愿讀多寫(xiě)少的場(chǎng)景及其業(yè)務(wù)高峰期,用戶(hù)可以按需增刪節(jié)點(diǎn),更好地實(shí)現(xiàn)讀取性能的擴(kuò)展。 隨著用戶(hù)規(guī)模的增長(zhǎng),數(shù)據(jù)庫(kù)的壓力也在成倍增加。面對(duì)大流量、高并發(fā),UCloud MongoDB 做到了高效,并展現(xiàn)出了更好的性能體驗(yàn)。 —— 優(yōu)志愿 CTO 張海鵬 背景...
我的專(zhuān)欄地址:我的segmentfault,歡迎瀏覽 一、執(zhí)行計(jì)劃介紹 MongoDB 3.0之后,explain的返回與使用方法與之前版本有了不少變化,介于3.0之后的優(yōu)秀特色,本文僅針對(duì)MongoDB 3.0+的explain進(jìn)行討論?,F(xiàn)版本explain有三種模式,分別如下: queryPlanner executionStats allPlansExecution 其中 qu...
摘要:正是存在問(wèn)題,促使我們考慮引入數(shù)據(jù)庫(kù)審核平臺(tái)。的確,與很多互聯(lián)網(wǎng)公司相比,數(shù)據(jù)庫(kù)數(shù)十套的估摸并不是太大但與互聯(lián)網(wǎng)類(lèi)公司不同,類(lèi)似宜信這類(lèi)金融類(lèi)公司對(duì)數(shù)據(jù)庫(kù)的依賴(lài)性更大,大量的應(yīng)用是重?cái)?shù)據(jù)庫(kù)類(lèi)的,且其使用復(fù)雜程度也遠(yuǎn)比互聯(lián)網(wǎng)類(lèi)的復(fù)雜。 作者:韓鋒 出處:DBAplus社群分享 Themis開(kāi)源地址:https://github.com/CreditEaseDBA 拓展閱讀:宜信開(kāi)源|數(shù)...
摘要:整體來(lái)說(shuō),通過(guò)查看執(zhí)行計(jì)劃,分析查詢(xún)性能情況,可以幫助我們更好的分析和優(yōu)化,必要的時(shí)候可以創(chuàng)建索引,提升查詢(xún)性能。 一、概述 MongoDB中的explain()函數(shù)可以幫助我們查看查詢(xún)相關(guān)的信息,查詢(xún)分析可以確保我們創(chuàng)建的索引是否有效,是查詢(xún)語(yǔ)句性能分析的重要工具。 二、explain()基本用法 explain()的用法是必須放在最后面,語(yǔ)法如下: db.collecton.fin...
閱讀 1459·2023-01-11 13:20
閱讀 1814·2023-01-11 13:20
閱讀 1263·2023-01-11 13:20
閱讀 2006·2023-01-11 13:20
閱讀 4226·2023-01-11 13:20
閱讀 2879·2023-01-11 13:20
閱讀 1488·2023-01-11 13:20
閱讀 3807·2023-01-11 13:20