Definição
replSetResizeOplogreplSetResizeOplogtambém oferece suporte à especificação do número mÃnimo de horas para preservar uma entrada de oplog.Alterado na versão 5.0:
Para definir o tamanho
replSetOplogemmongosh, use o construtorDouble().replSetResizeOplogpermite a você redimensionar o oplog ou seu perÃodo de retenção mÃnimo dinamicamente sem reiniciar o processomongoddo.Você deve executar este comando no banco de dados
admin.
Compatibilidade
Esse comando está disponÃvel em implantações hospedadas nos seguintes ambientes:
Importante
Este comando não é suportado em clusters MongoDB Atlas . Para obter informações sobre o suporte do Atlas para todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponÃvel, de uso gratuito e autogerenciada do MongoDB
Observação
Para redimensionar o oplog no Atlas, consulte Definir oplog window mÃnima.
Sintaxe
O comando tem o seguinte formato:
db.adminCommand( { replSetResizeOplog: <int>, size: <double>, minRetentionHours: <double> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
|---|---|---|
| int | Defina como |
| double | O tamanho máximo do oplog em megabytes.
|
| double | Opcional. O número mÃnimo de horas para preservar uma entrada de oplog, em que os valores decimais representam as frações de uma hora. Por exemplo, um valor de O valor deve ser maior ou igual a Um
Para verificar o perÃodo mÃnimo de retenção de oplog configurado no momento, consulte |
Comportamento
Você pode usar o replSetResizeOplog em instâncias do mongod executando com o mecanismo de armazenamento Wired Tiger ou o mecanismo de armazenamento in-memory.
Consulte o tutorial Alterar o tamanho do oplog dos membros do conjunto de réplicas autogerenciadas para obter um procedimento sobre como usar o comando replSetResizeOplog para redimensionar o oplog.
O oplog pode ultrapassar seu limite de tamanho configurado para evitar a exclusão do majority commit point.
Você não pode descartar a coleção local.oplog.rs . Para obter mais informações sobre essa restrição, consulte Comportamento da collectionoplog .
replSetResizeOplog substitui o tamanho máximo do oplog ou o perÃodo mÃnimo de retenção do oplog definido na inicialização por:
storage.oplogMinRetentionHours/--oplogMinRetentionHoursrespectivamente.
O novo tamanho do oplog persiste após a reinicialização do servidor, a menos que você use:
Importante
Reduzir o tamanho máximo do oplog resulta no truncamento das entradas de oplog mais antigas até que o oplog atinja o novo tamanho configurado.
Da mesma forma, reduzir o perÃodo mÃnimo de retenção do oplog resulta na truncagem das entradas do oplog mais antigas que o perÃodo especificado se o oplog tiver excedido o tamanho máximo configurado.
O truncamento do oplog devido à redução do tamanho do oplog ou do perÃodo de retenção pode resultar em comportamento inesperado dos clientes que ainda estão lendo essas entradas do oplog, incluindo:
Fluxos de alteração abertos podem ser invalidados
Os secundários que não replicaram essas entradas de oplog podem exigir ressincronização.
PerÃodo mÃnimo de retenção de Oplog
Um mongod tem o seguinte comportamento quando configurado com um perÃodo mÃnimo de retenção de oplog:
O oplog pode crescer sem restrições, de modo a reter as entradas do oplog pelo número de horas configurado. Isto pode resultar na redução ou esgotamento do espaço em disco do sistema devido a uma combinação de alto volume escrita e grande perÃodo de retenção.
Se o oplog ultrapassar seu tamanho máximo, o
mongodpoderá continuar a manter esse espaço em disco, mesmo que o oplog retorne ao seu tamanho máximo ou seja configurado para um tamanho máximo menor.Consulte reduzir o tamanho do oplog não retorna imediatamente espaço em disco.O
mongodcompara o relógio de parede do sistema com um relógio de parede de criação de entrada de oplog ao impor a retenção de entradas de oplog. O desvio do relógio entre os componentes do cluster pode resultar em um comportamento inesperado de retenção de oplog. Consulte Sincronização do relógio para obter mais informações sobre a sincronização do relógio entre os membros do cluster.
replSetResizeOplog Não replica para outros membros
Alterar o tamanho do oplog ou o perÃodo mÃnimo de retenção do oplog de um determinado membro do conjunto de réplicas com replSetResizeOplog não altera o tamanho do oplog de nenhum outro membro do conjunto de réplicas. Execute replSetResizeOplog em cada membro do conjunto de réplicas no seu cluster para alterar o tamanho do oplog ou o perÃodo mÃnimo de retenção de todos os membros.
Reduzir o tamanho do oplog não retorna imediatamente o espaço em disco
Reduzir o tamanho do oplog não recupera imediatamente esse espaço em disco. Isso inclui a redução do tamanho do oplog devido à truncamento de eventos de oplog anteriores ao perÃodo mÃnimo de retenção de oplog.
Para liberar imediatamente o espaço em disco não utilizado após reduzir o tamanho do oplog, execute compact na collection do local oplog.rs banco de dados de dados durante um perÃodo de manutenção. compact bloqueia todas as operações no banco de dados de dados em que ele é executado. A execução de compact no oplog.rs impede a sincronização de oplog . Para ver um procedimento sobre o redimensionamento do oplog e a compactação do oplog.rs, consulte Alterar o tamanho do oplog dos membros do conjunto de réplicas autogerenciadas.
Bloqueio de recursos
replSetResizeOplog pega uma bloqueio exclusiva (W) no oplog e bloqueia outras operações na collection até que ela termine.
Para obter mais informações sobre bloqueios no MongoDB, consulte as Perguntas frequentes: simultaneidade.
Exemplos
Alterar o tamanho máximo do oplog
Use o método db.collection.stats() mongosh para exibir o tamanho máximo do oplog atual, maxSize, em megabytes. Por exemplo:
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
O comando acima retorna o tamanho do oplog deste membro em megabytes:
990
O seguinte comando utiliza replSetResizeOplog para alterar o tamanho do oplog deste membro para 16384 megabytes:
db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})
Para verificar o novo tamanho do oplog, execute novamente o método db.collection.stats():
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
O comando acima retorna:
"maxSize": Long("16834")
Aviso
A redução do tamanho do oplog em um nó remove os dados dele. Isso pode fazer com que os membros da réplica sincronizados com esse nó fiquem obsoletos. Para sincronizar esses membros novamente, consulte Sincronizar novamente um membro de um conjunto de réplicas autogerenciado.
Alterar o perÃodo mÃnimo de retenção do oplog
Conecte
mongoshao membro do conjunto de réplicasmongod.Opcional. Utilize o comando
db.serverStatus()para verificar o valor de retenção do oplog mÃnimo atual comooplogTruncation.oplogMinRetentionHours:db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours O comando retorna o perÃodo mÃnimo de retenção do oplog configurado atualmente para o
mongod. Por exemplo:1.5 Se o
mongodnão tiver um perÃodo mÃnimo de retenção do oplog, a operação retornará um resultado vazio.Use o comando
replSetResizeOplogpara modificar o perÃodo mÃnimo de retenção do oplog configurado. Por exemplo, o seguinte define o perÃodo mÃnimo de retenção do oplog como2horas:db.adminCommand({ "replSetResizeOplog" : 1, "minRetentionHours" : 2 })