1. 程式人生 > >MongoDB之——效能監控

MongoDB之——效能監控

1、mongosniff

此工具可以從底層監控到底有哪些命令傳送給了 MongoDB 去執行,從中就可以進行分析:
以 root 身份執行:

./mongosniff --source NET lo
然後其會監控位到本地以 localhost 監聽預設 27017 埠的 MongoDB 的所有包請求,如執行”show dbs” 操作
[[email protected] bin]# ./mongo
MongoDB shell version: 1.8.1
connecting to: test
> show dbs
admin 0.0625GB
foo 0.0625GB
local (empty)
test 0.0625GB
>
那麼你可以看到如下輸出。
[[email protected] bin]# ./mongosniff --source NET lo
sniffing... 27017
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 60 bytes id:537ebe0f 1400815119
query: { whatsmyuri: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 78 bytes id:531c3855 1394358357 - 1400815119
reply n:1 cursorId: 0
{ you: "127.0.0.1:38500", ok: 1.0 }
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 80 bytes id:537ebe10 1400815120
query: { replSetGetStatus: 1, forShell: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 92 bytes id:531c3856 1394358358 - 1400815120
reply n:1 cursorId: 0
{ errmsg: "not running with --replSet", ok: 0.0 }
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 67 bytes id:537ebe11 1400815121
query: { listDatabases: 1.0 } ntoreturn: -1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 293 bytes id:531c3857 1394358359 - 1400815121
reply n:1 cursorId: 0
{ databases: [ { name: "foo", sizeOnDisk: 67108864.0, empty: false }, { name: "test",
sizeOnDisk: 67108864.0, empty: false }, { name: "admin", sizeOnDisk: 67108864.0, empty: false },
{ name: "local", sizeOnDisk: 1.0, empty: true } ], totalSize: 201326592.0, ok: 1.0 }
127.0.0.1:38500 -->> 127.0.0.1:27017 admin.$cmd 80 bytes id:537ebe12 1400815122
query: { replSetGetStatus: 1, forShell: 1 } ntoreturn: 1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:38500 92 bytes id:531c3858 1394358360 - 1400815122
reply n:1 cursorId: 0
{ errmsg: "not running with --replSet", ok: 0.0 }
如果將這些輸出到一個日誌檔案中,那麼就可以保留下所有資料庫操作的歷史記錄,對於後期的效能分析和安全審計等工作將是一個巨大的貢獻。

2、Mongostat

此工具可以快速的檢視某組執行中的 MongoDB 例項的統計資訊,用法如下:

[[email protected] bin]# ./mongostat
下面是執行結果(部分):
[[email protected] bin]# ./mongostat
insert query update delete ...... locked % idx miss % qr|qw ar|aw conn time
*0 *0 *0 *0 ...... 0 0 0|0 1|0 4 01:19:15
*0 *0 *0 *0 ...... 0 0 0|0 1|0 4 01:19:16
*0 *0 *0 *0 ...... 0 0 0|0 1|0 4 01:19:17
欄位說明:
  • insert: 每秒插入量
  • query: 每秒查詢量
  • update: 每秒更新量
  • delete: 每秒刪除量
  • locked: 鎖定量
  • qr | qw: 客戶端查詢排隊長度(讀|寫)
  • ar | aw: 活躍客戶端量(讀|寫)
  • conn: 連線數
  • time: 當前時間
它每秒鐘重新整理一次狀態值,提供良好的可讀性,通過這些引數可以觀察到一個整體的效能情況。

3、db.serverStatus

這個命令是最常用也是最基礎的檢視例項執行狀態的命令之一,下面我們看一下它的輸出:
> db.serverStatus()
{
	"host" : "localhost.localdomain",
	"version" : "1.8.1", --伺服器版本
	"process" : "mongod",
	"uptime" : 3184, --啟動時間(秒)
	"uptimeEstimate" : 3174,
	"localTime" : ISODate("2012-05-28T11:20:22.819Z"),
	"globalLock" : {
	"totalTime" : 3183918151,
	"lockTime" : 10979,
	"ratio" : 0.000003448267034299149,
	"currentQueue" : {
		"total" : 0, --當前全部佇列量
		"readers" : 0, --讀請求佇列量
		"writers" : 0 --寫請求佇列量
	},
	"activeClients" : {
		"total" : 0, --當前全部客戶端連線量
		"readers" : 0, --客戶端讀請求量
		"writers" : 0 --客戶端寫請求量
	}
	},
	"mem" : {
		"bits" : 32, --32 位系統
		"resident" : 20, --佔用物量記憶體量
		"virtual" : 126, --虛擬記憶體量
		"supported" : true, --是否支援擴充套件記憶體
		"mapped" : 32
	},
	"connections" : {
		"current" : 1, --當前活動連線量
		"available" : 818 --剩餘空閒連線量
	},
	……
	"indexCounters" : {
		"btree" : {
			"accesses" : 0, --索引被訪問量
			"hits" : 0, --索引命中量
			"misses" : 0, --索引偏差量
			"resets" : 0,
			"missRatio" : 0 --索引偏差率(未命中率)
		}
	},
	……
	"network" : {
		"bytesIn" : 1953, --發給此伺服器的資料量(單位:byte)
		"bytesOut" : 25744, --此伺服器發出的資料量(單位:byte)
		"numRequests" : 30 --發給此伺服器的請求量
	},
	"opcounters" : {
		"insert" : 0, --插入操作的量
		"query" : 1, --查詢操作的量
		"update" : 0, --更新操作的量
		"delete" : 0, --刪除操作的量
		"getmore" : 0,
		"command" : 31 --其它操作的量
	},
	……
	"ok" : 1
}
>

4、db.stats

db.stats 檢視資料庫狀態資訊。使用樣例如下:
> db.stats()
{
	"db" : "test",
	"collections" : 7, --collection 數量
	"objects" : 28, --物件數量
	"avgObjSize" : 50.57142857142857, --物件平均大小
	"dataSize" : 1416, --資料大小
	"storageSize" : 31744, --資料大小(含預分配空間)
	"numExtents" : 7, --事件數量
	"indexes" : 7, --索引數量
	"indexSize" : 57344, --索引大小
	"fileSize" : 50331648, --檔案大小
	"ok" : 1 --本次取 stats 是否正常
}
>
通過這個工具,可以檢視所在資料庫的基本資訊。