在DBA的日常工作中,數(shù)據(jù)庫的會話監(jiān)控和管理是一項十分重要的工作,在關(guān)系型數(shù)據(jù)庫中,有v$session、processlist、pg_stat_activity等表或者視圖提供會話信息查詢,但是在非關(guān)系型的mongodb中,除了local庫的system.session集合中存了簡單的用戶信息外,并無其他集合存了會話信息,只能通過db.currentOp()命令來采集信息。
db.currentOp()輸出的結(jié)果如下:
由上圖可看出輸出結(jié)果inprog是一個數(shù)組,在數(shù)組里面要實現(xiàn)統(tǒng)計和過濾等,比較困難,只能結(jié)合javascript腳本實現(xiàn)。而在Mongodb3.6中引入了$currentop聚合管道符,使Mongodb的會話管理變得更加容易。
該管道符只能在admin庫執(zhí)行,使用方法:
{$currentOp: { allUsers:
示例:顯示當(dāng)前會話,按照客戶端IP進行分組統(tǒng)計
--顯示當(dāng)前的會話中,以客戶端IP(10網(wǎng)段)地址分組統(tǒng)計連接數(shù)
useadmin db.aggregate([ {$currentOp: { allUsers: true ,idleConnections:true} },--取出所有會話 {$project:{IP:{$split:["$client",":"]}}},顯示client字段,并按:拆分成數(shù)組 {$unwind:"$IP"},--將數(shù)組拆分成文檔 {$match:{"IP":/^10./}},--過濾符合條件的文檔 {$group:{_id:"$IP",count:{$sum:1}}}—按IP地址分組統(tǒng)計 ]); 以上為例,根據(jù)db.currentOp()的輸出結(jié)果字段信息,結(jié)合Mongodb管道的使用,就可靈活的實現(xiàn)各種統(tǒng)計功能和問題定位。 |
--顯示當(dāng)前的活動會話信息
db.aggregate([
{$currentOp: { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1}},
{$match:{client:{$exists:true}}},
{$sort:{microsecs_running:-1}}
]);
--查看當(dāng)前是否有大量會話在等待鎖
db.aggregate([
{$currentOp: { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1,waitingForLock:1}},
{$match:{"waitingForLock":true}},
{$count:"waitfor locks"}
]);
如果存在大量鎖等待,則首先檢查是否存在表、庫、全局鎖:
db.aggregate([
{$currentOp: { allUsers: true ,idleConnections:false} }, {$match:{$or:[{"locks.Global":"W"},{"locks.Database":"W"},{"locks.Collection":"W"}]}}
])
如果發(fā)現(xiàn)有會話持有表級、庫級或者全局鎖,則可根據(jù)其opid,執(zhí)行db.killOp(opid)釋放鎖資源。如果未發(fā)現(xiàn)表級以上的鎖,則檢查不處于等待狀態(tài)的會話在做些什么操作,再進行具體處理:
db.aggregate([
{$currentOp: { allUsers: true ,idleConnections:false} },
{$project:{opid:1,client:1,op:1,ns:1,microsecs_running:1,waitingForLock:1}},
{$match:{$and:[{"waitingForLock":false},{client:{$exists:true}}]}},
{$sort:{microsecs_running:-1}}
]);
示例:前臺索引創(chuàng)建導(dǎo)致庫級鎖
模擬在前臺創(chuàng)建索引,同時其他會話在相同數(shù)據(jù)庫做讀寫操作,通過下圖可看到有兩個會話在等待:
以上查詢,均只能查詢實時會話情況,如果要查詢歷史問題,在開啟了慢日志的情況下,可以通過后臺日志進行跟蹤,但是如果在業(yè)務(wù)量較大的環(huán)境下,如果出現(xiàn)鎖阻塞,可能會導(dǎo)致大量日志產(chǎn)生,建議使用mtools工具包進行日志分析。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/130147.html
摘要:不采用關(guān)系模型主要是為了獲得更好的擴展性。易于擴展應(yīng)用程序數(shù)據(jù)集的大小正在以不可思議的速度增長。過去非常罕見的級別數(shù)據(jù),現(xiàn)在已是司空見慣了。這種精簡方式的設(shè)計是能夠?qū)崿F(xiàn)如此高性能的原因之一。下一篇文章指南基礎(chǔ)知識文檔集合數(shù)據(jù)庫客戶端 下一篇文章:MongoDB指南---2、MongoDB基礎(chǔ)知識-文檔、集合、數(shù)據(jù)庫、客戶端 MongoDB是一款強大、靈活,且易于擴展的通用型數(shù)據(jù)庫。它...
摘要:不采用關(guān)系模型主要是為了獲得更好的擴展性。易于擴展應(yīng)用程序數(shù)據(jù)集的大小正在以不可思議的速度增長。過去非常罕見的級別數(shù)據(jù),現(xiàn)在已是司空見慣了。這種精簡方式的設(shè)計是能夠?qū)崿F(xiàn)如此高性能的原因之一。下一篇文章指南基礎(chǔ)知識文檔集合數(shù)據(jù)庫客戶端 下一篇文章:MongoDB指南---2、MongoDB基礎(chǔ)知識-文檔、集合、數(shù)據(jù)庫、客戶端 MongoDB是一款強大、靈活,且易于擴展的通用型數(shù)據(jù)庫。它...
摘要:是為互聯(lián)網(wǎng)服務(wù)的協(xié)議族,它是網(wǎng)絡(luò)通信協(xié)議的統(tǒng)稱,由和等協(xié)議組成。預(yù)告本周五更新面試常考題之會話控制和網(wǎng)絡(luò)協(xié)議,敬請期待。以上內(nèi)容摘自程序員面試筆試寶典書籍,該書已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_銷售。 你好,是我琉憶,歡迎您來到PHP面試專欄。本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面試常考之會話控制周三:PHP面試常考之網(wǎng)絡(luò)協(xié)議周五:PHP面試常考題之會話控...
摘要:排查使用一直在使用云數(shù)據(jù)庫的時候您可能會遇到使用率很高或者使用率接近的問題,從而導(dǎo)致數(shù)據(jù)讀寫處理異常緩慢分析數(shù)據(jù)庫正在執(zhí)行的請求通過連接實例。表示該操作已經(jīng)執(zhí)行的時間,單位為微秒。通常是查詢插入更新刪除中的一種。排查MongoDB CPU使用一直1000%在使用云數(shù)據(jù)庫MongoDB的時候您可能會遇到MongoDB CPU使用率很高或者CPU使用率接近100%的問題,從而導(dǎo)致數(shù)據(jù)讀寫處理異常...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20