# Governor limits and asynchronous Apex

*Platform Developer Study Guide · Process Automation and Logic · Last updated October 15, 2026 · https://www.certifyforce.com/study-guide/platform-developer/process-automation-and-logic/governor-limits-and-asynchronous-apex*

The per-transaction governor limits the exam quotes, how to read them with the Limits class, which limits rise in asynchronous Apex, and when to reach for future methods, Queueable, Batch or Scheduled Apex.

- Certification: Salesforce Platform Developer
- Exam section: Process Automation and Logic
- Study guide: https://www.certifyforce.com/study-guide/platform-developer

**Official exam objective:**

> Given a scenario, understand governor limits and their implications on Apex transactions.

## What the exam expects

- Quote the per-transaction limits for SOQL queries, query rows, DML statements, DML rows, heap and CPU time, and say which differ in asynchronous Apex.
- Predict whether a scenario (a data load, a trigger, a nightly job) exceeds a limit, given that limits are counted per transaction.
- Read limit consumption at run time with the Limits class.
- Fix limit errors in code: SOQL for loops for heap, maps instead of nested loops for CPU, Batch Apex for volume.
- Choose between future methods, Queueable, Batch and Scheduled Apex, and know each one's limits.

Key terms: **governor limit** (a per-transaction ceiling the runtime enforces), **transaction** (the unit limits are counted in), **asynchronous Apex** (code queued to run later in its own transaction), **scope** (the records one Batch Apex `execute()` receives).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| SOQL queries | 100 synchronous, 200 asynchronous | [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm) |
| DML | 150 statements and 10,000 rows, both contexts | [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm) |
| Heap and CPU | 6 MB and 10,000 ms synchronous; 12 MB and 60,000 ms asynchronous | [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm) |
| Limit exceptions | Cannot be handled | [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm) |
| Scheduled Apex limits | Synchronous limits apply | [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm) |
| Limits class | `getX()` returns used, `getLimitX()` returns the maximum | [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm) |
| Future method parameters | Primitives or collections of primitives only | [Future Methods](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_invoking_future_methods.htm) |
| Queueable chaining | One child job per executing job | [Optimize Queueable Apex](https://trailhead.salesforce.com/content/learn/modules/asynchronous_apex/async_apex_queueable) |
| Batch scope | Default 200; maximum 2,000 with a QueryLocator | [Use Batch Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_batch_interface.htm) |
| Batch transactions | Each execute() resets limits; earlier batches are not rolled back | [Use Batch Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_batch_interface.htm) |
| Scheduled jobs | 100 at one time | [Apex Scheduler](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm) |

## Check yourself

- Why doesn't moving a per-record query into a helper class fix "Too many SOQL queries: 101"?
- Why can a scheduled job still hit the 100-query limit?
- Why can't a future method accept sObjects?
- Which two Limits methods tell code how many queries are left?

## Sources

- [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm)
- [Limits Class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_limits.htm)
- [Asynchronous Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_async_overview.htm)
- [Future Methods](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_invoking_future_methods.htm)
- [Queueable Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_queueing_jobs.htm)
- [Use Batch Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_batch_interface.htm)
- [Apex Scheduler](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm)
- [Working with Very Large SOQL Queries](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_SOQL_VLSQ.htm)
- [Triggers](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers.htm)
- [Trigger Context Variables](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_context_variables.htm)
- [Optimize Queueable Apex](https://trailhead.salesforce.com/content/learn/modules/asynchronous_apex/async_apex_queueable)
- [Manipulate Records with DML](https://trailhead.salesforce.com/content/learn/modules/apex_database/apex_database_dml)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 11 linked practice questions, and unlimited timed mock exams are included with the Platform Developer pack (USD $19): https://www.certifyforce.com/practice-exams
