【MongoDB】處理jumbo chunks警告信息

什麼是Jumbo chunk

就是超出設定的chunk大小的chunk,默認chunk大小爲64Mshell

爲何要處理Jumbo chunk

jumbo chunk沒法被遷移json

如何處理?

# 先找到Jumbo chunk信息
sh.status(true)

        { "phone" : NumberLong("xxxxxx") } -->> { "phone" : NumberLong("yyyyyyy") } on : shard_rep1 Timestamp(1, 19) jumbo

# 執行
# 對於上面的Jumbo塊,執行以下命令
sh.splitFind("db.tb",{shardkeyX:"shardkeyXValue_in_range"})

腳本化自動處理

思路處理:

  • 1.既然sh.status(true)能夠發現jumbo chunk那麼config庫中必定記錄着jumbo信息
  • 2.從chunk的元數據表中找到標記爲jumbo的數據快
  • 3.處理超大的數據塊

    複製到mongos shell中執行便可

    db = db.getSiblingDB('config');
    var goblins=db.chunks.find({"jumbo":true})
    goblins.forEach( function (item) { 
    databaseDotTable = item.ns;
    minShardKeyInfo = item.min;
    maxShardKeyInfo = item.max
    for (var i in minShardKeyInfo) {
        var key=i;
        var value=minShardKeyInfo[i];
        if (typeof(value) === "function") {
            for (var j in maxShardKeyInfo) {
                value = maxShardKeyInfo[j]
            }
        }
    }
    var findFilter = {}
    findFilter[key] = value
    print(`Doing db.adminCommand({"${databaseDotTable}",{${key}:${value}})}`);
    result=db.adminCommand({split:databaseDotTable,find:findFilter});
    printjson(result)
    })

備註

1.官方推薦使用更加自動的sh.splitFind而不是原始的sh.splitAt函數ide

相關文章
相關標籤/搜索