- Reference >
- Database Commands >
- Administration Commands >
- fsync
fsync¶
On this page
Definition¶
-
fsync
¶ Forces the
mongod
process to flush all pending writes from the storage layer to disk. Optionally, you can usefsync
to lock themongod
instance and block write operations for the purpose of capturing backups.As applications write data, MongoDB records the data in the storage layer and then writes the data to disk within the
syncPeriodSecs
interval, which is 60 seconds by default. Runfsync
when you want to flush writes to disk ahead of that interval.The
fsync
command has the following syntax:{ fsync: 1, async: <Boolean>, lock: <Boolean> }
The
fsync
command has the following fields:Field Type Description fsync
integer Enter “1” to apply fsync
.async
boolean Optional. Runs fsync
asynchronously. By default, thefsync
operation is synchronous.lock
boolean Optional. Locks mongod
instance and blocks all write operations.
Considerations¶
Wired Tiger Compatibility¶
Changed in version 3.2: fsync
command with the lock
option can ensure that the data files do not change for
MongoDB instances using either the MMAPv1 or the WiredTiger storage
engines, thus providing consistency for the purposes of creating
backups.
In previous MongoDB versions, fsync
command with the lock
option cannot guarantee a
consistent set of files for low-level backups (e.g. via file copy
cp
, scp
, tar
) for WiredTiger.
Impact on Larger Deployments¶
An fsync
lock is only possible on individual
mongod
instances of a
sharded cluster, not on the entire cluster. To back up an entire sharded
cluster, please see Backup and Restore Sharded Clusters for
more information.
Alternatives with Journaling¶
If your mongod
has journaling enabled,
please use file system or volume/block level snapshot tool to create a
backup of the data set and the journal together as a single unit.
Impact on Read Operations¶
After fsync
with the lock
option runs on a
mongod
, all write operations will block until a subsequent
unlock. Read operations may also block. As a result, fsync
with lock is not a reliable mechanism for making a mongod
instance operate in a read-only mode.
Important
Blocked read operations prevent verification of authentication.
Such reads are necessary to establish new connections
to a mongod
that enforces authorization checks.
Warning
When calling fsync
with the lock
option, ensure that
the connection remains open to allow a subsequent call to
db.fsyncUnlock()
.
Closing the connection may make it difficult to release the lock.
Examples¶
Run Asynchronously¶
The fsync
operation is synchronous by default. To run
fsync
asynchronously, use the async
field set to
true
:
{ fsync: 1, async: true }
The operation returns immediately. To view the status of the
fsync
operation, check the output of
db.currentOp()
.
Lock mongod
Instance¶
Note
Changed in version 3.2: fsync
command with the lock
option can ensure that the data files do not change for
MongoDB instances using either the MMAPv1 or the WiredTiger storage
engines, thus providing consistency for the purposes of creating
backups.
In previous MongoDB versions, fsync
command with the lock
option cannot guarantee a
consistent set of files for low-level backups (e.g. via file copy
cp
, scp
, tar
) for WiredTiger.
The primary use of fsync
is to lock the mongod
instance in order to back up the files within mongod
’s dbPath
.
The operation flushes all data to the storage layer and
blocks all write operations until you unlock the mongod
instance.
To lock the database, use the lock
field set to true
:
{ fsync: 1, lock: true }
You may continue to perform read operations on a mongod
instance that has a
fsync
lock. However, after the first write operation all
subsequent read operations wait until you unlock the mongod
instance.
Check Lock Status¶
To check the state of the fsync lock, use db.currentOp()
. Use
the following JavaScript function in the shell to test if mongod
instance is
currently locked:
serverIsLocked = function () {
var co = db.currentOp();
if (co && co.fsyncLock) {
return true;
}
return false;
}
After loading this function into your mongo
shell session
call it, with the following syntax:
serverIsLocked()
This function will return true
if the mongod
instance is
currently locked and false
if the mongod
is not locked.