Salesforce Governor Limits

Governor limits in Salesforce are used to ensure the effective use of resources on the Force.com multi-tenant platform. In order to execute the code efficiently, Salesforce.com sets some limits.

Before continuing, let’s take a look at what you will learn in this tutorial on Governor Limits in Salesforce:

Visit our Salesforce Community to get answers to all your queries!

What are Governor Limits?

To ensure that no one acquires resources from others, Force.com sets many restrictions that limit normal code execution. Salesforce has to do this because of its multi-tenant architecture, where all organizations and customers share a single resource. If one of the governor limits is not met, an error will be raised and the program will stop or halt. Therefore, it is important to ensure that our code is scalable and does not violate governor limits. These limits are called the single transaction basis, a single trigger execution.

Types of Governor Limits in Salesforce

  • Per-transaction Certified Managed Package Limits
  • Static Apex Limits
  • Per-transaction Apex Limits
  • Lightning Platform Apex Limits
  • Size-specific Apex Limits

Interested in learning Salesforce? Enroll in our Salesforce Training now!

Per-transaction Certified Managed Package Limits

Certified managed packages are managed packages that have passed AppExchange security checks for most transaction limits. Certified managed packages are developed by Salesforce ISV partners and installed in our org from AppExchange under a unique namespace.

With this governor limit, there is no limit to the number of certified namespaces that can be accessed through a single transaction. However, the prerequisite is that the number of operations that can be performed in a single namespace does not exceed the per-transaction limits. In addition, the total number of operations that can be performed in any transaction across the namespace is limited. The total limit for each namespace is 11 times. Shared limits on all namespaces are not affected by collective limits, such as a limit on maximum CPU time.

DescriptionCumulative Cross-namespace Limits
The total number of SOQL queries issued1,100
The total number of records retrieved by Database.getQueryLocator110,000
The total number of SOSL queries issued220
The total number of DML statements issued1,650
The total number of callouts (either HTTP requests or Web services calls) in a transaction1,100
The total number of sendEmail methods allowed110

All transaction limits count individually for certified managed packages expect:

  • Maximum CPU time
  • Total heap size
  • Maximum number of unique namespaces
  • Maximum transaction execution time

Each of these limits applies to all transactions, even as the number of certified managed packages running in the same transaction. If we install an AppExchange package created by an uncertified Salesforce ISV partner, the code for that particular package will not have its own governor limits. All resources used by the package are counted toward the total governor limit of the org. All collection resource messages and warning messages are also generated based on the corresponding package namespace.

Static Apex Limits

So far, we know that there are different governor limits for each description we give in Apex. There are more governor limits for Static Apex, i.e., for different kinds of callouts, queries, loops, records, and batch sizes, along with different transactions. Let’s look at these limits individually:

DescriptionLimits
The default timeout of callouts (either HTTP requests or Web services calls) in a transaction10 seconds
The maximum size of the callout request or response (either HTTP request or Web services call)6 MB for synchronous Apex or 12 MB for asynchronous Apex
The maximum SOQL query runtime before Salesforce cancels the transaction120 seconds
The maximum number of class and trigger code units in the deployment of Apex5,000
Apex trigger batch size200
For loop list batch size200
The maximum number of records that are returned for a Batch Apex query in Database.QueryLocator50 million

Per-transaction Apex Limits

Per-transaction Apex Limits are used for counting each Apex transaction. When we talk about Batch Apex, these specific limits in the execution method for executing each batch of records will be reset. The following table summarizes the limits for the synchronous and asynchronous Apex:

DescriptionSynchronous LimitsAsynchronous Limits
The total number of SOQL queries issued100200
The total number of records retrieved by SOQL queries50,000
The total number of records retrieved by Database.getQueryLocator10,000
The total number of SOSL queries issued20
The total number of records retrieved by a single SOSL query20,000
The total number of DML statements issued150
The total number of records processed as a result of DML statements, Approval.process, or database.emptyRecycleBin10,000
The total stack depth for any Apex invocation that recursively fires triggers with insert, update, or delete statements16
The total number of callouts (either HTTP requests or Web services calls) in a transaction100
The maximum cumulative timeout for all callouts (either HTTP requests or Web services calls) in a transaction120 seconds
The maximum number of methods with the future annotation allowed per Apex invocation500 in batch and future contexts and 1 in the queueable context
The maximum number of Apex jobs added to the queue with System.enqueueJob501
The total number of sendEmail methods allowed10
The total heap size6MB12MB
The maximum CPU time on Salesforce servers10,000 milliseconds60,000 milliseconds
The maximum execution time for each Apex transaction10  minutes
The maximum number of push notification method calls allowed per Apex transaction10
The maximum number of push notifications that can be sent through each push notification method call2,000

Lightning Platform Apex Limits

The following limits do not apply to Apex transactions and are therefore managed by the Lightning platform.

DescriptionLimit
The maximum number of asynchronous Apex method executions (Batch Apex, future methods, Queueable Apex, and Scheduled Apex) per 24-hour periodEither 250,000 or the number of user licenses in the org multiplied by 200, whichever is greater
The number of synchronous concurrent transactions for long-running transactions, which last longer than 5 seconds for each org.10
The maximum number of Apex classes scheduled concurrently100. In Developer Edition org, the limit is 5
The maximum number of Batch Apex jobs in the Apex flex queue that is in the Holding status100
The maximum number of Batch Apex jobs queued or active concurrently5
The maximum number of Batch Apex job start method concurrent executions1
The maximum number of batch jobs that can be submitted in a running test5
The maximum number of test classes that can be queued in a 24-hour period (in Production org other than Developer Edition)Either 500 or 10 multiplied by the number of test classes in the org, whichever is greater
The maximum number of test classes that can be queued in a 24-hour period (Sandbox and Developer Edition org)Either 500 or 20 multiplied by the number of test classes in the org, whichever is greater
The maximum number of query cursors open concurrently per user50
The maximum number of query cursors open concurrently per user for the Batch Apex start method15
The maximum number of query cursors open concurrently per user for Batch Apex execute and finish methods5

Size-specific Apex Limits

Size-dependent Apex Limits are specifically designed to ensure that there are no oversized items in classes, triggers, org, etc.

The following table gives the limits for each of these:

DescriptionLimit
The maximum number of characters in a class1 million
The maximum number of characters in a trigger1 million
The maximum amount of code used by all Apex codes in org16 MB
The method size limit 265,535 bytecode instructions in a compiled form

Advantages of Governor Limits in Salesforce

  • Governor limits in Salesforce prevent other org from using and hence executing lengthy code, which can take up a lot of space in the memory and even the entire cloud CPU.
  • Apex has completely different or unique coding limits.
  • These governor limits help us stay in the right space of coding with Apex.

Interested in learning Salesforce? Check out the Salesforce Training in Bangalore!

How can you avoid Salesforce Governor Limits?

As a developer, we need to ensure that our code is scalable and does not exceed the governor limits. But how? Follow this process to meet the governor limits in Salesforce:

  • Do not have DML statements or SOQL queries in our FOR loop
  • Try not to use SOQL or DML operations in the loop
  • Try to bulkify the code and helper methods
  • Query large data sets
  • Use Batch Apex if we want to process 50,000 records
  • Streamline various triggers on the same object
  • Use streamlining queries and collections for loops

I hope you now understand how governor limits work in Apex and how to avoid them.

Prepare yourself for the industry by going through these Top Salesforce Interview Questions and Answers

Recommended Videos

Leave a Reply

Your email address will not be published. Required fields are marked *