Hey friends,
The governor limits you'll hit most: 100 SOQL queries per synchronous transaction (200 async), 150 DML statements, 50,000 rows retrieved by SOQL, 10,000 rows processed by DML, and 10 seconds of CPU time (60 seconds async). Bulkify your code and you'll rarely get near any of them.
All numbers come from the Apex Developer Guide's Execution Governors and Limits page, Winter '27 version. PD1 asks how governor limits affect your design choices.

The core table.
Why limits exist
Salesforce is multitenant: many customers share the same servers. Limits stop one org's runaway code from slowing everyone else. I cover the basics in the free PD1 governor limits cheat sheet lesson.
Sync vs async, and what counts as async
- The guide's async column applies to Batch Apex and future methods. Queueable gets a mix, as in the enqueueJob and future rows.
- Scheduled Apex gets the synchronous limits.
- In Batch Apex, limits reset for every
executebatch. - More on choosing an async type in Asynchronous Apex explained.
The rest of the table
- SOSL: 2,000 records per query.
- Records from
Database.getQueryLocator: 10,000 (Batch Apex's QueryLocator instartis a separate, much higher limit). - Stack depth for recursive trigger firing: 16.
- Cumulative callout timeout: 120 seconds.
sendEmailcalls: 10.- Max execution time per transaction: 10 minutes.
EventBus.publishcalls for publish-immediately events: 150.
Two footnotes that trip people up: each parent-child relationship subquery counts as an extra query, and Approval.process and similar methods count as DML statements.
Cert Lab by Nick Frates
Practice governor-limit questions
The Platform Developer Cert Lab drills limits the way PD1 asks them: spot the query in the loop, count the DML, pick the fix.
Start the PD1 Cert Lab, $9.99 →How to stay under the limits
- No SOQL or DML inside loops. Collect Ids in a Set, query once, look up with a Map, save one List. See the collections cheat sheet.
- Bulkify triggers for 200 records at a time. My trigger best practices show the pattern.
- Query only the fields and rows you need. Filter in the WHERE clause, not in Apex.
- Move heavy work async for higher limits.
- Check usage with the
Limitsclass, likeLimits.getQueries(), and in debug logs.
Practice question
A trigger runs one SOQL query per record inside a for loop. A data load inserts 200 records at once. What happens?
Answer: 200 queries in one transaction exceeds the 100-query synchronous limit, so the whole operation fails with a limit exception. The fix: one query outside the loop.
Keep studying
Cert Lab by Nick Frates
Get the Platform Developer Cert Lab
Lessons, practice questions and flashcards for every PD1 exam section.
Start the PD1 Cert Lab, $9.99 →Hope this helps!
Best,
Nick


