问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mongodb replset的secondary同步很慢,有谁遇到过吗

发布网友 发布时间:2022-04-07 22:36

我来回答

2个回答

懂视网 时间:2022-04-08 02:57

1:想知道哪些操作拖慢了MongoDB的速度,首先需要检查当前正在执行哪些操作。

gechongrepl:PRIMARY> db.currentOp()
"opid" : 78891,#操作的唯一标识符,可通过它来终止操作
"active" : true,#true表示当前正在运行,false表示此操作已交出或在等待其他操作交出锁
"secs_running" : 1,#查看执行时间,可以通过该参数定位耗时的操作
"microsecs_running" : NumberLong(1081719),#
"op" : "getmore",#操作的类型,有查询、插入、更新、删除。数据库命令当查询处理
"ns" : "local.oplog.rs",
"query" : {
	
},
"client" : "192.168.91.132:55738",
"desc" : "conn1534",#可与日志信息联系起来,可以用来筛选相关的日志信息。
"threadId" : "0x7f91d77a5700",
"connectionId" : 1534,
"waitingForLock" : false,#表示该操作是否因正在等待其他操作交出锁而处于阻塞状态。
"numYields" : 0,#表示该操作交出锁,而使其他操作得以运行
"lockStats" : {
	"timeLockedMicros" : {
		"r" : NumberLong(68),
		"w" : NumberLong(0)
	},
	"timeAcquiringMicros" : {#表示该操作需要多长时间才能取得所需的锁
		"r" : NumberLong(7),
		"w" : NumberLong(0)
	}
}

  

条件查询

gechongrepl:PRIMARY> db.currentOp({"ns":"local.oplog.rs"})
这里只是举个例子:通常不会终止ns:local.oplog.rs的,因为复制的线程会持续的向同步源请求更多的操作。如果被异常终止,MongoDB会重启他们,但是会短暂的中断复制。

  

如果发现特别耗时的查询可以终止操作

gechongrepl:PRIMARY> db.killOp(5299)
update和find和remove操作可以被终止。因为他们已经交出了锁。正在占用锁或者等待其他操作交出锁的操作则无法被终止

怪异现象:终止了一个批量插入的语句,最后发现还是插入完成了。因为批量插入操作请求之后会写在缓冲区中的。即使终止了客户端发送请求,MongoDB还会处理缓冲区的写入操作。如果需要解决这种现象最好的方式是使用应答式写入,即每次写入操作都会等待上一次写入操作完成后才会进行下去。

2:打开系统分析器

查看当前的分析器级别:

gechongrepl:PRIMARY> db.getProfilingLevel()

  

 

gechongrepl:PRIMARY> db.setProfilingLevel(2)
{ "was" : 0, "slowms" : 100, "ok" : 1 }

db.system.profile.find().pretty()

把级别设置为2意味着分析器会记录所有内容。数据库的所有读写请求都会写到system.profile中。这样会造成性能的损失,因为每一次写操作都会增加额外的写入时间,而每一次读操作都要等待写锁(因为它必须在system.profile集合中写入记录)

 

gechongrepl:PRIMARY> db.setProfilingLevel(1,100)
{ "was" : 2, "slowms" : 100, "ok" : 1 }

db.system.profile.find().pretty()

级别1分析器会默认记录耗时大于100ms的操作。可以自定义阀值

 

gechongrepl:PRIMARY> db.setProfilingLevel(1,500)
{ "was" : 1, "slowms" : 100, "ok" : 1 } 

db.system.profile.find().pretty()

  

gechongrepl:PRIMARY> db.setProfilingLevel(0)
{ "was" : 1, "slowms" : 500, "ok" : 1 }

0就是关闭分析器 

 

3:计算MongoDB的空间消耗

_id存储为ObjectId类型,比存储为字符串类型效率更高

gechongrepl:PRIMARY> Object.bsonsize({_id:ObjectId()})
22
gechongrepl:PRIMARY> Object.bsonsize({_id:""+ObjectId()})
39
也可以直接对集合中的文档进行查询:
gechongrepl:PRIMARY> Object.bsonsize(db.users.findOne())
0

  

查看集合大小

gechongrepl:PRIMARY> db.test.stats()
{
	"ns" : "test.test",
	"count" : 239000,
	"size" : 19728112,
	"avgObjSize" : 82,
	"storageSize" : 37797888,
	"numExtents" : 8,
	"nindexes" : 1,
	"lastExtentSize" : 15290368,
	"paddingFactor" : 1,
	"systemFlags" : 1,
	"userFlags" : 1,
	"totalIndexSize" : 7456512,
	"indexSizes" : {
		"_id_" : 7456512
	},
	"ok" : 1
}
gechongrepl:PRIMARY> 

  

以MB为单位显示

gechongrepl:PRIMARY> db.test.stats(1024*1024)
{
	"ns" : "test.test",
	"count" : 239000,
	"size" : 18,
	"avgObjSize" : 82,
	"storageSize" : 36,
	"numExtents" : 8,
	"nindexes" : 1,
	"lastExtentSize" : 14,
	"paddingFactor" : 1,
	"systemFlags" : 1,
	"userFlags" : 1,
	"totalIndexSize" : 7,
	"indexSizes" : {
		"_id_" : 7
	},
	"ok" : 1
}

  

数据库大小:

gechongrepl:PRIMARY> db.stats()
{
	"db" : "test",
	"collections" : 6,
	"objects" : 239035,
	"avgObjSize" : 82.56948145669044,
	"dataSize" : 19736996,
	"storageSize" : 38879232,
	"numExtents" : 13,
	"indexes" : 3,
	"indexSize" : 7472864,
	"fileSize" : 67108864,
	"nsSizeMB" : 16,
	"dataFileVersion" : {
		"major" : 4,
		"minor" : 5
	},
	"extentFreeList" : {
		"num" : 0,
		"totalSize" : 0
	},
	"ok" : 1
}

  

4:使用mongostat和mongotop查看

  

 

MongoDB副本集配置系列六:定位MongoDB慢的原因

标签:

热心网友 时间:2022-04-08 00:05

mongodb集群初始化同步一共分为以下几个步骤:
1. 检查配置信息——一些最基本的检查
2. 同步数据——也就是开始一个个的clone database,除了拷贝数据以外,mongodb还会建立 _id 索引(这个很重要,同时这个也是我遇到的坑的原因)
3. 同步oplog——从同步的源节点拉取新节点开始同步到此时这段时间的oplog,并进行replay
4. 建立索引——在同步完oplog后mongodb就开始建立除 _id 以外的索引
5. 继续同步oplog——继续同步步骤4执行这段时间的oplog,然后逐渐追上primary,并变成secondary对外提供服务。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求游戏《寂静岭》中好听的游戏配乐,最好是纯音乐 A8 6500 最高支持什么显卡 加条内存组成双通道 对游戏有多大提升... ...追了四个多月了、她也喜欢我。我们俩个在一起也上了床…但是我是... 和喜欢7年的女孩表白后女生说给她点时间,但是又没说什么时间回复我。她... 说一个人很有气质`是什么样的呢` 邢台周边地区的苹果是什么价格 太行百果园地址在哪里? ...时最后香的形状是两边低中间高,这代表什么意思呀?麻烦知..._百度知... 染色体的组成为( )A.DNA和蛋白质B.蛋白质和糖类C.基因和蛋白质D.基 ... 监控器被接入后黑屏的原因 重置电脑后,自己安装的软件是不是就没有了 你好,我在电脑重置时搞错了,很多软件都没有了,设置都打不开了,我要怎么办? 我重置了电脑,发现里面什么软件,文件都没有了,这要怎么办 电脑重置后买的软件不见了 怎么办啊 急 电脑系统重装后好多软件都没了,怎么回事? 联想平板电脑CPU信息,十核3.6G是什么意思? 如何把手机酷我里面的音乐下载到mp3内存卡 VOYO i8Max这个全球首款十核芯处理器的平板电脑怎么样? 自热米饭辣是坏了吗 方便大米是什么 方便米饭有哪些? 关于平板电脑的CPU,10核 2.0GHz与10Core 2.5MHz,哪个好?差距大吗? 方便米饭需要倒水吗? 高原地区自热型方便米饭能熟透吗? 十核CPU的平板电脑是种什么体验 方便米饭会不会变胖? 方便米饭是真的大米吗 地中海风格有那些特点? 方便米饭的米是啥米 奔跑吧第2季第2期Angelababy的嘉宾吴秀波为什么到了后期被打马赛克? http://www.338mu.com/是什麼歌曲 谁能把这个网站打开? 银河证券海王星怎么htc手机里 请各位从成都去过湖南凤凰的大侠帮帮忙。从成都去凤凰的铁路线是? 安徽338分能上的大专!!!急求!! 海王星股票软件中有一行R字母和*号是什么意思 穿越火线外G网站.要最好安全的。 现在的火影忍者播的338,漫画是多少集 鱼头豆腐汤怎样做好吃又简单? 鱼头豆腐汤怎么做好吃,鱼头豆腐汤的家常做法 鱼头豆腐汤要怎么煮才好吃? 钉钉老师在直播时学生能开语音吗? 为什么QQ和钉钉不能语音? 求啊,黑猫男友的宠爱方法1-7的解压码?? 发明专利申请程序有哪些? 发明专利申请流程是怎样的? 为什么mongoDB经常阻塞卡顿 vivo23账户如何删除 请问vivox23的阅读壁纸怎么保存? 地排水怎么安装壁挂式马桶和隐藏水箱?