我的mongodb的日志中发现很多慢查询,查语句本身执行很快,却发现大量的时间花在了获取Global IS锁上,请问这是什么原因?(数据库当时没有创建索引操作)
“_source”: {
“cursorExhausted”: 1,
“protocol”: “op_query”,
“session”: “conn1103084”,
“query_str”: “{ find: \”susers\”, filter: { _id: { $in: […] } } }”,
“numYields”: 0,
“@timestamp”: “2021-04-13T04:10:11.192Z”,
“@version”: “1”,
“nreturned”: 17,
“type”: “COMMAND”,
“reslen”: 26387,
“command”: “find”,
“keysExamined”: 34,
“host”: “mongodb-susers-05”,
“query_index”: “{ _id: 1 }”,
“duration”: 57215,
“locks”: {
“Database”: {
“acquireCount”: {
“r”: 1
}
},
“Collection”: {
“acquireCount”: {
“r”: 1
}
},
“Global”: {
“timeAcquiringMicros”: {“r”: 57195693},
“acquireCount”: {“r”: 2},
“acquireWaitCount”: {“r”: 1}}
},
“level”: “I”,
“query_plan”: “IXSCAN”,
“namespace”: “db.susers”,
“writeConflicts”: 0,
“keyUpdates”: 0,
“docsExamined”: 17
}
“Global”: {
“timeAcquiringMicros”: {“r”: 57195693}
这个时间是15个小时。
你实际执行时间op_ms是多久?
数据库是主还是备库?
是什么版本?
“Global”: {
“timeAcquiringMicros”: {“r”: 57195693},
这个时间有15个小时了?
你实际慢日志里面op_ms是多久?也是这么久?
你这个是备库还是主库 ?数据库版本?
从日志来是global 锁没有拿到导致。
这是微秒,是从库,我的问题是为什么会global的意向读锁还是占用那么长的时间?
什么版本?是4.0之前版本吗?4.0之前版本从库写会阻塞读的。确实是微妙,我搞错了
是3.6的版本,我也是怀疑oplog重放引起的全局排它锁,它不是很频繁,是偶尔会抖一下,然后引发一大批慢查询
4.0之前访问备库是存在这个问题,建议升级到4.0或者直接主库就可以避免这个问题。4.0之前对这种波动很敏感的不建议读写分离。
4.0因为写阻塞读,所以必须在global 级别阻塞了。否则会读写错误的数据。
{
“desc” : “rsSync”,
“active” : true,
“currentOpTime” : “2021-05-12T13:11:09.159+0800”,
“opid” : 668438442,
“op” : “none”,
“ns” : “”,
“command” : {
},
“numYields” : 0,
“locks” : {
“Global” : “W”
},
“waitingForLock” : true,
“lockStats” : {
“Global” : {
“acquireCount” : {
“r” : NumberLong(2),
“W” : NumberLong(1)
},
“acquireWaitCount” : {
“W” : NumberLong(1)
}
},
“Database” : {
“acquireCount” : {
“r” : NumberLong(1)
}
},
“Collection” : {
“acquireCount” : {
“r” : NumberLong(1)
}
}
}
}
“Global”: {
“timeAcquiringMicros”: {“r”: 57195693}
这个有等待时间有15个小时?你实际执行时间也是这么久?
这个是主库还是备库?
数据库版本多少?