Los Governor Limits en Salesforce están hechos para controlar el uso de los recursos compartidos en un ambiente multi-tenant. A continuación, veremos las consideraciones que debemos tener para no pasar estos límites y cómo poder monitorearlos en Salesforce.
Governor Limits en Salesforce
Los Governor Limits (Límites del Gobernador) nos ayudan a no monopolizar los recursos compartidos de Salesforce en un ambiente multi-tenant.
Salesforce es un ambiente multi-tenant, es decir, comparte los recursos de cómputo y hardware entre todos sus usuarios, no obstante, cada uno tiene su propio espacio llamado organización.
Con este concepto, Salesforce monitoriza el tiempo de computo CPU, la memoria utilizada y la cantidad de datos que gestionamos en una sentencia SOQL.
Estos recursos son monitorizados por transacción. Una transacción es un conjunto de procesos ejecutados y evaluados en una unidad simple. Además, en Salesforce, una transacción puede ejecutarse desde:
- Un Trigger.
- Una Clase de Apex.
- Anonymous Window (Consola Anónima en Developer Console)
- Web Services.
- Visualforce Pages.
- Componentes Lightning personalizados.
Límites de Sentencias DML
Únicamente pueden ejecutarse 150 sentencias DML por transacción. En la ejecución 151 ocurrirá una Excepción Límite. Una excepción límite (System.LimitException) no puede ser controlada por las sentencias try-catch de las excepciones convencionales.
Además, los cambios realizados, por la sentencia DML, no se llevarán a cabo y no se guardará ningún dato en la base de datos de Salesforce.
Para evitar los governor limits, debemos definir nuestras sentencias DML y SOQL fuera de los bucles (For, While, Do-While).
Además, para controlar la cantidad de DML ejecutadas, podemos utilizar los métodos de la clase Limit: Limit.getDMLRows() y Limit.getLimitDMLRows()
Por último, para gestionar grandes cantidades de datos, podemos utilizar Batch Apex.
Stack Depth
El Stack Depth está relacionado con la ejecución de Triggers en cadena. Por ejemplo, un trigger puede ejecutar una operación DML que ejecute a otro trigger y este, nuevamente, a otro trigger y así sucesivamente. Generando una recursividad de triggers en una transacción.
El Stack Depth puede tener un máximo de profundidad de 16 procesos en cadena. Cuando ocurra la iteración 17, ocurrirá una excepción límite. Además, se detendrá todo el proceso inmediatamente.
Heap Size
Un Heap Size está relacionado con la cantidad de memoria que consumimos por transacción. Por ejemplo, podemos ir guardando datos de un SOQL en una colección de datos como una lista. Cuando los datos van creciendo exponencialmente, podemos hablar de un uso indebido de memoria.
En Salesforce, los procesos asíncronos tienen un uso máximo de memoria de 12MB y un uso síncrono de 6MB por transacción.
Para prevenir el sobrepasar los límites de un Heap Size, podemos:
- Limpiar o eliminar los datos de una colección luego de utilizarlos.
- Utilizar variables transient en una Visualforce Page.
- Controlar el uso de memoria utilizando de los métodos de la clase Limit: Limit.getHeapSize() y Limit.getLimitHeapSize()
Más Información de Governor Limits de Salesforce
- Execution Governors and Limits – Apex Developer Guide
- Limits Class – Apex Reference Guide
- Run Within the Heap Size Limit – Salesforce Blog
- Excepciones de Apex en Salesforce – Snake on Code
Si quieres saber más sobre Apex, puedes visitar nuestro último post Interfaces en APex de Salesforce – Snake on Code
[…] quieres aprender más de Salesforce en Español, también puedes visitar nuestro post sobre Governor Limits haciendo clic […]
[…] Governor Limits en Salesforce […]