Los límites del gobernador de Salesforce son cruciales para mantener la estabilidad y eficiencia de Salesforce. Dado que Salesforce (y Apex) se ejecutan en un entorno multiusuario con recursos compartidos, los límites del gobernador sirven para garantizar que ningún usuario consuma todos los recursos, manteniendo la plataforma justa y con capacidad de respuesta para todos.
Este artículo le ayudará a entender cuáles son esos límites y cómo trabajar dentro de ellos con eficacia.
1. ¿Qué es un regulador Salesforce?
Definición:
Un Salesforce Governor es un mecanismo del sistema Salesforce que impone límites específicos en el uso de recursos. Piense en él como un punto de control que garantiza una distribución justa de los recursos del sistema.
Papel:
Los gobernadores impiden que un único inquilino monopolice los recursos. Esto mantiene el entorno Salesforce estable y eficiente para todos los usuarios.
2. ¿Cuáles son los límites del regulador Salesforce?
SFDC Governor Limits son las restricciones específicas impuestas por Salesforce para mantener el rendimiento y la seguridad del sistema.
Considera los Límites del Gobernador en Salesforce como las normas de préstamo en una biblioteca. La biblioteca te permite tomar prestado un cierto número de libros (recursos) a la vez para asegurar que todo el mundo tenga acceso. Cada operación en Salesforce es como pedir prestado un libro. Hay límites en el número de libros (consultas, Sentencias DML) que puede pedir prestado para garantizar un uso justo y la disponibilidad de su
➡️ Tenga en cuenta que los límites del gobernador Salesforce no incluyen el almacenamiento.
Para más información sobre los límites de datos y almacenamiento del Salesforce, consulta nuestros otros artículos
Salesforce Datos: Reduzca costes y aumente la conformidad y Salesforce Límite de almacenamiento superado.
Los límites de llamadas a la API también están fuera del alcance de este artículo, pero tenga en cuenta que existe un límite diario de llamadas a la API. El límite varía en función del tipo de organización y licencia. Puede comprobar los límites de la API Salesforce (mediante programación) utilizando la función Clase OrgLimits. Más información Límites y asignaciones de solicitudes de API artículo.
3. Tipos comunes de límites del regulador Salesforce
Límites de consulta SOQL:
- El error "Demasiadas consultas SOQL" se produce cuando se ejecuta un número superior al máximo de consultas SOQL en una única transacción. En una consulta SOQL con subconsultas padre-hijocada relación padre-hijo cuenta como una consulta adicional.
- Máximo de consultas: 100 (síncrono), 200 (asíncrono).
Resultado Límites de fila:
- El error "Demasiadas filas de consulta" se produce cuando las consultas de una misma transacción devuelven un número de filas superior al permitido.
- Máximo de filas de consulta: 50 000
Límites de las sentencias DML:
- El error "Demasiadas sentencias DML" se produce cuando se ejecuta un número de operaciones DML superior al permitido dentro de una misma transacción.
- Máximo de operaciones DML: 150 (síncrono), 300 (asíncrono).
Límites de tamaño del montón:
- El error "Apex heap size too large" se produce cuando se almacenan demasiados datos en memoria durante el procesamiento.
- Tamaño máximo del montón: 6 MB (síncrono), 12 MB (asíncrono).
Límites de tiempo de la CPU:
- El error "Apex CPU time limit exceeded" significa que su transacción tardó demasiado, excediendo el tiempo máximo de CPU.
- Tiempo máximo de CPU: 10.000 ms (síncrono), 60.000 ms (asíncrono).
Para otros tipos de límites del regulador, consulte el Guía del desarrollador de Apex.
4. Superación de los límites del Gobernador: Ejemplo y solución
Un problema común al que se enfrentan los desarrolladores es la excepción de límite de gobernador "101 consultas SOQL demasiado numerosas". Este error se produce cuando se ejecutan más de 100 consultas SOQL en una única transacción (en modo síncrono).
Por ejemplo: Considere el siguiente fragmento de código que intenta obtener los detalles de la cuenta dentro de un bucle:
public class Procesador de cuentas {
public void procesarCuentas() {
List cuentas = [SELECT Id, Nombre FROM Cuenta];
para (Cuenta acc : cuentas) {
// Esta consulta dentro de un bucle puede exceder fácilmente el límite SOQL si hay muchas cuentas
List contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :acc.Id];
// Contactos de proceso
}
}
}
Este código alcanzará rápidamente el límite de 101 consultas SOQL si el número de cuentas supera las 100.
Solución: Un enfoque mejor sería masificar la consulta:
public class Procesador de cuentas {
public void procesarCuentas() {
List cuentas = [SELECT Id, Nombre FROM Cuenta];
Set accountIds = new Set();
para (Cuenta acc : cuentas) {
accountIds.add(acc.Id);
}
List contacts = [SELECT Id, Name, AccountId FROM Contact WHERE AccountId IN :accountIds];
Map<Id, List> accountContactsMap = new Map<Id, List>();
para (Contacto con : contactos) {
if (!accountContactsMap.containsKey(con.AccountId)) {
accountContactsMap.put(con.AccountId, new List());
}
accountContactsMap.get(con.AccountId).add(con);
}
para (Cuenta acc : cuentas) {
List acctContacts = accountContactsMap.get(acc.Id);
// Contactos de proceso
}
}
}
Este código refactorizado puede ser un poco más largo, pero recupera todos los contactos relacionados en una sola consulta, evitando el límite SOQL.
La Excepción de Límite de Gobernador "101 Demasiadas Consultas SOQL" también es común al subir archivos, cuando se utiliza una consulta para subir cada archivo.
5. Cómo supervisar los límites del regulador Salesforce
Monitorizar el uso de tus recursos es esencial para asegurarte de que no alcanzas estos límites. Para ello, utiliza la consola de desarrollo Salesforce.
Si ves uno de los errores mencionados anteriormente, los registros de depuración pueden ayudarte. Salesforce también proporciona un Límites clase y métodos integrados como
- getQueries();
- getDML();
Devuelve el número de registros que se han procesado con cualquier sentencia que cuente contra los límites DML
Las causas más comunes de los errores de límite del limitador son:
- Realizar consultas y operaciones dentro de bucles: Evite las operaciones DML y las consultas dentro de bucles.
- Tratamiento inadecuado de errores: Aplique un tratamiento adecuado de las excepciones para evitar errores de límite inesperados.
7. Mejores prácticas para gestionar los límites del gobernador
Para mantenerte dentro de los límites, sigue estas buenas prácticas:
Consultas eficientes:
- Intente recuperar todos los datos necesarios en una sola consulta y no en un bucle. Si es necesario un bucle, utilice los bucles for de SOQL. Si su problema es que el conjunto de resultados tiene demasiadas filas, utilice Limit y Filter en sus consultas.
Procesamiento a granel:
- Utilizar métodos de procesamiento masivo y patrones de diseño. Combinar registros en colecciones y realizar operaciones DML masivas.
Uso de las colecciones:
- Minimice las operaciones DML utilizando colecciones.
Optimización del código:
- Escriba código eficiente y optimizado. Evita bucles innecesarios y utiliza algoritmos eficientes.
Regulación de las transacciones:
- Opte por el procesamiento asíncrono para gestionar operaciones a gran escala.
8. Estrategias avanzadas para grandes volúmenes de datos
La gestión de grandes volúmenes de datos requiere estrategias como el procesamiento asíncrono, el procesamiento por lotes y la puesta en cola de los trabajos.
Utilice @métodos futuros, Lote Apex...y... Apex en cola para manejar operaciones extensas sin sobrepasar los distintos límites.
9. Límites del Gobernador En breve
Los límites del gobernador garantizan un uso justo de los recursos en la arquitectura multiusuario de Salesforce. Si comprende qué son estos límites y cómo funcionan, podrá evitar errores y optimizar el rendimiento de su aplicación.
Hemos discutido tipos clave de Límites de Gobernador como límites de consultas SOQL, límites de sentencias DML, tamaño de heap, y límites de tiempo de CPU. También hemos mostrado cómo monitorizar estos límites usando la Consola de Desarrollador y la clase OrgLimits. Es importante seguir las mejores prácticas como consultas eficientes, procesamiento masivo y procesamiento asíncrono para mantenerse dentro de estos límites.
Por ejemplo, desglosar grandes transacciones de datos mediante Batch Apex o Queueable Apex puede ayudar a gestionar y optimizar el uso de recursos. Del mismo modo, si se comprenden los errores como la ejecución de consultas u operaciones DML dentro de bucles, se pueden evitar errores comunes.
Recuerde que un código eficiente y una gestión adecuada de los recursos no sólo mitigan los riesgos de sobrepasar los límites, sino que también garantizan el buen funcionamiento de todos los usuarios que comparten el entorno Salesforce.
10. Preguntas más frecuentes (FAQ)
- ¿Cuáles son los límites del regulador Salesforce?
- Los Límites del Gobernador son restricciones que el Salesforce impone para gestionar los recursos del sistema.
- ¿Por qué Salesforce impone límites al gobernador?
- Garantizan un uso equitativo de los recursos y mantienen el rendimiento del sistema.
- ¿Cómo puedo comprobar si me estoy acercando a los límites del Gobernador?
- Utilice la consola de desarrollo Salesforce y herramientas como el Límites para controlar su uso.
- ¿Qué ocurre si supero el límite del Gobernador?
- Superar un límite provoca errores y transacciones fallidas.
- ¿Puedo evitar los límites del regulador Salesforce?
- Los límites se aplican estrictamente, pero se puede cambiar el código para que funcione dentro de los límites existentes, como se ve en esto ejemplo.
Sobre el autor
Por Ana Netotechnical asesor en Connecting Software.
"Soy ingeniero informático desde 1997, con una afición más reciente por escribir y hablar en público. ¿Tiene alguna pregunta o comentario sobre este artículo? Me encantaría conocer tu opinión, ¡deja un comentario a continuación!"