Docs Menu

Docs HomeDevelop ApplicationsMongoDB Manual

Read Concern "majority"

On this page

  • Performance
  • Availability
  • Example
  • Storage Engine Support
  • Read Concern "majority" and Transactions
  • Read Concern "majority" and Aggregation
  • Read Your Own Writes
  • Disable Read Concern Majority
"majority"

For read operations not associated with multi-document transactions, read concern "majority" guarantees that the data read has been acknowledged by a majority of the replica set members (i.e. the documents read are durable and guaranteed not to roll back).

For operations in multi-document transactions, read concern "majority" provides its guarantees only if the transaction commits with write concern "majority". Otherwise, the "majority" read concern provides no guarantees about the data read in transactions.

Regardless of the read concern level, the most recent data on a node may not reflect the most recent version of the data in the system.

Each replica set member maintains, in memory, a view of the data at the majority-commit point; the majority-commit point is calculated by the primary. To fulfill read concern "majority", the node returns data from this view and is comparable in performance cost to other read concerns.

Read concern "majority" is available for use with or without causally consistent sessions and transactions.

You can disable read concern "majority" for a deployment with a three-member primary-secondary-arbiter (PSA) architecture; however, this has implications for change streams (in MongoDB 4.0 and earlier only) and transactions on sharded clusters. For more information, see Disable Read Concern Majority.

Consider the following timeline of a write operation Write 0 to a three member replica set:

Note

For simplification, the example assumes:

  • All writes prior to Write 0 have been successfully replicated to all members.

  • Write prev is the previous write before Write 0.

  • No other writes have occured after Write 0.

Timeline of a write operation to a three member replica set.
Time
Event
Most Recent Write
Most Recent w: "majority" write
t 0
Primary applies Write 0
Primary: Write 0
Secondary 1: Write prev
Secondary 2: Write prev
Primary: Write prev
Secondary 1: Write prev
Secondary 2: Write prev
t 1
Secondary 1 applies write 0
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write prev
Primary: Write prev
Secondary 1: Write prev
Secondary 2: Write prev
t 2
Secondary 2 applies write 0
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0
Primary: Write prev
Secondary 1: Write prev
Secondary 2: Write prev
t 3
Primary is aware of successful replication to Secondary 1 and sends acknowledgement to client
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0
Primary: Write 0
Secondary 1: Write prev
Secondary 2: Write prev
t 4
Primary is aware of successful replication to Secondary 2
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0
Primary: Write 0
Secondary 1: Write prev
Secondary 2: Write prev
t 5
Secondary 1 receives notice (through regular replication mechanism) to update its snapshot of its most recent w: "majority" write
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write prev
t 6
Secondary 2 receives notice (through regular replication mechanism) to update its snapshot of its most recent w: "majority" write
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0
Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0

Then, the following tables summarizes the state of the data that a read operation with "majority" read concern would see at time T.

Timeline of a write operation to a three member replica set.
Read Target
Time T
State of Data
Primary
Before t 3
Data reflects Write prev
Primary
After t 3
Data reflects Write 0
Secondary 1
Before t 5
Data reflects Write prev
Secondary 1
After t 5
Data reflects Write 0
Secondary 2
Before or at t 6
Data reflects Write prev
Secondary 2
After t 6
Data reflects Write 0

Read concern "majority" is available for the WiredTiger storage engine.

Tip

The serverStatus command returns the storageEngine.supportsCommittedReads field which indicates whether the storage engine supports "majority" read concern.

Note

You set the read concern at the transaction level, not at the individual operation level. To set the read concern for transactions, see Transactions and Read Concern.

For operations in multi-document transactions, read concern "majority" provides its guarantees only if the transaction commits with write concern "majority". Otherwise, the "majority" read concern provides no guarantees about the data read in transactions.

Starting in MongoDB 4.2, you can specify read concern level "majority" for an aggregation that includes an $out stage.

Changed in version 3.6.

Starting in MongoDB 3.6, you can use causally consistent sessions to read your own writes, if the writes request acknowledgement.

Prior to MongoDB 3.6, in order to read your own writes you must issue your write operation with { w: "majority" } write concern, and then issue your read operation with primary read preference, and either "majority" or "linearizable" read concern.

For 3-Member Primary-Secondary-Arbiter Architecture

You can disable read concern "majority" if you have a three-member replica set with a primary-secondary-arbiter (PSA) architecture or a sharded cluster with a three-member PSA shards.

Note

If you are using a deployment other than a 3-member PSA, you do not need to disable read concern majority.

With a three-member PSA architecture, the cache pressure will increase if any data bearing node is down. To prevent the storage cache pressure from immobilizing a deployment with a PSA architecture, you can disable read concern by setting either:

To check if read concern "majority" is disabled, You can run db.serverStatus() on the mongod instances and check the storageEngine.supportsCommittedReads field. If false, read concern "majority" is disabled.

Important

In general, avoid disabling "majority" read concern unless necessary. However, if you have a three-member replica set with a primary-secondary-arbiter (PSA) architecture or a sharded cluster with a three-member PSA shard, disable to prevent the storage cache pressure from immobilizing the deployment.

Note

Change Streams

Disabling "majority" read concern has no effect on change streams availability.

Note

Transactions

Disabling "majority" read concern affects support for transactions on sharded clusters. Specifically:

  • A transaction cannot use read concern "snapshot" if the transaction involves a shard that has disabled read concern "majority".

  • A transaction that writes to multiple shards errors if any of the transaction's read or write operations involves a shard that has disabled read concern "majority".

However, it does not affect transactions on replica sets. For transactions on replica sets, you can specify read concern "majority" (or "snapshot" or "local" ) for distributed transactions even if read concern "majority" is disabled.

Note

Rollback Considerations

Disabling "majority" read concern prevents collMod commands which modify an index from rolling back. If such an operation needs to be rolled back, you must resync the affected nodes with the primary node.

←  Read Concern "available"Read Concern "linearizable" →