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