在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 關(guān)于一個(gè)shard的從庫(kù)為什么要去統(tǒng)計(jì)另一個(gè)shard中的庫(kù)

關(guān)于一個(gè)shard的從庫(kù)為什么要去統(tǒng)計(jì)另一個(gè)shard中的庫(kù)

mongo集群

mongos> sh.status()
databases:
    {  "_id" : "foo",  "primary" : "shard1",  "partitioned" : false }
    {  "_id" : "bar",  "primary" : "shard0",  "partitioned" : false }

訪問(wèn)shard1的從

mongo 127.0.0.1:28010

在mongo shell中執(zhí)行如下命令

shard1:SECONDARY> db.currentOp(    {      "active" : true,      "secs_running" : { "$gt" : 10 }    } )

    {
  "desc": "conn1041165",
  "threadId": "139624352057088",
  "connectionId": 1041165,
  "client": "192.168.0.1:54368",
  "active": true,
  "opid": 61729430,
  "secs_running": 42746,
  "microsecs_running": NumberLong("42746814047"),
  "op": "command",
  "ns": "bar",
  "query": {
    "dbstats": 1
  },
  "numYields": 0,
  "locks": {
    "Global": "r"
  },
  "waitingForLock": false,
  "lockStats": {
    "Global": {
      "acquireCount": {
        "r": NumberLong(1)
      }
    }
  }
}
],
"ok": 1
}
...

奇怪的是 發(fā)現(xiàn)有很多上述的查詢 shard1的從干嘛要去統(tǒng)計(jì)shard0的庫(kù)呢? 并且為什么執(zhí)行時(shí)間還這么久 差不多執(zhí)行了12個(gè)小時(shí)

"dbstats":1 是對(duì)應(yīng)下面的命令嗎

> db.stats()
{
    "db" : "test",
    "collections" : 73,
    "objects" : 246794,
    "avgObjSize" : 2915.7151713574885,
    "dataSize" : 719581010,
    "storageSize" : 787140608,
    "numExtents" : 0,
    "indexes" : 85,
    "indexSize" : 11505664,
    "ok" : 1
}


回答
編輯回答
有你在

關(guān)于{dbstats: 1}意思:

  • 查詢條件是{dbstats: 1}({"query": {"dbstats": 1}})
  • 庫(kù)名是bar({ns: 'bar'})
  • 執(zhí)行的是command操作({op: 'command'})

因此執(zhí)行的語(yǔ)句是:

db.runCommand({dbstats: 1});

它實(shí)際上就是db.stats()方法的內(nèi)部操作:

rs0:PRIMARY> db.stats
function (scale) {
    return this.runCommand({dbstats: 1, scale: scale});
}

mongos> sh.status()
databases:
    {  "_id" : "foo",  "primary" : "shard1",  "partitioned" : false }
    {  "_id" : "bar",  "primary" : "shard0",  "partitioned" : false }

這個(gè)輸出的意思是現(xiàn)在有兩個(gè)集合,foo/bar,它們都沒(méi)有分片({"partitioned" : false}),因?yàn)闆](méi)有分片,所以實(shí)際承載它們的只是一個(gè)分片。分別們于shard1/shard0上({"primary" : "shard1"}/{"primary" : "shard0"}),不是你理解的統(tǒng)計(jì)另外一個(gè)shard中的庫(kù)。再者,這個(gè)命令是從mongos上執(zhí)行的,mongos本來(lái)就連接著所有的分片,也不存在所謂統(tǒng)計(jì)“另外一個(gè)shard”。


最后執(zhí)行時(shí)間太長(zhǎng)的問(wèn)題,確實(shí)db.stats()不應(yīng)該執(zhí)行這么久。這個(gè)問(wèn)題可能跟特定版本的bug有關(guān)系,或者跟你的環(huán)境有一些聯(lián)系,需要具體分析日志。建議去jira.mongodb.org開(kāi)ticket詢問(wèn)情況。

2017年9月7日 21:14