# 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 ```apex // BAD: Query in loop for (Account acc : accounts) { List cons = [SELECT Id FROM Contact WHERE AccountId = :acc.Id]; // ❌ } // GOOD: Single query with relationship List accs = [ SELECT Id, (SELECT Id FROM Contacts) FROM Account WHERE Id IN :accountIds ]; // ✓ ``` ### DML Best Practices ```apex // BAD: DML in loop for (Account acc : accounts) { update acc; // ❌ } // GOOD: Bulk DML update accounts; // ✓ ``` ## Monitoring Limits ```apex 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()); ```