Introduction
MongoDB sort exceeds memory limit when result set large and no supporting index. This guide provides step-by-step diagnosis and resolution.
Symptoms
Typical error output:
bash
Error: Sort operation used more than 33554432 bytes of RAM
Increase the internalQueryExecMaxBlockingSortBytes limit
Or add an index to support the sortCommon Causes
- 1.Sort operation on large result set without index
- 2.No supporting index for sort order
- 3.internalQueryExecMaxBlockingSortBytes too low
- 4.Query returning too many documents
Step-by-Step Fix
Step 1: Check Current State
javascript
db.collection.explain("executionStats").find().sort({field: 1})
db.collection.getIndexes()
db.serverStatus().metrics.memoryStep 2: Identify Root Cause
javascript
rs.status()
db.serverStatus()
db.currentOp()Step 3: Apply Primary Fix
```javascript // Create supporting index db.collection.createIndex({sortField: 1})
// Increase sort memory limit (temporary) db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: 67108864}) ```
Step 4: Apply Alternative Fix
```javascript // Alternative fix: Check configuration rs.conf() db.adminCommand({getCmdLineOpts: 1})
// Update settings db.adminCommand({setParameter: 1, parameter: value})
// Verify the fix db.serverStatus().metrics ```
Step 5: Verify the Fix
javascript
db.collection.explain("executionStats").find().sort({field: 1})
// Should use index scan, not in-memory sortCommon Pitfalls
- Not checking replica set status before operations
- Using unbounded queries on large collections
- Forgetting to create indexes for query patterns
- Ignoring memory limits in aggregation pipelines
Best Practices
- Monitor replication lag and oplog size
- Create indexes to support common queries
- Use covered queries to reduce document scans
- Implement retry logic for transient errors
Related Issues
- MongoDB Replica Set Election
- MongoDB Sharding Chunk Migration
- MongoDB Aggregation Pipeline Error
- MongoDB Connection Failed