- MongoDB CRUD Operations >
- MongoDB CRUD Concepts >
- Write Operations >
- Record Padding
Record Padding¶
Update operations can increase the size of the document [1]. If a document outgrows its current allocated record space, MongoDB must allocate a new space and move the document to this new location.
To reduce the number of moves, MongoDB includes a small amount of extra space, or padding, when allocating the record space. This padding reduces the likelihood that a slight increase in document size will cause the document to exceed its allocated record size.
[1] | Documents in MongoDB can grow up to the full
maximum BSON document size . |
See also
Padding Factor¶
To minimize document movements and their impact, MongoDB employs
padding. MongoDB adaptively adjusts the size of record allocations in
a collection by adding a paddingFactor
so that the
documents have room to grow. The paddingFactor
indicates the padding for new inserts and moves.
To check the current paddingFactor
on a collection,
you can run the db.collection.stats()
operation in the
mongo
shell, as in the following example:
Since MongoDB writes each document at a different point in time, the
padding for each document will not be the same. You can calculate the
padding size by subtracting 1 from the paddingFactor
, for
example:
For example, a paddingFactor
of 1.0
specifies no padding
whereas a paddingFactor of 1.5
specifies a padding size of 0.5
or 50
percent (50%) of the document size.
Because the paddingFactor
is relative to the size of each
document, you cannot calculate the exact amount of padding for a
collection based on the average document size and padding factor.
If an update operation causes the document to decrease in size, for
instance if you perform an $unset
or a $pop
update, the document remains in place and effectively has more
padding. If the document remains this size, the space is not reclaimed
until you perform a compact
or a
repairDatabase
operation.
Operations That Remove Padding¶
The following operations remove padding: compact
,
repairDatabase
, and initial replica sync operations.
However, with the compact
command, you can run the command
with a paddingFactor
or a paddingBytes
parameter. See
compact
command for details.
Padding is also removed if you use mongoexport
a collection.
If you use mongoimport
into a new collection,
mongoimport
will not add padding. If you use
mongoimport
with an existing collection with padding,
mongoimport
will not affect the existing padding.
When a database operation removes padding from a collection, subsequent updates to the collection that increase the record size will have reduced throughput until the collection’s padding factor grows. However, the collection will require less storage.
Record Allocation Strategies¶
New in version 2.2: collMod
and usePowerOf2Sizes
.
To more efficiently reuse the space freed as a result of deletions or
document relocations, you can specify that MongoDB allocates record
sizes in powers of 2. To do so, use the collMod
command
with the usePowerOf2Sizes
flag. See collMod
command for more details. As with all padding, power of 2 size
allocations minimizes, but does not eliminate, document movements.
See also Can I manually pad documents to prevent moves during updates?