@@ -19,70 +19,81 @@ Definition
19
19
20
20
.. dbcommand:: fsync
21
21
22
- Forces the :binary:`~bin.mongod` process to flush all pending writes
23
- from the storage layer to disk and locks the *entire*
24
- :binary:`~bin.mongod` instance to prevent additional writes until the
25
- user releases the lock with a corresponding
26
- :dbcommand:`fsyncUnlock`. Optionally, you can use :dbcommand:`fsync`
27
- to lock the :binary:`~bin.mongod` instance and block write operations
28
- for the purpose of capturing backups.
29
-
30
- As applications write data, MongoDB records the data in the storage
31
- layer and then writes the data to disk within the :setting:`~storage.syncPeriodSecs`
32
- interval, which is 60 seconds by default. Run :dbcommand:`fsync` when
33
- you want to flush writes to disk ahead of that interval.
22
+ Flushes all pending writes from the storage layer to disk. When the ``lock``
23
+ field is set to ``true``, it sets a lock on the server or cluster to prevent
24
+ additional writes until the lock is released.
34
25
35
26
27
+ .. versionadded:: 4.4.25
28
+
29
+ When the ``fsync`` command runs on :program:`mongos`, it performs the
30
+ fsync operation on each shard in the cluster.
31
+
32
+
33
+ As applications write data, MongoDB records the data in the storage layer
34
+ and then writes the data to disk within the
35
+ :setting:`~storage.syncPeriodSecs` interval, which is 60 seconds by default.
36
+ Run ``fsync`` when you want to flush writes to disk ahead of that interval.
37
+
38
+ .. include:: /includes/fsync-lock-command
39
+
40
+ Use this command to block writes when you want to perform backup
41
+ operations.
42
+
43
+ .. |method| replace:: :method:`db.fsyncLock` helper method
44
+ .. include:: /includes/fact-dbcommand-tip
45
+
46
+
36
47
The :dbcommand:`fsync` command has the following syntax:
37
48
38
49
.. code-block:: javascript
39
50
40
- { fsync: 1, lock: <Boolean>, comment: <any> }
51
+ db.adminCommand(
52
+ {
53
+ fsync: 1,
54
+ lock: <Boolean>,
55
+ fsyncLockAcquisitionTimeout: <integer>,
56
+ comment: <any>
57
+ }
58
+ )
41
59
42
60
The :dbcommand:`fsync` command has the following fields:
43
61
44
62
45
63
.. list-table::
46
64
:header-rows: 1
47
- :widths: 20 20 80
48
-
65
+ :widths: 20 20 60
66
+
49
67
* - Field
50
-
51
68
- Type
52
-
53
69
- Description
54
-
70
+
55
71
* - ``fsync``
72
+ - integer
73
+ - Enter "1" to apply :dbcommand:`fsync`.
56
74
75
+ * - ``fsyncLockAcquisitionTimeoutMillis``
57
76
- integer
77
+ - Optional. Specifies the amount of time in milliseconds to wait to
78
+ acquire locks. If the lock acquisition operation times out, the
79
+ command returns a failed response.
58
80
59
- - Enter "1" to apply :dbcommand:`fsync`.
60
-
61
- * - ``lock``
81
+ Default: ``90000``
62
82
63
- - boolean
83
+ .. versionadded:: 4.4.25
64
84
65
- - Optional. Takes a lock on the :binary:`~bin.mongod` instance and blocks all
66
- write operations. Each :dbcommand:`fsync` with ``lock`` operation
85
+ * - ``lock``
86
+ - boolean
87
+ - Optional. Takes a lock on the server or cluster and blocks all
88
+ write operations. Each ``fsync`` with ``lock`` operation
67
89
takes a lock.
68
90
69
-
70
91
* - ``comment``
71
-
72
92
- any
73
-
74
93
- .. include:: /includes/extracts/comment-content.rst
75
94
76
95
.. versionadded:: 4.4
77
-
78
-
79
- To run the :dbcommand:`fsync` command, use the
80
- :method:`db.adminCommand()` method:
81
-
82
- .. code-block:: javascript
83
-
84
- db.adminCommand( { fsync: 1, ... } )
85
-
96
+
86
97
Considerations
87
98
--------------
88
99
@@ -91,61 +102,60 @@ Considerations
91
102
Impact on Larger Deployments
92
103
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
93
104
94
- An :dbcommand:`fsync` lock is only possible on *individual*
95
- :binary:`~bin.mongod` instances of a
96
- sharded cluster, not on the entire cluster. To back up an entire sharded
97
- cluster, please see :doc:`/administration/backup-sharded-clusters` for
98
- more information.
105
+ .. versionadded:: 4.4.25
99
106
100
- Alternatives with Journaling
101
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107
+ When the ``fsync`` command runs on :program:`mongos`, it performs the fsync
108
+ operation on the entire cluster. By setting the ``lock`` field to ``true``,
109
+ it sets a lock on the cluster, preventing additional writes.
102
110
103
- If your :binary:`~bin.mongod` has :term:`journaling <journal>` enabled,
104
- please use :ref:`file system or volume/block level snapshot tool <backup-with-journaling>` to create a
105
- backup of the data set and the journal together as a single unit.
111
+ To take a usable self-managed backup, before locking a sharded cluster:
106
112
113
+ - Ensure that no chunk migration, resharding, or DDL operations are active.
107
114
108
- ``fsync`` with ``lock: true``
109
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
115
+ - Stop the balancer to prevent additional chunk migrations from starting.
110
116
111
- .. versionchanged:: 3.4
117
+ Alternatives with Journaling
118
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
112
119
113
- The ``{ fsync: 1, lock: true }`` command now returns a ``lockCount``
114
- in the return document.
120
+ If your :program:`mongod` has :term:`journaling <journal>` enabled, use
121
+ :ref:`a file system or volume/block level snapshot tool <backup-with-journaling>`
122
+ to create a backup of the data set and the journal together as a single unit.
115
123
116
- After ``{ fsync: 1, lock: true }`` runs on a :binary:`~bin.mongod`, all
117
- write operations will block. The :binary:`~bin.mongo` shell provides a
118
- helper method :method:`db.fsyncLock()`.
119
124
125
+ Lock Count
126
+ ~~~~~~~~~~
120
127
121
- .. note::
128
+ The ``fsync`` command returns a document includes a ``lockCount`` field. When
129
+ run on :program:`mongod`, the count indicates the number of fsync locks set on
130
+ the server.
122
131
123
- The ``{ fsync: 1, lock: true }`` operation maintain a lock count.
124
- Each ``{ fsync: 1, lock: true }`` operation increments the lock
125
- count.
132
+ When run on a sharded cluster, :program:`mongos` sends the fsync operation to
133
+ each shard and returns the results, which includes the ``lockCount`` for each.
126
134
127
- To unlock a :binary:`~bin.mongod` instance for writes, the lock count
128
- must be zero. That is, for a given number of ``{ fsync: 1, lock:
129
- true }`` operation, you must issue a corresponding number of unlock
130
- operations in order to unlock the instance for writes. To unlock,
131
- see :method:`db.fsyncUnlock()` .
135
+ .. note::
136
+
137
+ If the ``lockCount`` field is non-zero, all writes are blocked on the server
138
+ and cluster. To reduce the lock count, use the :dbcommand:`fsyncUnlock`
139
+ command .
132
140
133
141
Examples
134
142
--------
135
143
136
- Lock ``mongod`` Instance
137
- ~~~~~~~~~~~~~~~~~~~~~~~~
144
+ Fsync Lock
145
+ ~~~~~~~~~~
138
146
139
147
.. note::
140
148
141
149
.. include:: /includes/extracts/wt-fsync-lock-compatibility-command.rst
142
150
143
- The primary use of :dbcommand:`fsync` is to lock the :binary:`~bin.mongod`
144
- instance in order to back up the files within :binary:`~bin.mongod`\ 's :setting:`~storage.dbPath`.
145
- The operation flushes all data to the storage layer and
146
- blocks all write operations until you unlock the :binary:`~bin.mongod` instance.
151
+ The ``fsync`` command can lock an individual :program:`mongod` instance or a
152
+ sharded cluster through :program:`mongos`. When run with the ``lock`` field
153
+ set to ``true``, the fsync operation flushes all data to the storage layer and
154
+ blocks all additional write operations until you unlock the instance or
155
+ cluster.
147
156
148
- To lock the database, use the ``lock`` field set to ``true``:
157
+ To lock the database, use the ``fsync`` command to set the ``lock`` field
158
+ to ``true``:
149
159
150
160
.. code-block:: javascript
151
161
@@ -163,37 +173,38 @@ operation and the ``lockCount``:
163
173
"ok" : 1
164
174
}
165
175
166
- You may continue to perform read operations on a :binary:`~bin.mongod` instance that has a
167
- :dbcommand:`fsync` lock. However, after the first write operation all
168
- subsequent read operations wait until you unlock the :binary:`~bin.mongod` instance.
176
+ When locked, write operations are blocked. Separate connections may continue
177
+ read operations until the first attempt at a write operation, then they also
178
+ wait until the sever or cluster is unlocked.
179
+
169
180
170
181
.. important::
171
182
172
- The ``{ fsync: 1, lock: true }`` operation maintain a lock count.
183
+ The fsync lock operation maintains a lock count.
173
184
174
- To unlock a :binary:`~bin.mongod` instance for writes, the lock count
175
- must be zero. That is, for a given number of ``{ fsync: 1, lock:
176
- true }`` operation , you must issue a corresponding number of unlock
177
- operations in order to unlock the instance for writes.
185
+ To unlock a server or cluster for writes, the lock count
186
+ must be zero. That is, for the given number of times you perform an fsync
187
+ lock , you must issue a corresponding number of unlock operations to unlock
188
+ the server or cluster for writes.
178
189
179
- Unlock ``mongod`` Instance
180
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
190
+ Fsync Unlock
191
+ ~~~~~~~~~~~~
181
192
182
- To unlock the :binary:`~bin.mongod` , use :method:`db. fsyncUnlock()` :
193
+ To unlock a server of cluster , use the :dbcommand:` fsyncUnlock` command :
183
194
184
195
.. code-block:: javascript
185
196
186
- db.fsyncUnlock();
197
+ db.adminCommnad( { fsyncUnlock: 1 } )
187
198
188
- Repeat the :method:`db.fsyncUnlock()` to reduce the lock count to zero
189
- to unlock the instance for writes.
199
+ Repeat this command as many times as needed to reduce the lock count to zero.
200
+ Once the lock count reaches zero, the server or cluster can resume writes.
190
201
191
202
Check Lock Status
192
203
~~~~~~~~~~~~~~~~~
193
204
194
205
To check the state of the fsync lock, use :method:`db.currentOp()`. Use
195
- the following JavaScript function in the shell to test if :binary:`~bin.mongod` instance is
196
- currently locked:
206
+ the following JavaScript function in the shell to test if the server or
207
+ cluster is currently locked:
197
208
198
209
.. code-block:: javascript
199
210
@@ -212,5 +223,6 @@ call it, with the following syntax:
212
223
213
224
serverIsLocked()
214
225
215
- This function will return ``true`` if the :binary:`~bin.mongod` instance is
216
- currently locked and ``false`` if the :binary:`~bin.mongod` is not locked.
226
+ This function will return ``true`` if the server or cluster is
227
+ currently locked and ``false`` if the server or cluster is not locked.
228
+
0 commit comments