Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

fsync

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Campos de comando
  • Considerações
  • Exemplos
fsync

Libera todas as gravações pendentes da camada de armazenamento para o disco. Quando o campo lock é definido como true, ele define um bloqueio no servidor ou cluster para impedir gravações adicionais até que o bloqueio seja liberado.

A partir de MongoDB 7.1 (também disponível a partir de 7.0.2, 6.0.11 e 5.0.22) os comandos fsync e fsyncUnlock podem ser executados em mongos para bloqueio e desbloquear um cluster fragmentado.

À medida que os aplicativos gravam dados, o MongoDB registra os dados na camada de armazenamento e, em seguida, grava os dados no disco.

Execute fsync quando desejar liberar gravações no disco.

Para fornecer dados duráveis, o WiredTiger usa checkpoints. Para obter mais detalhes, consulte Registro no diário e mecanismo de armazenamento WiredTiger.

Importante

Os servidores mantêm uma contagem de bloqueio do fsync . O comando fsync com o campo lock definido como true aumenta a contagem de bloqueio , enquanto o comando fsyncUnlock a diminui. Para habilitar gravações em um servidor ou cluster bloqueado, chame o comando fsyncUnlock até que a contagem de bloqueio chegue a zero.

Use este comando para bloquear gravações quando desejar executar operações de backup.

Dica

Em mongosh, esse comando também pode ser executado por meio do método auxiliar db.fsyncLock().

Os métodos auxiliares são práticos para os usuários mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • 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

O comando tem a seguinte sintaxe:

db.adminCommand(
{
fsync: 1,
lock: <Boolean>,
fsyncLockAcquisitionTimeout: <integer>,
comment: <any>
}
)

O comando tem os seguintes campos:

Campo
Tipo
Descrição
fsync
inteiro
Insira "1" para aplicar fsync.
fsyncLockAcquisitionTimeoutMillis
inteiro

Opcional. Especifica a quantidade de tempo em milissegundos para aguardar a aquisição de bloqueios. Se a operação de aquisição de bloqueio expirar, o comando retornará uma resposta com falha.

Padrão: 90000

Novidade na versão 7.1.

lock
booleano
Opcional. Bloqueia o servidor ou cluster e bloqueia todas as operações de gravação. Cada operação fsync com lock possui um bloqueio.
comment
any

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

O comando fsync com a opção lock garante que os arquivos de dados sejam copiados com segurança usando utilitários de backup de baixo nível, como cp, scp ou tar. Um mongod iniciado usando os arquivos copiados contém dados escritos pelo usuário que são indistinguíveis dos dados escritos pelo usuário no mongod bloqueado.

Os arquivos de dados de um mongod bloqueado podem mudar devido a operações como sincronizações do registro no diário ou snapshots do WiredTiger. Embora isso não tenha efeito nos dados lógicos (por exemplo dados acessados pelos clientes), alguns utilidades de backup podem detectar essas alterações e emitir avisos ou não funcionar com os erros. Para obter mais informações sobre MongoDB- utilidades e procedimentos de backup recomendados, consulte Métodos de backup para um sistema autogerenciado.

Novidade na versão 7.1.

Quando o comando fsync é executado em mongos, ele executa a operação fsync em todo o cluster. Definindo o campo lock para true, ele define um bloqueio no cluster, evitando gravações adicionais.

Para fazer um backup autogerenciado utilizável, antes de bloquear um cluster fragmentado:

  • Certifique-se de que nenhuma operação de migração de shards, refragmentação ou DDL esteja ativa.

  • Pare o balanceador para evitar o início de migrações de blocos adicionais.

Se o mongod tiver o registro no diário habilitado, use um sistema de arquivos ou uma ferramenta de snapshot em nível de volume/bloco para criar um backup do conjunto de dados e do diário juntos como uma única unidade.

O comando fsync retorna um documento inclui um campo lockCount. Ao executar no mongod, a contagem indica o número de bloqueios do fsync configurados no servidor.

Ao executar em um cluster fragmentado, o mongos envia a operação fsync para cada shard e retorna os resultados, que inclui o lockCount para cada um.

Observação

Se o campo lockCount for maior que zero, todas as gravações serão bloqueadas no servidor e no cluster. Para reduzir a contagem de bloqueio, use o comando fsyncUnlock.

Os bloqueios do Fsync são executados na primária em um conjunto de réplicas ou cluster fragmentado.

Se o primário ficar inativo ou ficar inacessível devido a problemas de rede, o cluster elege um novo primário dentre os secundários disponíveis. Se um primário com um bloqueio fsync ficar inativo, o novo primário não reterá o bloqueio fsync e poderá lidar com operações de gravação. Quando as eleições ocorrem durante as operações de backup, o backup resultante pode ser inconsistente ou inutilizável.

Para se recuperar da queda primária:

  1. Execute o comando fsyncUnlock até que a contagem de bloqueio atinja zero para liberar o bloqueio em todos os nós.

  2. Execute o comando fsync para restabelecer o bloqueio do fsync no cluster.

  3. Reinicie o backup.

Além disso, os bloqueios fsync são persistentes. Quando o primário antigo ficar online novamente, você precisará usar o comando fsyncUnlock para liberar o bloqueio no nó.

Observação

O comando fsync com a opção lock garante que os arquivos de dados sejam copiados com segurança usando utilitários de backup de baixo nível, como cp, scp ou tar. Um mongod iniciado usando os arquivos copiados contém dados escritos pelo usuário que são indistinguíveis dos dados escritos pelo usuário no mongod bloqueado.

Os arquivos de dados de um mongod bloqueado podem mudar devido a operações como sincronizações do registro no diário ou snapshots do WiredTiger. Embora isso não tenha efeito nos dados lógicos (por exemplo dados acessados pelos clientes), alguns utilidades de backup podem detectar essas alterações e emitir avisos ou não funcionar com os erros. Para obter mais informações sobre MongoDB- utilidades e procedimentos de backup recomendados, consulte Métodos de backup para um sistema autogerenciado.

O comando fsync pode bloquear uma instância individual mongod ou um cluster fragmentado por meio de mongos. Ao executar com o campo lock configurado para true, a operação fsync move todos os dados para a camada de armazenamento e bloqueia todas as operações de gravação adicionais até que você desbloqueie a instância ou cluster.

Para bloquear o banco de dados, utilize o comando fsync para definir o campo lock como true:

db.adminCommand( { fsync: 1, lock: true } )

A operação retorna um documento que inclui o status da operação e o lockCount:

{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(1),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}

Quando bloqueado, as operações de gravação são bloqueadas. Conexões separadas podem continuar as operações de leitura até a primeira tentativa de uma operação de gravação e, em seguida, também aguardar até que o servidor ou cluster seja desbloqueado.

Importante

A operação de bloqueio do fsync mantém uma contagem de bloqueio.

Para desbloquear um servidor ou cluster para gravações, a contagem de bloqueio deve ser zero. Ou seja, para o número determinado de vezes que você executa um bloqueio fsync, você deve emitir um número correspondente de operações de desbloqueio para desbloquear o servidor ou cluster para gravações.

Para desbloquear um servidor de cluster, utilize o comando fsyncUnlock:

db.adminCommand( { fsyncUnlock: 1 } )

Repita este comando quantas vezes for necessário para reduzir a contagem de bloqueio para zero. Quando a contagem de bloqueios chegar a zero, o servidor ou cluster poderá retomar as gravações.

Para verificar o estado do bloqueio de sincronização, use db.currentOp(). Use a seguinte função JavaScript na shell para testar se o servidor ou cluster está atualmente bloqueado:

serverIsLocked = function () {
var co = db.currentOp();
if (co && co.fsyncLock) {
return true;
}
return false;
}

Após carregar esta função em sua sessão do mongosh , chame-a com a seguinte sintaxe:

serverIsLocked()

Esta função retornará true se o servidor ou cluster estiver atualmente bloqueado e false se o servidor ou cluster não estiver bloqueado.

Voltar

arquivo md5