Definición
replSetResizeOplogreplSetResizeOplogtambién permite especificar el número mínimo de horas para conservar una entrada de oplog.Modificado en la versión 5.0: Para establecer el tamaño
replSetOplogenmongosh, utiliza el constructorDouble().replSetResizeOplogpermite cambiar dinámicamente el tamaño de la Oplog o su periodo mínimo de retención sin tener que reiniciar elmongodprocesar.Debe ejecutar este comando contra la base de datos
admin.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
Importante
Este comando no es compatible con los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulta Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Nota
Para cambiar el tamaño del oplog en Atlas, consulte Set Minimum oplog window.
Sintaxis
El comando tiene la siguiente forma:
db.adminCommand( { replSetResizeOplog: <int>, size: <double>, minRetentionHours: <double> } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| Int | Se debe establecer en |
| doble | El tamaño máximo del oplog en megabytes.
|
| doble | Opcional. El número mínimo de horas que se conserva una entrada del registro de operaciones, donde los valores decimales representan fracciones de hora. Por ejemplo, un valor de El valor debe ser mayor o igual a Un
Para verificar el período mínimo de retención de oplog configurado actualmente, consulte en |
Comportamiento
Puedes usar replSetResizeOplog en mongod instancias que se ejecutan con el motor de almacenamiento Wired Tiger o el motor de almacenamiento en memoria.
Consulte el tutorial Cambiar el tamaño del registro de operaciones de los miembros del conjunto de réplicas autoadministradas para obtener un procedimiento sobre el uso replSetResizeOplog del comando para cambiar el tamaño del registro de operaciones.
El oplog puede crecer más allá de su límite de tamaño configurado para evitar borrar el majority commit point.
No puedes descartar la colección local.oplog.rs. Para obtener más información sobre esta restricción, consulte Comportamiento de la colección Oplog.
replSetResizeOplog anula el tamaño máximo del oplog o el periodo mínimo de retención del oplog establecido al inicio por:
storage.oplogMinRetentionHours/--oplogMinRetentionHoursrespectivamente.
El nuevo tamaño de oplog se mantiene después de reiniciar el servidor, a menos que uses:
Importante
Reducir el tamaño máximo del oplog da lugar a la truncación de las entradas de oplog más antiguas hasta que el oplog alcance el nuevo tamaño configurado.
Del mismo modo, reducir el periodo mínimo de retención del oplog provoca el truncamiento de las entradas del oplog más antiguas que el periodo especificado si el oplog ha superado el tamaño máximo configurado.
El truncamiento del oplog debido a un tamaño reducido del oplog o del período de retención puede generar un comportamiento inesperado en los clientes que aún leen esas entradas del oplog, entre ellos:
Los change streams abiertos pueden invalidarse
Los Secundarios que no han replicado esas entradas de oplog podrían requerir resincronización.
Las copias de seguridad utilizando
mongodumpcon--oplogcontra el nodo pueden que no capturen las entradas anteriores al truncamiento.
Período mínimo de retención del oplog
Una mongod tiene el siguiente comportamiento cuando está configurada con un periodo mínimo de retención de oplog:
El oplog puede crecer sin restricciones para retener las entradas del oplog durante el número de horas configurado. Esto puede resultar en la reducción o el agotamiento del espacio en disco del sistema debido a una combinación de un alto volumen de guardado y un largo período de retención.
Si el oplog crece más allá de su tamaño máximo, el
mongodpuede seguir ocupando ese espacio en disco incluso si el oplog vuelve a su tamaño máximo o está configurado para un tamaño máximo menor. Consulta Reducir el tamaño de Oplog no libera inmediatamente espacio en disco.El compara el reloj del sistema con la hora de creación de las entradas del registro de operaciones al aplicar la retención de las entradas del
mongodregistro de operaciones. La desviación del reloj entre los componentes del clúster puede provocar un comportamiento inesperado de la retención del registro de operaciones. Consulte Sincronización del reloj para obtener más información sobre la sincronización del reloj entre los miembros del clúster.
replSetResizeOplog No se replica a otros miembros
Cambiar el tamaño del registro de operaciones o el periodo mínimo de retención de un miembro del conjunto de réplicas con replSetResizeOplog no modifica el tamaño del registro de operaciones de ningún otro miembro del conjunto de réplicas. Debe ejecutar replSetResizeOplog en cada miembro del conjunto de réplicas del clúster para cambiar el tamaño del registro de operaciones o el periodo mínimo de retención de todos los miembros.
Reducir el tamaño de Oplog no libera inmediatamente el espacio en disco
Reducir el tamaño del oplog no recupera inmediatamente ese espacio en disco. Esto incluye la reducción del tamaño del oplog debido a la truncación de eventos de oplog anterior al período mínimo de retención del oplog.
Para liberar inmediatamente espacio en disco no utilizado tras reducir el tamaño del registro de operaciones,compact ejecute oplog.rs en la colección de la local base de datos durante un periodo de mantenimiento. compact bloquea todas las operaciones en la base de datos en la que se ejecuta. Por lo tanto, ejecutar compact en oplog.rs impide la sincronización del registro de operaciones. Para obtener información sobre cómo redimensionar el registro de operaciones y compactar,oplog.rs consulte Cambiar el tamaño del registro de operaciones de los miembros del conjunto de réplicas autogestionadas.
Bloqueo de recursos
replSetResizeOplog toma un bloqueo exclusivo (W) en y bloquea otras operaciones en la colección hasta que oplog finalice.
Para obtener más información sobre el bloqueo en MongoDB, consulta FAQ: Concurrency.
Ejemplos
Cambiar el tamaño máximo de Oplog
Utiliza el método db.collection.stats() mongosh para mostrar el tamaño máximo actual del oplog, maxSize, en megabytes. Por ejemplo:
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
El comando anterior devuelve el tamaño de registro de operaciones de este nodo en megabytes:
990
El siguiente comando utiliza replSetResizeOplog para cambiar el tamaño del oplog de este nodo a 16384 megabytes:
db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})
Para verificar el nuevo tamaño de oplog, vuelva a ejecutar el método db.collection.stats():
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
El comando anterior devuelve:
"maxSize": Long("16834")
Advertencia
Reducir el tamaño del oplog en un nodo remueve datos del mismo. Esto puede provocar que los miembros réplicas que se sincronizan con ese nodo se vuelvan obsoletos. Para volver a sincronizar esos miembros, consulta Volver a sincronizar a un nodo de un set de réplicas autogestionado.
Cambiar el período mínimo de retención de Oplog
Opcional. Use el comando para verificar el valor mínimo actual de retención de registros de
db.serverStatus()operacionesoplogTruncation.oplogMinRetentionHourscomo:db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours El comando devuelve el período mínimo actualmente configurado para la retención de Oplog en
mongod. Por ejemplo:1.5 Si el
mongodno tiene un período mínimo de retención de oplog, la operación devuelve un resultado vacío.Use el comando
replSetResizeOplogpara modificar el período mínimo de retención de oplog configurado. Por ejemplo, lo siguiente establece el período mínimo de retención de oplog en2horas:db.adminCommand({ "replSetResizeOplog" : 1, "minRetentionHours" : 2 })