找出mongodb的jumbo块并进行分裂

https://www.cnblogs.com/abclife/p/15968628.html

根据这篇文档中的脚本,在我们自己的环境中跑了下,第一次跑的结果如下:

运行完上面跑出的split脚本后,还是存在jumbo块,第二次跑出的结果:

从上面结果可以看出,chunks的数量增加了,但jumbo chunks的数量没有减少很多。

也和阿里云后台沟通,jumbo chunk不能分裂的原因:

因为大部分jumbo chunk是相同shard key组成的,所以无法继续分割。

不知道有没有通过这种方法分割成功的案例。

具体运行脚本如下:

1、使用以下脚本找出未被检测到的Jumbo块,并生成相关命令:

var allChunkInfo = ``function``(ns){

``var chunks = db.getSiblingDB(``"config"``).chunks.find({``"ns" : ns}).sort({``min``:1}).noCursorTimeout(); //this will ``return all chunks ``for the ns ordered ``by min

``var totalChunks = 0;

``var totalJumbo = 0;

``var totalSize = 0;

``var totalEmpty = 0;

``chunks.forEach(

``function printChunkInfo(chunk) {

``var db1 = db.getSiblingDB(chunk.ns.split(``"."``)[0]) // get the ``database we will be running the command against later

``var ``key = db.getSiblingDB(``"config"``).collections.findOne({_id:chunk.ns}).``key``; // will need this ``for the dataSize call

``// dataSize ``returns the info we need ``on the data, but using the estimate ``option to use counts ``is less intensive

``var dataSizeResult = db1.runCommand({datasize:chunk.ns, keyPattern:``key``, ``min``:chunk.``min``, ``max``:chunk.``max``, estimate:``false``});

``if(dataSizeResult.``size > 67108864) {

``totalJumbo++;

``print(``'sh.splitFind("' + chunk.ns.toString() + ``'", ' + JSON.stringify(chunk.``min``) + ``')' + ``' // '``+ chunk.shard + ``' ' + Math.round(dataSizeResult.``size``/1024/1024) + ``' MB ' + dataSizeResult.numObjects );

``}

``totalSize += dataSizeResult.``size``;

``totalChunks++;

``if (dataSizeResult.``size == 0) { totalEmpty++ }; //``count empty chunks ``for summary

``}

``)

``print(``"***********Summary Chunk Information***********"``);

``print(``"Total Chunks: "``+totalChunks);

``print(``"Total Jumbo Chunks: "``+totalJumbo);

``print(``"Average Chunk Size (Mbytes): "``+(totalSize/totalChunks/1024/1024));

``print(``"Empty Chunks: "``+totalEmpty);

``print(``"Average Chunk Size (non-empty): "``+(totalSize/(totalChunks-totalEmpty)/1024/1024));

}

2、脚本必须通过mongos router进行调用:

mongos> allChunkInfo(``"db.test_col"``)

3、 生成如下结果

sh.splitFind(``"db.test_col"``, {``"_id"``:``"jhxT2neuI5fB4o4KBIASK1"``}) // shard-1 222 MB 7970

sh.splitFind(``"db.test_col"``, {``"_id"``:``"zrAESqSZjnpnMI23oh5JZD"``}) // shard-2 226 MB 7988

sh.splitFind(``"db.test_col"``, {``"_id"``:``"SgkCkfSDrY789e9nD4crk9"``}) // shard-1 218 MB 7986

sh.splitFind(``"db.test_col"``, {``"_id"``:``"X5MKEH4j32OhmAhY7LGPMm"``}) // shard-1 238 MB 8338

...

***********Summary Chunk Information***********

Total Chunks: 5047

Total Jumbo Chunks: 120

Average Chunk ``Size (Mbytes): 19.29779934868946

Empty Chunks: 1107

Average Chunk ``Size (non-empty): 24.719795257064895

4、运行上一步骤的split命令

备注:阿里云分片集群介绍

什么是MongoDB分片集群_云数据库 MongoDB 版(MongoDB)-阿里云帮助中心

相关推荐
小光学长1 天前
基于Vue的地铁综合服务管理系统7949eg04(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
Yeats_Liao1 天前
时序数据库系列(二):InfluxDB安装配置从零搭建
数据库·后端·时序数据库
Yeats_Liao1 天前
时序数据库系列(一):InfluxDB入门指南核心概念详解
数据库·后端·时序数据库·db
betazhou1 天前
Oracle ADG ,DGBroker管理,异常断电重启主备库的状态
数据库·oracle·goldengate·dgbroker
岁岁岁平安1 天前
本机 MongoDB 注册系统服务、启用security认证
数据库·python·mongodb
007php0071 天前
某游戏互联网大厂Java面试深度解析:Java基础与性能优化(一)
java·数据库·面试·职场和发展·性能优化·golang·php
数据库生产实战1 天前
Oracle RAC灾备环境UNDO表空间管理终极指南:解决备库修改难题与性能优化实战
数据库·oracle·性能优化
姚远Oracle ACE1 天前
Oracle AWR案例分析:精准定位SQL执行计划切换的时间点
数据库·sql·oracle
凉栀お_1 天前
MySQL第四次作业(索引、视图)
数据库·mysql
睡前要喝豆奶粉1 天前
.NET Core Web API中数据库相关配置
数据库·c#·.netcore