Governor Limits Reference
Essential limits for Salesforce data operations.
SOQL Limits
| Limit |
Synchronous |
Asynchronous |
| Total queries |
100 |
200 |
| Rows retrieved |
50,000 |
50,000 |
| QueryLocator rows |
N/A |
50,000,000 |
| Query timeout |
120 seconds |
120 seconds |
DML Limits
| Limit |
Synchronous |
Asynchronous |
| DML statements |
150 |
150 |
| Rows processed |
10,000 |
10,000 |
CPU and Memory
| Limit |
Synchronous |
Asynchronous |
| CPU time |
10,000 ms |
60,000 ms |
| Heap size |
6 MB |
12 MB |
Bulk API Limits
| Limit |
Value |
| Batches per 24 hours |
10,000 |
| Records per 24 hours |
10,000,000 |
| Max file size |
100 MB |
| Concurrent jobs |
100 |
Staying Within Limits
SOQL Best Practices
// BAD: Query in loop
for (Account acc : accounts) {
List<Contact> cons = [SELECT Id FROM Contact WHERE AccountId = :acc.Id]; // ❌
}
// GOOD: Single query with relationship
List<Account> accs = [
SELECT Id, (SELECT Id FROM Contacts)
FROM Account
WHERE Id IN :accountIds
]; // ✓
DML Best Practices
// BAD: DML in loop
for (Account acc : accounts) {
update acc; // ❌
}
// GOOD: Bulk DML
update accounts; // ✓
Monitoring Limits
System.debug('SOQL Queries: ' + Limits.getQueries() + '/' + Limits.getLimitQueries());
System.debug('DML Statements: ' + Limits.getDmlStatements() + '/' + Limits.getLimitDmlStatements());
System.debug('DML Rows: ' + Limits.getDmlRows() + '/' + Limits.getLimitDmlRows());
System.debug('CPU Time: ' + Limits.getCpuTime() + '/' + Limits.getLimitCpuTime());
System.debug('Heap Size: ' + Limits.getHeapSize() + '/' + Limits.getLimitHeapSize());