MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)

文摘   2024-11-13 06:00   中国香港  

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2580人左右 1 + 2 + 3 + 4 +5 + 6 + 7+8)(1 2 3 4 5 6 已满,新人进7群接近300,开8群)

数据库 《三体》“二向箔”  思维限制 !8个公众号联合抽奖送书 建立数据库设计新思维


这里通知一下,送书的活动已经结束,昨日已经联系了三位中奖的同学,出版社的老师已经收到这三位同学的地址和电话,请注意这三位同学查收。


       MongoDB 数据collection,(表)如果出现数据碎片该怎么办,在MongoDB中存在一个命令可以对表进行碎片整理,这个命令对文档docuemnt在collection中进行重新的组织和排序,使得数据在磁盘上的存储更加连续,

      那么问题来了,我怎么判断MongoDB的表,collection存在碎片的问题。这里MongoDB并没有明确的信息直接告知你某个表存在磁盘碎片信息或者百分比之类的,但我们可以通过db.表名.stats() 中的block-manager 来进行判断。

方法1:blocks freed / blocks allocated > 50% 方法2:file bytes available for reuse / file size in bytes > 50%

        blocks allocated 是指新分配的块数,blocks freed 是指释放的块数。释放的块表示那些已经不再被使用的数据空间。当blocks freed 越来越多说明有越来越多的数据块不被使用,而blocks allocated 还在持续的快速增长的情况下,说明释放的数据块并未直接被重用,而是继续的分配新的磁盘空间来进行新的数据的存储,所以这就值得惊醒了。

       第二个方法是可以进行重用的磁盘空间和总体的磁盘空间的比值,一般可重用的磁盘空间特别大,说明这些都是碎片,且无法利用,同时当文件尺寸较大时这就证明磁盘碎片比较严重了。

我们下面做一个例子,这是一个collection,进行stats()后取的block-manager的信息,这个表非常小,部分情况展示的不是很明显。

 "block-manager" : {
   "allocations requiring file extension" : 8,
   "blocks allocated" : 8,
   "blocks freed" : 1,
   "checkpoint size" : 4096,
   "file allocation unit size" : 4096,
   "file bytes available for reuse" : 16384,
   "file magic number" : 120897,
   "file major version number" : 1,
   "file size in bytes" : 36864,
   "minor version number" : 0
  },
db.runCommand({compact:'cities',force:true})
{
 "ok" : 1,
 "$clusterTime" : {
  "clusterTime" : Timestamp(1639496884, 1),
  "signature" : {
   "hash" : BinData(0,"xiNUFIQ/RLMeBHYA3GP3XUHQ1Kk="),
   "keyId" : NumberLong("7040270890788978692")
  }
 },
 "operationTime" : Timestamp(1639496884, 1)

       通过上面的compact 命令来对表进行操作,这里如果在主库进行操作则会必须用到force:true否则不予操作。大家可以观察,下面的图中,在进行命令后,file size in bytes 和  filebytes available for reuse 都变小了。

1 整体的文件尺寸变小了,释放了空间给系统 

2 碎片变小了,整体文件变得更紧凑了

       通过第一个命令可以达到我们的需求,但需要注意的是数据库的版本,如果你还使用MongoDB4.4以前的版本,那么这里非常不建议进行相关的工作,因为会锁表。

所以对数据库进行此项操作的最低版本是MongoDB 4.4

     除此之外,相信网上还有一些知识说,可以使用这个命令,db.runCommand({repairDatabase:1}),说通过repairDatabase的命令可以直接修复数据库,且回收磁盘,重建数据文件。

      但这些操作中没有说明,使用这个操作会Down机。具体请看下面的操作,在第二节点执行此命令,从库直接挂掉。且这个节点根本就没有压力,也没有数据量的情况下,这个命令都能让系统直接挂掉。所以网上的东西,不能轻易相信,需要进行尝试,尤其这样的命令,且不可在生产系统上进行操作。

repl:SECONDARY> rs.secondaryOk()
repl:SECONDARY> 
repl:SECONDARY> 
repl:SECONDARY> db.runCommand({repairDatabase:1})
2021-12-14T16:12:09.749-0500 I  NETWORK  [js] DBClientConnection failed to receive message from 192.168.198.100:27027 - HostUnreachable: Connection closed by peer
2021-12-14T16:12:09.750-0500 E  QUERY    [js] uncaught exception: Error: error doing query: failed: network error while attempting to run command 'repairDatabase' on host '192.168.198.100:27027'  :
DB.prototype.runCommand@src/mongo/shell/db.js:169:19
@(shell):1:1
2021-12-14T16:12:09.752-0500 I  NETWORK  [js] trying reconnect to 192.168.198.100:27027 failed
2021-12-14T16:12:09.753-0500 I  NETWORK  [js] reconnect 192.168.198.100:27027 failed failed 
2021-12-14T16:12:09.757-0500 I  NETWORK  [js] trying reconnect to 192.168.198.100:27027 failed
2021-12-14T16:12:09.757-0500 I  NETWORK  [js] reconnect 192.168.198.100:27027 failed failed 



exit 
bye
2021-12-14T16:12:29.559-0500 I  NETWORK  [js] trying reconnect to 192.168.198.100:27027 failed
2021-12-14T16:12:29.559-0500 I  NETWORK  [js] reconnect 192.168.198.100:27027 failed failed 
2021-12-14T16:12:29.559-0500 I  QUERY    [js] Failed to end session { id: UUID("14f45c1d-5c15-4620-bae4-2398fbee8eab") } due to SocketException: socket exception [CONNECT_ERROR] server [couldn't connect to server 192.168.198.100:27027, connection attempt failed: SocketException: Error connecting to 192.168.198.100:27027 :: caused by :: Connection refused]

       最后有没有更狠的招数,当然有,比如你在系统中在加入一个节点,然后一个一个更换现有的节点,在数据重新再新节点初始化的过程中,相当于进行了碎片的整理,当然这个过程会比较麻烦且慢,但这也是一个安全的方案,具体的操作就不在这里进行赘述了。


MongoDB 相关文章


数据库 《三体》“二向箔”  思维限制 !8个公众号联合抽奖送书 建立数据库设计新思维

MongoDB  是外星人,怎么和不按套路出牌的他沟通?

17000多张MongoDB表的锅 自动分析删除表数据难题--从头到尾的处理过程(文尾有MongoDB开发规范)
MongoDB 插入更新数据慢,开发问哪的问题?附带解决方案和脚本
MongoDB 不是软柿子,想替换就替换
MongoDB  挑战传统数据库聚合查询,干不死他们的MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
MONGODB  ---- Austindatabases  历年文章合集



OceanBase 相关文章

跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)

聚焦SaaS类企业数据库选型(技术、成本、合规、地缘政治)

OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
OceanBase  学习记录 -- 安装简易环境
OceanBase  学习记录 --  开始入门
数据库最近第一比较多,OceanBase 定语加多了?
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
数据库信息速递  阿里巴巴的分布式数据库OceanBase旨在进军中国以外的市场 (翻译)


PostgreSQL 相关文章

PostgreSQL  事务读取行 不使用行锁 真的?利弊双刃剑
病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)
PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
PostgreSQL 如何通过工具来分析PG 内存泄露

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?

POSTGRESQL --Austindatabaes 历年文章整理

PostgreSQL  查询语句开发写不好是必然,不是PG的锅

PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
PostgreSQL DBA硬扛 垃圾 “开发”,“架构师”,滥用PG 你们滚出 !(附送定期清理连接脚本)

DBA 失职导致 PostgreSQL 日志疯涨

PolarDB 相关文章


PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)

PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless

POLARDB  从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PolarDB 从节点Down机后,引起的主从节点强一致的争论

PolarDB serverless 真敢搞,你出圈了你知道吗!!!!

PolarDB VS PostgreSQL  "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?

临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一

PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)

POLARDB  -- Ausitndatabases 历年的文章集合

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?




MySQL相关文章


MySQL timeout 参数可以让事务不完全回滚
"DBA 是个der" 吵出MySQL主键问题多种解决方案

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊
MYSQL  --Austindatabases 历年文章合集

阿里云系列

阿里云数据库产品权限设计缺陷 ,六个场景诠释问题,你可以做的更好?

阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列

阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列

阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列

阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列



SQL SERVER 系列

SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级

临时工访谈系列

临时工说: 实际实例揭穿AI, 上云就不用DBA的谎言
临时工说:DBA 7*24H 给2万的工作,到底去不去?
国内最大IT服务公司-招聘DBA “招聘广告”的变化--分析与探讨
临时工说:  网友问35岁就淘汰,我刚入行DBA 怎么办?
截止今天共发布1250篇

AustinDatabases
关于数据库相关的知识分享
 最新文章