我有一个mongodb集合,包含自定义_id和500M +文档._id索引的大小是≈25Gb,整个集合是≈125Gb.服务器有96 Gb RAM.读取活动仅是_id的范围查询.Explain()显示查询使用索引.Mongo在负载测试开始后一段时间内工作得相当快,并且在一段时间后变慢.我可以在日志中看到很多这样的条目:
[conn116] getmore csdb.archive query:{_ id:{$ gt:2812719756651008,$ lt:2812720361451008}} cursorid:444942282445272280 ntoreturn:0 keyUpdates:0 numYields:748 locks(micros)r:7885031 nreturned:40302 reslen:1047872 10329ms
一段db.currentOp():
"waitingForLock" : false,
"numYields" : 193,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(869051),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(1369404),
"w" : NumberLong(0)
}
}
Run Code Online (Sandbox Code Playgroud)
什么是锁(微)r?我该怎么做才能减少它?
我尝试以这种方式使用 luquibase Java API 更新现有数据库:
Database database = DatabaseFactory.getInstance()
.findCorrectDatabaseImplementation(
new JdbcConnection( connection )
);
Liquibase liquibase = new Liquibase(
"db.changelog.xml",
new FileSystemResourceAccessor(),
database
);
liquibase.update( "" );
Run Code Online (Sandbox Code Playgroud)
但它会尝试应用所有更改集,包括之前已经应用的更改集。我做错了什么?