MongoDB副本集的主节点和辅助节点中数据库大小存在差异的可能原因是什么? 在我的设置中,辅助节点数据库的大小比主节点数据库大。两个节点具有相同数量的对象,但是对于辅助节点,“avgObjSize”,“dataSize”,“storageSize”的值更高。 从rs.stats()
检查也没有复制延迟我可以检查什么?
答案 0 :(得分:2)
<强>简介:强> 因为次要和不同的填充因子在次要和主要上有不同的回收内存空间量。
<强>长:强> 如果您有长时间运行的主节点,其中某些文档被删除并插入,并且没有运行紧凑的操作,则可能是这种情况。此空间不会被回收,并将计入dataSize,avgObjSize和storageSize。辅助节点可以从主节点完全重新同步,但只会重播当前oplog中的操作。在这种情况下,secondary可能具有较低的dataSize,avgObjSize和storageSize值。如果在该次要被选为主要之后,您可以看到所描述的大小差异。此外,每个服务器都有自己的填充因子,这就是为什么你会看到dataSize的不同之处。
具体情况可能有所不同,但主要有两个原因:未回收的内存空间量和不同的填充因子。
答案 1 :(得分:0)
有一个概念padding factor可能是原因。 MongoDB为将来的更新留下了一些空间,因此当对象的大小增加时,您不必总是将对象移动到另一个存储空间。
填充因子可以在您的集合统计信息中找到:
db.colname.stats()
示例结果:
{
"ns" : "merchant.product",
"count" : 24,
"size" : 23168,
"avgObjSize" : 965.3333333333334,
"storageSize" : 204800,
"numExtents" : 2,
"nindexes" : 1,
"lastExtentSize" : 163840,
"paddingFactor" : 1.0000000000000053,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
更新集合时,mongodb会更改值paddingFactor。因此,您的2个节点之间可能存在细微差别,因为它们可能无法同时创建。
当你的&#34;填充&#34;不满足对象的新大小,mongodb将其移动到另一个存储空间。然后原始空间可以保留以备将来使用,并且该对象占用一个新的空间块。但是,由于填充因子不同,在2个节点中这种行为可能也不同。
所以尺寸一般都可以。