1.1 特大快形成

如果用date字段作为片键,集合中date是一个日期字符串,如:year/month/day,也就是说,mongoDB一天创建一个块。因块内所有文档的片键一样,因此这些块是不可拆分的。如果块超出了config.settings中设置的最大块大小,那么均衡器就无法移动这个块了。

这种不可拆分和移动的块就叫做特大快,这种快相当难对付。

1.2 特大快的表现

出现特大快的表现之一是,某分片的大小增长速度要比其他分片快得多。也可使用sh.status()来检查

是否出现了特大快:特大快会存在一个jumbo属性。

可以使用dataSize命令检查块大小

1)首先用config.chunks集合,产看块范围

>use config

>var chunks= db.chunks.find({"ns":"acme.analytics"}).toArray()

2)根据这些块范围,找出可能的特大快

>use dbName

要小心,因为dataSize命令要扫描整个块的数据才知道块的大小。因此,要根据自己对数据了解,尽可能缩小

搜索范围:比如,特大快是特定日期出现的吗?如11月11日系统很繁忙。。。

1.3 分发特大快(修复特大快)

未修复由特大快引发的集群不均衡,就必须将特大快均衡的分发到其他分片上。

下面用from分片来代指特大快分片,以to分片来代指特大快即将迁至的分片。

注意:多个from分片,则需要对每个from分片重复下列步骤

1、关闭均衡器

>sh.setBalancerState(false)

2、MongoDB默认不允许移动大小超过最大快大小设定值的块。因此,需要调整最大快大小。单位MB

>use config

>db.setting.findOne({_id:chunksize})

>db.settings.save({"_id":"chunksize","value":10000})

3、使用moveChunk命令将特大快从from分片移至to分片

如担心迁移对性能影响,可使用secondaryThrootle选项,放慢迁移过程,减缓对系统性能影响

>db.adminCommand(

{"moveChunk":"acme.analytics",

"find":{"date":new Date("10/23/2012"},

"to":""shard0002,

"secondaryThrootle":true

}

)

4、使用splitChunk命令对from分片剩余的块进行拆分,这样可以增加from分片的块数,直到实现from分片

与其他分片块数均衡。

5、块大小修改回最初值

>db.settings.save({"_id":"chunksize","value":64})

6、启用均衡器

>sh.setBalancerState(true)

1.4 防止出现特大快

1、可修改片键、细化片键的粒度

2、尽可能保证每个文档都拥有唯一的片键值,或者至少不要出现某个片键值的数据超出最大块大小

设定值的情况

3、添加辅助字段作为片键

MongoDB 分片管理(四)数据均衡 -- 特大快的更多相关文章

  1. MongoDB 分片管理(三)服务器管理

    MongoDB 分片管理(三)服务器管理

  2. MongoDB 分片管理(四)数据均衡

    通常来说,MongoDB会自动处理数据均衡. 1.1 集群分片的块的均衡 注意,均衡器只使用块的数量,而非数据大小,来作为衡量分片间是否均衡的指标. 1.2 均衡器 1.执行所有数据库管理操作前,都应 ...

  3. MongoDB 分片管理

    在MongoDB(版本 3.2.9)中,分片集群(sharded cluster)是一种水平扩展数据库系统性能的方法,能够将数据集分布式存储在不同的分片(shard)上,每个分片只保存数据集的一部分, ...

  4. MongoDB 分片管理(不定时更新)

    背景: 通过上一篇的 MongoDB 分片的原理.搭建.应用 大致了解了MongoDB分片的安装和一些基本的使用情况,现在来说明下如何管理和优化MongoDB分片的使用. 知识点: 1) 分片的配置和 ...

  5. MongoDB 分片管理(一)检查集群状态

    一.检查集群状态 1.1 使用sh.status()查看集群摘要信息 1.使用sh.status()可以查看分片信息.数据库信息.集合信息 sh.status() 如果数据块较多时,使用sh.stat ...

  6. MongoDB 分片管理(二)查看网络连接

    1.1 查看连接统计 connPoolStats,查看mongos与mongod之间的连接信息,并可得知服务器 上打开的所有连接 1.2 限制连接数量

  7. 008.MongoDB分片群集概念及原理

    一 MongoDB分片介绍 1.1 分片 Mongodb另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足 ...

  8. MongoDB分片介绍

    本文简单介绍MongoDB的分片功能,对分片进行了概述,具体的功能详解,后续文章会陆续推出 分片是把数据分配到多个服务器上的一种方式,MongoDB使用分片实现大数据部署以及高吞吐操作. 大数据以及高 ...

  9. Mongodb 笔记07 分片、配置分片、选择片键、分片管理

    分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...

随机推荐

  1. PAT(B) 1044 火星数字(Java)进制转换

    题目链接:1044 火星数字 (20 point(s)) 题目描述 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, ...

  2. stdmap 用 at() 取值,如果 key 不存在,不好意思,程序崩溃。QMap 用 value()取值,如果 key 不存在,不会崩溃,你还可以指定默认值

    我觉得 Qt6 最应该升级的是容器类 stdmap 在遍历的时候,同时获取 key 与 value 非常方便: for(auto& var:map){    qDebug()<<v ...

  3. redis设置密码,解决重启后密码丢失及自启服务配置

    一.安装redis redis3.0及redisManage管理工具 链接:https://pan.baidu.com/s/1p5EWeF2Jgsw9xOE1ADMmRg 提取码:thyf 二.red ...

  4. js 遍历树的层级关系的实现

    1.遍历树的层级关系 1)先整理数据 2)找到id和数据的映射关系 3)然后找到父节点的数据,进行存储 test() { const list = [ { id: ", parentId: ...

  5. Docker 镜像 && 容器的基本操作

    镜像 && 容器 docker 镜像好比操作系统的镜像(iso) docker 容器好比是已安装运行的操作系统 所以说 docker 镜像文件运行起来之后,就是我们所说的 docker ...

  6. iOS - Scenekit3D引擎初探之 - 给材质贴图

    今天简单说一下 SceneKit 给材质贴图. 1,最简单的一种方法,直接打开dae 或者 scn 文件直接设置  如上图,这个dae 文件中只有一个几何体,几何体中只有一个材质球,然后设置材质球的d ...

  7. vue中将时间戳转换为YYYY-MM-dd hh:mm格式时间的组件

    首先我们可以使用vue中的过滤方法将数据变成另一个格式 // html <span class="rate-time">{{rating.rateTime | form ...

  8. springboot系列(七) 项目热加载

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...

  9. C++——多维数组动态开辟与释放

    前言 在讨论多维数组动态开辟与释放之前,先说说什么是二维数组静态开辟与释放. 形如这种就是静态开辟内存,事先画好了内存大小 #include<iostream> using namespa ...

  10. DNS服务——服务端 和 客户端 配置

    参考:Linux下DNS主从服务器搭建详解 前言 电脑经常会出现一些网络小毛病.有的时候,QQ能正常上网,但是网页却打不开.这种时候十有八九是DNS出问题了. QQ在DNS不可用的时候,可以跳过DNS ...