replSetResizeOplog
定义
兼容性
此命令在以下环境中的部署中可用
MongoDB Atlas:云中 MongoDB 部署的完全托管服务
重要
此命令在 M10+ 集群中不受支持。有关更多信息,请参阅 不受支持的命令。
MongoDB Enterprise:基于订阅的自管理版本的MongoDB
MongoDB Community:源代码公开、免费使用且自管理的MongoDB版本
语法
该命令具有以下形式
db.adminCommand( { replSetResizeOplog: <int>, size: <double>, minRetentionHours: <double> } )
命令字段
该命令包含以下字段
字段 | 类型 | 描述 |
---|---|---|
replSetResizeOplog | int | 设置为 1 。 |
size | double | oplog的最大大小(以兆字节为单位)。
|
minRetentionHours | double |
行为
您可以在使用Wired Tiger
存储引擎或内存存储引擎
运行的mongod
实例上使用replSetResizeOplog
。
有关使用replSetResizeOplog
命令调整oplog大小的说明,请参阅更改自管理副本集成员的Oplog大小教程。
为了避免删除majority commit point
,oplog可以增长超过其配置的大小限制。
您不能删除local.oplog.rs
集合。有关此限制的更多信息,请参阅Oplog集合行为。
replSetResizeOplog
覆盖了启动时设置的最大的oplog大小或最小的oplog保留期
除非您使用
重要
最小操作日志保留期
当配置最小操作日志保留期时,mongod
具有以下行为
操作日志可以无限制地增长,以保留配置的小时数的操作日志条目。这可能导致由于高写入量和大保留期而减少或耗尽系统磁盘空间。
如果操作日志超出其最大大小,即使操作日志返回到其最大大小或配置为较小的最大大小,
mongod
也可能继续占用该磁盘空间。有关减少操作日志大小不会立即返回磁盘空间的信息,请参阅Reducing Oplog Size Does Not Immediately Return Disk Space.在执行操作日志条目保留时,
mongod
会将系统墙钟与操作日志条目创建墙钟时间进行比较。集群组件之间的时钟漂移可能导致操作日志保留行为意外。有关集群成员之间时钟同步的更多信息,请参阅Clock Synchronization。
replSetResizeOplog
不会复制到其他成员
使用replSetResizeOplog
更改特定副本集成员的oplog大小或最小oplog保留期不会改变副本集中任何其他成员的oplog大小。您必须在每个集群中的副本集成员上运行replSetResizeOplog
,以更改所有成员的oplog大小或最小保留期。
减少Oplog大小不会立即释放磁盘空间
减少oplog大小不会立即回收磁盘空间。这包括由于截断超过最小oplog保留期的旧oplog事件而导致的oplog大小减少。
要立即在减少oplog大小后释放未使用的磁盘空间,请在维护期间对oplog.rs
集合运行compact
命令。这将阻止对数据库上的所有操作。因此,运行compact
将阻止oplog同步。有关调整oplog大小和压缩oplog.rs
的说明,请参阅更改自托管副本集成员的Oplog大小。
资源锁定
replSetResizeOplog
会独占(W)锁定oplog
,并阻止在完成之前对集合上的其他操作。
有关MongoDB中锁定方面的更多信息,请参阅常见问题解答:并发。
示例
更改最大Oplog大小
使用 db.collection.stats()
mongosh
方法显示当前最大oplog大小(以兆字节为单位),maxSize
。例如
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
上述命令返回此成员的oplog大小(以兆字节为单位)
990
以下命令使用 replSetResizeOplog
将此成员的oplog大小更改为16384兆字节
db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})
为了验证新的oplog大小,重新运行 db.collection.stats()
方法
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
上述命令返回
"maxSize": NumberLong("16834")
警告
在节点中减小oplog大小会从其中删除数据。这可能导致与该节点同步的副本成员变得过时。要重新同步这些成员,请参阅同步自托管副本集成员。
更改最小oplog保留期限
可选。使用
db.serverStatus()
命令验证当前最小oplog保留值作为oplogTruncation.oplogMinRetentionHours
:db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours 该命令返回当前配置的最小oplog保留期限的
mongod
。例如1.5 如果
mongod
没有最小oplog保留期限,则操作返回空结果。使用
replSetResizeOplog
命令修改配置的最小oplog保留期限。例如,以下将最小oplog保留期限设置为2
小时db.adminCommand({ "replSetResizeOplog" : 1, "minRetentionHours" : 2 })