MongoDB狀態值
文章目錄
一、db.serverStatus()
1.1 鎖資訊
鎖定模式 | 描述 |
---|---|
R | 表示共享(S)鎖。 |
W | 表示排他(X)鎖。 |
r | 表示意圖共享(IS)鎖。 |
w | 表示Intent Exclusive(IX)鎖。 |
rs0:PRIMARY> db.serverStatus().locks
{
"ParallelBatchWriterMode" : { //並行批處理寫入模式下的鎖資訊,4.2新增
"acquireCount" : {
"r" : NumberLong(190252)
}
},
"ReplicationStateTransition" : { //複製狀態轉換的鎖定資訊,4.2新增
"acquireCount" : { //在該模式下需要獲取的鎖資源資訊
"w" : NumberLong(1046893),
"W" : NumberLong(2)
},
"acquireWaitCount" : { //由於鎖衝突,在獲取鎖資源時鎖等待的次數
"w" : NumberLong(1)
},
"timeAcquiringMicros" : { //持有鎖的累計時間
"w" : NumberLong(10527)
}
},
"Global" : { //全域性鎖
"acquireCount" : {
"r" : NumberLong(1027547),
"w" : NumberLong(19341),
"W" : NumberLong(5)
},
"acquireWaitCount" : {
"w" : NumberLong(1),
"W" : NumberLong(1)
},
"timeAcquiringMicros" : {
"w" : NumberLong(11191),
"W" : NumberLong(90)
}
},
"Database" : { //資料庫級別鎖
"acquireCount" : {
"r" : NumberLong(693553),
"w" : NumberLong(2778),
"W" : NumberLong(24)
},
"acquireWaitCount" : {
"r" : NumberLong(1),
"W" : NumberLong(2)
},
"timeAcquiringMicros" : {
"r" : NumberLong(11088),
"W" : NumberLong(143)
}
},
"Collection" : { //集合級別鎖
"acquireCount" : {
"r" : NumberLong(186641),
"w" : NumberLong(2773),
"R" : NumberLong(1),
"W" : NumberLong(18)
},
"acquireWaitCount" : {
"r" : NumberLong(1)
},
"timeAcquiringMicros" : {
"r" : NumberLong(22532)
}
},
"Mutex" : { //mytex互斥鎖
"acquireCount" : {
"r" : NumberLong(674754)
}
},
"oplog" : { //oplog鎖
"acquireCount" : {
"r" : NumberLong(502132),
"w" : NumberLong(2),
"W" : NumberLong(1)
}
}
}
1.2 全域性鎖資訊
rs0:PRIMARY> db.serverStatus().globalLock
{
"totalTime" : NumberLong("2651301900000"), //自上次發生lock以來的時間
"currentQueue" : { //鎖等待佇列資訊
"total" : 0, //因為鎖而產生的排隊的總數
"readers" : 0, //等待讀鎖而產生的排隊數(kQueuedReader)
"writers" : 0 //等待寫鎖而產生的排隊數(kQueuedWriter)
},
"activeClients" : { //活躍連線數資訊
"total" : 38, //當前活躍連線數
"readers" : 0, //當前執行讀操作的活躍連線數(kActiveReader)
"writers" : 0 //當前執行寫操作的活躍連線數(kActiveWriter)
}
}
1.3 記憶體資訊
rs0:PRIMARY> db.serverStatus().mem
{ "bits" : 64, //當前mongod體系架構為64位(32/64)
"resident" : 86, //當前使用的RAM量(以兆位元組(MB)為單位)
"virtual" : 1788, //mongod程式使用的虛擬記憶體的總量(以兆位元組(MB)為單位),如果該值顯著增加表示可能存在記憶體洩漏
"supported" : true //底層系統是否支援擴充套件記憶體資訊
}
1.4 assert資訊
rs0:PRIMARY> db.serverStatus().asserts //自mongod程式啟動以來引發的斷言數目的文件
{
"regular" : 0, //
"warning" : 0, //自mongod程式啟動以來引發的警告數
"msg" : 0, //
"user" : 1683, //自mongod程式啟動以來引發的“使用者斷言”數
"rollovers" : 0
}
1.5 連線資訊
rs0:PRIMARY> db.serverStatus().connections
{ "current" : 2, //當前連線數
"available" : 1998, //目前仍可允許的最大連線數
"totalCreated" : 3, //mongod建立的連線數(包括已經關閉的連線數)
"active" : 1 //當前活躍連線數
}
1.6 網路流量
rs0:PRIMARY> db.serverStatus().network
{
"bytesIn" : NumberLong(41312), //網路入流量
"bytesOut" : NumberLong(1757153), //網路出流量
"physicalBytesIn" : NumberLong(41312),
"physicalBytesOut" : NumberLong(1757153),
"numRequests" : NumberLong(214), //網路請求次數,為bytesIn、bytesOut提供上下文
"compression" : {
"snappy" : {
"compressor" : {
"bytesIn" : NumberLong(0),
"bytesOut" : NumberLong(0)
},
"decompressor" : {
"bytesIn" : NumberLong(0),
"bytesOut" : NumberLong(0)
}
},
"zstd" : {
"compressor" : {
"bytesIn" : NumberLong(0),
"bytesOut" : NumberLong(0)
},
"decompressor" : {
"bytesIn" : NumberLong(0),
"bytesOut" : NumberLong(0)
}
},
"zlib" : {
"compressor" : {
"bytesIn" : NumberLong(0),
"bytesOut" : NumberLong(0)
},
"decompressor" : {
"bytesIn" : NumberLong(0),
"bytesOut" : NumberLong(0)
}
}
},
"serviceExecutorTaskStats" : {
"executor" : "passthrough",
"threadsRunning" : 2
}
}
1.7 操作延時資訊
rs0:PRIMARY> db.serverStatus().opLatencies
{
"reads" : { //讀請求延時資訊
"latency" : NumberLong(242),
"ops" : NumberLong(2)
},
"writes" : { //寫請求延時資訊
"latency" : NumberLong(14718),
"ops" : NumberLong(4)
},
"commands" : { //資料庫命令延遲資訊
"latency" : NumberLong(122386),
"ops" : NumberLong(215)
},
"transactions" : {
"latency" : NumberLong(0),
"ops" : NumberLong(0)
}
}
1.8 各Read Concern級別運算元
rs0:PRIMARY> db.serverStatus().opReadConcernCounters
{ //自mongod程式啟動以來各個read concern級別運算元
"available" : NumberLong(0),
"linearizable" : NumberLong(0),
"local" : NumberLong(0),
"majority" : NumberLong(0),
"snapshot" : NumberLong(0),
"none" : NumberLong(8584)
}
1.9 複製資訊
rs0:PRIMARY> db.serverStatus().repl
{
"hosts" : [
"192.168.0.199:27017" //當前副本整合員資訊
],
"setName" : "rs0",
"setVersion" : 1,
"ismaster" : true, //當前節點是否為primary節點
"secondary" : false, //當前節點是否為secondry節點
"primary" : "192.168.0.199:27017", //primariy資訊
"me" : "192.168.0.199:27017",
"electionId" : ObjectId("7fffffff0000000000000001"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1591517114, 1),
"t" : NumberLong(1)
},
"lastWriteDate" : ISODate("2020-06-07T08:05:14Z"),
"majorityOpTime" : {
"ts" : Timestamp(1591517114, 1),
"t" : NumberLong(1)
},
"majorityWriteDate" : ISODate("2020-06-07T08:05:14Z")
},
"rbid" : 1 //回滾識別符號
}
1.10 儲存引擎資訊
rs0:PRIMARY> db.serverStatus().storageEngine
{
"name" : "wiredTiger", //儲存引擎
"supportsCommittedReads" : false, //是否支援Read concert的“majorty”
"oldestRequiredTimestampForCrashRecovery" : Timestamp(1591517334, 1),
"supportsPendingDrops" : false,
"dropPendingIdents" : NumberLong(0),
"supportsSnapshotReadConcern" : true,
"readOnly" : false,
"persistent" : true, //是否支援持久化到磁碟
"backupCursorOpen" : false
}
二、db.stats()
2.1 檢視某個資料庫統計資訊
db.db_name.stats() 或者db.runCommand({dbStats : 1,scale : 1073741824})可檢視某個資料庫下資料儲存佔用的統計資訊。
1)兩種檢視資料庫統計資訊方法
use db
db.stats()
use db
db.runCommand({dbStats : 1,scale : 1073741824}) //scale指定單位為GB
2)重要引數解釋
rs0:PRIMARY> db.stats()
{
"db" : "test", //資料庫名稱
"collections" : 13, //集合數
"views" : 0,
"objects" : 106703, //文件數
"avgObjSize" : 76.03043025969279, //每個文件的平均大小(位元組為單位)
"dataSize" : 8112675, //未壓縮資料總大小;
MMAPv1儲存引擎下,datasize包含預分配空間和填充因子,該大小因文件減小而減小;
WiredTiger儲存引擎下,datasize可能要比storagesize大,該大小會隨著文件的減小而減小
"storageSize" : 2797568, //實際佔用磁碟空間總大小(壓縮後),該值不會隨著文件的remove或者減小而減小,如果儲存引擎開啟compression的情況下,該值可能會比dataSize小。
"numExtents" : 0,
"indexes" : 14, //索引數目
"indexSize" : 2560000, //索引大小
"fsUsedSize" : 29936922624,
"fsTotalSize" : 37688381440,
"ok" : 1,
"operationTime" : Timestamp(1557390462, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1557390462, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
2.2 檢視某個集合統計資訊
use db
db.collbame.stats()
use db
db.runCommand({"collStats":"oplog.rs",scale:1048576}) //scale指定單位,單位為MB
三、db.currentOp()
3.1 db.currentOp()檢視當前資料庫會話執行情況。
db.currentOp()
或者
db.currentOp(
{
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)
3.2 重點關注
client #請求是由哪個客戶端發起
opid #操作的opid,可以通過 db.killOp(opid) 直接殺掉會話
secs_running/microsecs_running
#這個值重點關注,代表請求執行的時間,如果這個值特別大,就得注意了,看看請求是否合理
query/ns: #這個能看出是對哪個集合正在執行什麼操作
lock*: #還有一些跟鎖相關的引數
3.3 關於kill會話
1)斷開MongoDB Shell後,連線會關閉,但是連線請求的執行緒並沒有結束,直到命令執行完畢,執行緒給客戶端返回結果時,發現連線已經關閉時才會退出執行緒。
2)MongoDB並不是傳送完killOp後請求就會立刻結束
當連線對應的服務執行緒在程式碼邏輯上儲存了killPending欄位時程式碼會不斷呼叫該引數檢查判斷killPending的狀態。
傳送killOp後,請求要執行到下一個【檢查點】,判斷killPending=1後才會殺掉當前會話。
3.4 殺掉慢會話
> db.killOp(380692)
{ "info" : "attempting to kill op" }
3.5 db.killOp(opid)的實現原理
每個連線對應的服務執行緒儲存了一個killPending的欄位,當傳送killOp時,會將該欄位置1;請求在執行過程中,可以通過不斷的呼叫OperationContext::checkForInterrupt()來檢查killPending是否被設定,如果被設定,則執行緒退出。
一個請求要支援killOp,必須在請求的處理邏輯里加上checkForInterrupt()檢查點才行,否則即使傳送了killOp,也只能等待請求完全處理完畢執行緒才會退出。
相關文章
- MongoDB原理:複製集狀態同步機制MongoDB
- MongoDB分片叢集節點狀態stateStr:RECOVERING解決MongoDB
- 獲取ChoiceGroup多選狀態下的值
- 子元件獲取父元件的值,將這個值作為狀態值儲存元件
- SICP:賦值和區域性狀態(Python實現)賦值Python
- Elasticsearch叢集狀態健康值處於red狀態問題分析與解決(圖文詳解)Elasticsearch
- 前端狀態管理與有限狀態機前端
- React 狀態管理:狀態與生命週期React
- 狀態機
- 狀態列
- 狀態碼
- 狀態管理
- mongodb 取欄位最大值MongoDB
- 新業態青年發展狀況與價值訴求調查
- Vuex 單狀態庫 與 多模組狀態庫Vue
- elementui 如果變數為1 顯示 開啟,2顯示關閉。表格怎麼根據狀態碼顯示狀態值UI變數
- 有限狀態機
- Vuex狀態管理Vue
- 調整狀態
- http狀態碼HTTP
- UML狀態圖
- Flink狀態妙用
- Hibernate物件狀態物件
- http 狀態碼HTTP
- USB LPM狀態
- Flink狀態(一)
- HTTP狀態 404~~~~HTTP
- Flutter | 狀態管理Flutter
- 狀態壓縮
- git操作---將staged狀態檔案回退到modified狀態Git
- 05@多用列舉表示狀態、選項、狀態碼
- React 4 種狀態型別及 N 種狀態管理React型別
- 系統設計架構:有狀態與無狀態架構
- Python .get 巢狀 JSON 值Python巢狀JSON
- 在 vue-router 跳轉過程中保留頁面元件的值狀態Vue元件
- mysql 鎖狀態的一些狀態資訊記錄MySql
- 【演算法】狀態之美,TCP/IP狀態轉換探索演算法TCP
- 淺談前端的狀態管理,以及anguar的狀態管理庫前端