1. MongoDB 系统状态查看
在进行 MongoDB 数据库的运维操作时,需要经常查看数据库的状态,以了解服务器的当前情况。MongoDB 提供了一个系统状态相关的命令——db.serverStatus()
,可以返回关于当前服务器的详细信息。
注:在使用 MongoDB 中的 shell 客户端进行交互操作时,在不指定数据库的情况下,shell 默认会访问 test 数据库。
> mongo
MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("09e05ba3-2a64-4c82-b635-236a0a4a9a96") }
MongoDB server version: 4.4.0
> db
test
2. 返回系统状态信息
2.1 返回系统状态信息的命令
要查看当前 MongoDB 服务器的状态信息,只需要在 MongoDB shell 中输入如下命令:
> db.serverStatus()
执行这个命令后,将返回当前服务器的各项状态信息,包括进程 ID、版本号、启动时间等,具体信息见下方示意图:
{
"host" : "mongo",
"version" : "4.4.0",
"process" : "mongod",
"pid" : 222,
"uptime" : 71,
"uptimeMillis" : 71091,
"uptimeEstimate" : "1m",
"localTime" : ISODate("2022-01-19T10:40:19.337Z"),
"asserts" : {
"regular" : 0,
"warning" : 0,
"msg" : 0,
"user" : 7,
"rollovers" : 0
},
"connections" : {
"current" : 1,
"available" : 998,
"totalCreated" : 1
},
"storageEngine" : {
"name" : "wiredTiger"
},
"indexCounterStats" : {
"accesses" : 0,
"hits" : 0,
"misses" : 0,
"resets" : 0,
"missRatio" : NaN,
"hitRatio" : NaN
},
"mem" : {
"bits" : 64,
"resident" : 79,
"virtual" : 437
},
"network" : {
"bytesIn" : 836,
"bytesOut" : 3514,
"numRequests" : 17
},
"locks" : {
"%" : {
"global" : {
"acquireCount" : {
"r" : NumberLong(25),
"w" : NumberLong(17)
},
"acquireWaitCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
},
"timeAcquiringMicros" : {
"r" : NumberLong(2662),
"w" : NumberLong(4264)
}
},
"admin" : {
"acquireCount" : {
"r" : NumberLong(2)
},
"acquireWaitCount" : {
"r" : NumberLong(1)
},
"timeAcquiringMicros" : {
"r" : NumberLong(6)
}
},
"local" : {
"acquireCount" : {
"r" : NumberLong(25),
"w" : NumberLong(16)
},
"acquireWaitCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
},
"timeAcquiringMicros" : {
"r" : NumberLong(514),
"w" : NumberLong(4322)
}
}
}
},
"serverMetrics" : {
"connections" : {
"current" : 0,
"available" : 1000,
"totalCreated" : 1,
"activeInProgress" : 0,
"active" : 1,
"awaitingTopologyChanges" : 0
},
"document" : {
"deleted" : 0,
"inserted" : 609,
"returned" : 0,
"updated" : 0
},
"getLastError" : {
"wtimeouts" : NumberLong(0)
},
"operation" : {
"fastmod" : 0,
"idhack" : 0,
"scanAndOrder" : 0,
"writeConflicts" : 0
},
"queryExecutor" : {
"scanned" : 622,
"scannedObjects" : 609,
"scannedFull" : 0,
"scannedFullObjects" : 0
},
"repl" : {
"apply" : {
"batches" : {
"num" : 0,
"totalMillis" : 0
},
"ops" : 0
},
"buffer" : {
"count" : 0,
"maxSizeBytes" : 268435456,
"sizeBytes" : 0
},
"network" : {
"bytes" : 0,
"getmores" : {
"num" : 0,
"totalMillis" : 0
},
"ops" : 0,
"readersCreated" : 0
},
"oplog" : {
"insert" : {
"num" : 0,
"totalMillis" : 0
}
}
}
},
"storageStats" : {
"index" : {
"accesses" : 0,
"hits" : 0,
"misses" : 0,
"resets" : 0,
"missRatio" : NaN,
"hitRatio" : NaN
},
"freelist" : {
"search" : {
"bucketExhausted" : 0,
"requests" : 0,
"scanned" : 0
}
},
"collections" : {
"num" : 0
},
"fileSize" : 224814336,
"dataSize" : 4019211,
"storageSize" : 34830336,
"nsSizeMB" : 0,
"extentFreeList" : {
"num" : {
"regular" : 0,
"inMemo" : 0
},
"totalSize" : 0,
"totalSizeMb" : 0
},
"indexes" : {
"num" : 0,
"totalSize" : 0,
"memUsage" : {
"counters" : {
"v4" : {
"value" : 0
}
},
"bytes" : 0
},
"gettingStarted" : true
},
"fileOpen" : {
"fd" : {
"open" : 1,
"limit" : 1048576
}
}
}
}
2.2 服务器运行时间和进程 ID
uptime 键告诉我们该服务器已经运行了多长时间,其单位为秒。而 pid 键则告诉我们 MongoDB 进程的进程 ID。
{
"pid" : 222,
"uptime" : 71,
"uptimeMillis" : 71091,
"uptimeEstimate" : "1m",
"localTime" : ISODate("2022-01-19T10:40:19.337Z")
}
2.3 系统内存使用情况
在系统状态信息中,可以通过 mem 键来查看 MongoDB 服务器当前在系统内存中使用的情况。
"mem" : {
"bits" : 64,
"resident" : 79,
"virtual" : 437
}
bits 键用于告诉我们 MongoDB 正在使用 64 位操作系统,因为它的值为 64。
resident 键指的是 MongoDB 进程当前在物理内存中的使用量,以 MB 为单位。
virtual 键指的是 MongoDB 进程当前占用的虚拟内存大小,以 MB 为单位。
2.4 数据库连接情况
connections 键可以告诉我们当前数据库连接池中的连接情况,以及已经创建的连接数量。
"connections" : {
"current" : 1,
"available" : 998,
"totalCreated" : 1
}
current 键是指当前连接池中正被占用的连接数。
available 键是指当前连接池中可用的连接数。
totalCreated 键是指自启动以来,已经创建的数据库连接总数。
2.5 索引使用情况
在系统状态信息中,关于索引使用情况的信息是以 indexCounterStats 键的形式出现的。
"indexCounterStats" : {
"accesses" : 0,
"hits" : 0,
"misses" : 0,
"resets" : 0,
"missRatio" : NaN,
"hitRatio" : NaN
}
accesses 键显示了索引已经被访问的总次数。
hits 键显示了索引被访问并返回结果的总次数。
misses 键显示了索引被访问但未返回结果的总次数。
3. 结论
通过 db.serverStatus()
命令,可以快速查询 MongoDB 的系统状态。掌握此命令的使用方法,对于监控 MongoDB 服务器状态以及性能调优都有着重要的作用。在实际应用中,还可以利用系统状态信息进行服务健康检查,警告阈值的设置等运维管理操作。