久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mongodb 利用率高如何解決

共計(jì) 2225 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

自動(dòng)寫代碼機(jī)器人,免費(fèi)開通

本篇文章為大家展示了 mongodb 利用率高如何解決,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

Step1: 分析數(shù)據(jù)庫(kù)正在執(zhí)行的請(qǐng)求

db.currentOp() 

client:請(qǐng)求是由哪個(gè)客戶端發(fā)起的?

opid:操作的 opid,有需要的話,可以通過 db.killOp(opid) 直接干掉的操作

secs_running/microsecs_running:這個(gè)值重點(diǎn)關(guān)注,代表請(qǐng)求運(yùn)行的時(shí)間,如果這個(gè)值特別大,就得注意了,看看請(qǐng)求是否合理

query/ns: 這個(gè)能看出是對(duì)哪個(gè)集合正在執(zhí)行什么操作

lock*:還有一些跟鎖相關(guān)的參數(shù)

Step2:分析數(shù)據(jù)庫(kù)慢請(qǐng)求

MongoDB 支持 profiling 功能,將請(qǐng)求的執(zhí)行情況記錄到同 DB 下的 system.profile 集合里,profiling 有 3 種模式

profiling 設(shè)置文檔在這里,多看官網(wǎng)文檔

關(guān)閉 profiling

針對(duì)所有請(qǐng)求開啟 profiling,將所有請(qǐng)求的執(zhí)行都記錄到 system.profile 集合

針對(duì)慢請(qǐng)求 profiling,將超過一定閾值的請(qǐng)求,記錄到 system.profile 集合

默認(rèn)請(qǐng)求下,MongoDB 的 profiling 功能是關(guān)閉,生產(chǎn)環(huán)境建議開啟,慢請(qǐng)求閾值可根據(jù)需要定制,如不確定,直接使用默認(rèn)值 100ms。

設(shè)置 100ms 的慢請(qǐng)求

db.setProfilingLevel(1, { slowms: 100})

在開啟了慢請(qǐng)求 profiling 的情況下(MongoDB 云數(shù)據(jù)庫(kù)是默認(rèn)開啟慢請(qǐng)求 profiling 的),我們對(duì)慢請(qǐng)求的內(nèi)容進(jìn)行分析,來找出可優(yōu)化的點(diǎn),常見的包括。

profiling 的結(jié)果輸出含義在這里,多看官網(wǎng)文檔

CPU 殺手 1:全表掃描

全集合(表)掃描 COLLSCAN,當(dāng)一個(gè)查詢(或更新、刪除)請(qǐng)求需要全表掃描時(shí),是非常耗 CPU 資源的,所以當(dāng)你在 system.profile 集合 或者 日志文件發(fā)現(xiàn) COLLSCAN 關(guān)鍵字時(shí),就得注意了,很可能就是這些查詢吃掉了你的 CPU 資源;確認(rèn)一下,如果這種請(qǐng)求比較頻繁,最好是針對(duì)查詢的字段建立索引來優(yōu)化。

一個(gè)查詢掃描了多少文檔,可查看 system.profile 里的 docsExamined 的值,該值越大,請(qǐng)求 CPU 開銷越大。

關(guān)鍵字:COLLSCAN、docsExamined

CPU 殺手 2:不合理的索引

有的時(shí)候,請(qǐng)求即使查詢走了索引,執(zhí)行也很慢,通常是因?yàn)楹侠斫⒉惶侠恚ɑ蛘呤瞧ヅ涞慕Y(jié)果本身就很多,這樣即使走索引,請(qǐng)求開銷也不會(huì)優(yōu)化很多)

如下所示,假設(shè)某個(gè)集合的數(shù)據(jù),x 字段的取值很少(假設(shè)只有 1、2),而 y 字段的取值很豐富。

{x: 1, y: 1}

{

{x: 1, y: 2}

{

{x: 1, y: 3}

.

……

{

{x: 1, y: 100000} 

{

{x: 2, y: 1}

{

{x: 2, y: 2}

{

{x: 2, y: 3}

.

……

{

{x: 1, y: 100000} 

要服務(wù) {x: 1: y: 2} 這樣的查詢

db.createIndex({y: 1} )        效果好,因?yàn)?y 相同取值很少

d

db.createIndex({y: 1, x: 1} )  效果好,因?yàn)?y 相同取值少

一個(gè)走索引的查詢,掃描了多少條索引,可查看 system.profile 里的 keysExamined 字段,該值越大,CPU 開銷越大。

關(guān)鍵字:IXSCAN、keysExamined

CPU 殺手 3:大量數(shù)據(jù)排序

當(dāng)查詢請(qǐng)求里包含排序的時(shí)候,如果排序無法通過索引滿足,MongoDB 會(huì)在內(nèi)存李結(jié)果進(jìn)行排序,而排序這個(gè)動(dòng)作本身是非常耗 CPU 資源的,優(yōu)化的方法仍然是建立索引,對(duì)經(jīng)常需要排序的字段,建立索引。

當(dāng)你在 system.profile 集合 或者 日志文件發(fā)現(xiàn) SORT 關(guān)鍵字時(shí),就可以考慮通過索引來優(yōu)化排序。當(dāng)請(qǐng)求包含排序階段時(shí),system.profile 里的 hasSortStage 字段會(huì)為 true。

關(guān)鍵字:SORT、hasSortStage

======================MongodDB shard key 片鍵選擇 =====================

主要考慮 key 的「離散度」以及「頻率」,離散度越高越好,能更好的分散數(shù)據(jù);頻率越低越好,避免出現(xiàn)熱點(diǎn);

===========MongoDB 連接串樣例 ========================

正確連接分片集群的姿勢(shì)

要正確連接復(fù)制集,需要先了解下 MongoDB 的 Connection String URI,所有官方的 driver 都支持以 Connection String 的方式來連接 MongoDB 分片集群。

下面就是 Connection String 包含的主要內(nèi)容

mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]

mongodb:// 前綴,代表這是一個(gè) Connection String

username:password@ 如果啟用了鑒權(quán),需要指定用戶密碼

hostX:portX 多個(gè) mongos 的地址列表

/database 鑒權(quán)時(shí),用戶帳號(hào)所屬的數(shù)據(jù)庫(kù)

?options 指定額外的連接選項(xiàng)

上述內(nèi)容就是 mongodb 利用率高如何解決,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。

向 AI 問一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)2225字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 昂仁县| 敦煌市| 丹棱县| 科技| 泊头市| 石阡县| 内江市| 洪湖市| 新丰县| 吉林市| 克拉玛依市| 富裕县| 泗洪县| 阿拉尔市| 镇安县| 登封市| 体育| 双辽市| 汝州市| 嘉峪关市| 西峡县| 图木舒克市| 建阳市| 宝丰县| 天长市| 龙山县| 九龙坡区| 外汇| 西充县| 商水县| 泗洪县| 阿图什市| 永仁县| 玛曲县| 云梦县| 额济纳旗| 武鸣县| 东宁县| 印江| 剑阁县| 林州市|