- Storage >
- Journaling >
- Manage Journaling
Manage Journaling¶
On this page
MongoDB uses write ahead logging to an on-disk journal to guarantee write operation durability. The MMAPv1 storage engine also requires the journal in order to provide crash resiliency.
The WiredTiger storage engine does not require journaling to guarantee a consistent state after a crash. The database will be restored to the last consistent checkpoint during recovery. However, if MongoDB exits unexpectedly in between checkpoints, journaling is required to recover writes that occurred after the last checkpoint.
With journaling enabled, if mongod stops unexpectedly, the
program can recover everything written to the journal. MongoDB will
re-apply the write operations on restart and maintain a consistent
state. By default, the greatest extent of lost writes, i.e., those not
made to the journal, are those made in the last 100 milliseconds, plus
the time it takes to perform the actual journal writes. See
commitIntervalMs for more information on
the default.
Procedures¶
Enable Journaling¶
For 64-bit builds of mongod, journaling is enabled by
default.
To enable journaling, start mongod with the
--journal command line option.
Disable Journaling¶
Warning
Do not disable journaling on production systems. When using the
MMAPv1 storage engine without a journal, if your
mongod instance stops without shutting down cleanly
unexpectedly for any reason, (e.g. power failure) and you are not
running with journaling, then you must recover from an unaffected
replica set member or backup, as described in repair.
When running mongod on a
replica set with the
WiredTiger storage engine, if you
turn off journaling with the --nojournal option, you
should also set the replica set configuration option
writeConcernMajorityJournalDefault to false.
To disable journaling, start mongod with the
--nojournal command line option.
Get Commit Acknowledgement¶
You can get commit acknowledgement with the Write Concern and
the j option. For details, see
Write Concern.
Avoid Preallocation Lag for MMAPv1¶
With the MMAPv1 storage engine, MongoDB may
preallocate journal files if the mongod process determines
that it is more efficient to preallocate journal files than create new
journal files as needed.
Depending on your filesystem, you might experience a preallocation lag
the first time you start a mongod instance with journaling
enabled. The amount of time required to pre-allocate files might last
several minutes; during this time, you will not be able to connect to
the database. This is a one-time preallocation and does not occur with
future invocations.
To avoid preallocation lag, you can
preallocate files in the journal directory by copying them from
another instance of mongod.
Preallocated files do not contain data. It is safe to later remove
them. But if you restart mongod with journaling,
mongod will create them again.
Example
The following sequence preallocates journal files for an
instance of mongod running on port 27017 with a
database path of /data/db.
For demonstration purposes, the sequence starts by creating a set of journal files in the usual way.
Create a temporary directory into which to create a set of journal files:
Create a set of journal files by starting a
mongodinstance that uses the temporary directory:When you see the following log output, indicating
mongodhas the files, press CONTROL+C to stop themongodinstance:Preallocate journal files for the new instance of
mongodby moving the journal files from the data directory of the existing instance to the data directory of the new instance:Start the new
mongodinstance:
Monitor Journal Status¶
Use the following command to monitor journal status:
-
The
serverStatuscommand returns database status information that is useful for assessing performance.
Change the Group Commit Interval for MMAPv1¶
For the MMAPv1 storage engine, you can set the
group commit interval using the --journalCommitInterval command line option. The allowed
range is 2 to 300 milliseconds.
Lower values increase the durability of the journal at the expense of disk performance.
Recover Data After Unexpected Shutdown¶
On a restart after a crash, MongoDB replays all journal files in the
journal directory before the server becomes available. If MongoDB must
replay journal files, mongod notes these events in the log
output.
There is no reason to run repairDatabase in these
situations.