Os limites do governador do Salesforce são cruciais para manter a estabilidade e a eficiência do Salesforce. Dado que o Salesforce (e o Apex) funcionam num ambiente multitenant com recursos partilhados, os limites do governador servem para garantir que nenhum utilizador consome todos os recursos, mantendo a plataforma justa e com capacidade de resposta para todos.
Este artigo ajudá-lo-á a compreender quais são esses limites e como trabalhar eficazmente dentro deles.
1. O que é um regulador Salesforce?
Definição:
Um Governor do Salesforce é um mecanismo do sistema dentro do Salesforce que impõe limites específicos ao uso de recursos. Pense nele como um ponto de controlo que assegura uma distribuição justa dos recursos do sistema.
Papel:
Os governadores impedem que um único locatário monopolize os recursos. Isto mantém o ambiente Salesforce estável e eficiente para todos os utilizadores.
2. Quais são os limites do regulador Salesforce?
Os SFDC Governor Limits são as restrições específicas impostas pelo Salesforce para manter o desempenho e a segurança do sistema.
Considere os Limites do Governador no Salesforce como as regras de empréstimo numa biblioteca. A biblioteca permite-lhe pedir emprestado um determinado número de livros (recursos) de cada vez para garantir que todos têm acesso. Cada operação no Salesforce é como pedir um livro emprestado. Há limites para o número de livros (consultas, Declarações DML) que pode pedir emprestado para garantir uma utilização justa e a disponibilidade dos seus
➡️ Tenha em atenção que os limites do regulador Salesforce não incluem o armazenamento.
Para obter informações sobre os limites de armazenamento e dados do Salesforce, consulte os nossos outros artigos
Dados Salesforce: Reduzir custos e aumentar a conformidade e Salesforce Limite de armazenamento excedido.
Os limites de chamadas à API também estão fora do âmbito deste artigo, mas tenha em atenção que existe um limite diário de chamadas à API. O limite varia de acordo com o tipo de organização e a licença. É possível verificar os limites da API do Salesforce (programaticamente) usando o comando Classe OrgLimits. Mais informações sobre o Limites e atribuições de pedidos de API artigo.
3. Tipos comuns de limites do regulador Salesforce
Limites de consulta SOQL:
- O erro "Demasiadas consultas SOQL" ocorre quando são executadas mais do que o número máximo de consultas SOQL numa única transação. Em uma consulta SOQL com subconsultas pai-filhocada relação pai-filho conta como uma consulta extra.
- Máximo de consultas: 100 (síncronas), 200 (assíncronas).
Resultado Limites de linhas:
- O erro "Demasiadas linhas de consulta" ocorre quando as consultas numa única transação devolvem mais do que o número permitido de linhas.
- Máximo de linhas de consulta: 50 000
Limites de instruções DML:
- O erro "Too many DML statements" ocorre quando são executadas mais operações DML do que o número permitido numa única transação.
- Máximo de operações DML: 150 (síncronas), 300 (assíncronas).
Limites de tamanho de pilha:
- O erro "Apex heap size too large" ocorre quando são armazenados demasiados dados na memória durante o processamento.
- Tamanho máximo do heap: 6 MB (síncrono), 12 MB (assíncrono).
Limites de tempo da CPU:
- O erro "Apex CPU time limit exceeded" significa que a sua transação demorou demasiado tempo, excedendo o tempo máximo da CPU.
- Tempo máximo da CPU: 10.000 ms (síncrono), 60.000 ms (assíncrono).
Para outros tipos de limites do governador, verificar a Guia do programador Apex.
4. Exceder os limites do governador: Um exemplo e uma solução
Um problema comum que os programadores enfrentam é a exceção de limite de governador "101 Too Many SOQL Queries". Esse erro ocorre quando mais de 100 consultas SOQL são executadas em uma única transação (no modo síncrono).
Exemplo: Considere o seguinte trecho de código que tenta obter detalhes da conta dentro de um loop:
public class AccountProcessor {
public void processAccounts() {
List accounts = [SELECT Id, Name FROM Account];
para (Conta acc : contas) {
// Esta consulta dentro de um loop pode facilmente exceder o limite SOQL se houver muitas contas
List contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :acc.Id];
// Contactos do processo
}
}
}
Este código atingirá rapidamente o limite de 101 consultas SOQL se o número de contas for superior a 100.
Solução: Uma melhor abordagem seria a de aumentar o volume da consulta:
public class AccountProcessor {
public void processAccounts() {
List accounts = [SELECT Id, Name FROM Account];
Set accountIds = new Set();
para (Conta acc : contas) {
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) {
se (!accountContactsMap.containsKey(con.AccountId)) {
accountContactsMap.put(con.AccountId, new List());
}
accountContactsMap.get(con.AccountId).add(con);
}
para (Conta acc : contas) {
List acctContacts = accountContactsMap.get(acc.Id);
// Contactos do processo
}
}
}
Este código refatorado pode ser um pouco mais longo, mas busca todos os contatos relacionados em uma única consulta, evitando o limite SOQL.
A exceção de limite de governador "101 Too Many SOQL Queries" também é comum no carregamento de ficheiros, quando se utiliza uma consulta para carregar cada ficheiro.
5. Como monitorizar os limites do regulador Salesforce
A monitorização da utilização dos recursos é essencial para garantir que não se atingem estes limites. Para isso, deve utilizar a consola de desenvolvimento Salesforce.
Se ocorrer um dos erros mencionados anteriormente, os registos de depuração podem ajudar. O Salesforce também fornece um Limites classe e métodos incorporados como
- getQueries();
- getDML();
Devolve o número de registos que foram processados com qualquer instrução que conte para os limites DML
As causas mais comuns dos erros de limite do regulador são
- Ter consultas e operações dentro de loops: Evite operações DML e consultas dentro de loops.
- Tratamento incorreto de erros: Implementar um tratamento adequado das excepções para evitar erros de limite inesperados.
7. Melhores práticas para gerir os limites do governador
Para se manter dentro dos limites, siga estas boas práticas:
Consulta eficiente:
- Tente obter todos os dados necessários numa única consulta e não num ciclo. Se for necessário um loop, utilize os loops for do SOQL. Se o seu problema for o facto de o conjunto de resultados ter demasiadas linhas, utilize Limite e Filtro nas suas consultas.
Processamento a granel:
- Utilizar métodos de processamento em massa e padrões de conceção. Combinar registos em colecções e executar operações DML em massa.
Utilização de colecções:
- Minimizar as operações DML através da utilização de colecções.
Otimização do código:
- Escreva código eficiente e optimizado. Evitar loops desnecessários e utilizar algoritmos eficientes.
Transacções de governo:
- Optar pelo processamento assíncrono para gerir operações em grande escala.
8. Estratégias avançadas para grandes volumes de dados
A gestão de grandes volumes de dados requer estratégias como o processamento assíncrono, o processamento em lote e o enfileiramento dos trabalhos.
Utilização Métodos @futuros, Batch Apexe Ápice enfileirável para efetuar operações extensas sem ultrapassar os diferentes limites.
9. Limites do governador Em resumo
Os limites do governador garantem o uso justo dos recursos na arquitetura multitenant do Salesforce. Ao compreender o que são esses limites e como eles funcionam, é possível evitar erros e otimizar o desempenho do seu aplicativo.
Discutimos os principais tipos de limites do governador, como limites de consulta SOQL, limites de instrução DML, tamanho da pilha e limites de tempo da CPU. Também mostramos como monitorar esses limites usando o Console do desenvolvedor e a classe OrgLimits. É importante seguir as práticas recomendadas, como consultas eficientes, processamento em massa e processamento assíncrono, para permanecer dentro desses limites.
Por exemplo, a divisão de grandes transacções de dados utilizando o Batch Apex ou o Queueable Apex pode ajudar a gerir e otimizar a utilização de recursos. Da mesma forma, a compreensão de armadilhas como a execução de consultas ou operações DML em loops pode evitar erros comuns.
Lembre-se de que um código eficiente e uma gestão adequada dos recursos não só reduzem os riscos de atingir os limites, como também garantem um funcionamento sem problemas para todos os utilizadores que partilham o ambiente Salesforce.
10. Perguntas frequentes (FAQ)
- Quais são os limites do regulador Salesforce?
- Governor Limits são restrições que o Salesforce impõe para gerenciar os recursos do sistema.
- Porque é que o Salesforce impõe os limites do governador?
- Asseguram uma utilização justa dos recursos e mantêm o desempenho do sistema.
- Como posso verificar se estou a aproximar-me dos limites do governador?
- Use o Salesforce Developer Console e ferramentas como o Limites para monitorizar a utilização.
- O que acontece se eu exceder um limite de governador?
- A ultrapassagem de um limite resulta em erros e transacções falhadas.
- Posso contornar os limites do regulador Salesforce?
- Os limites são rigorosamente aplicados, mas pode alterar o seu código para trabalhar dentro dos limites existentes, como se pode ver neste exemplo.
Sobre o Autor
Por Ana Neto, technical conselheiro no Connecting Software.
"Sou engenheiro de software desde 1997, com uma paixão mais recente pela escrita e por falar em público. Tem alguma pergunta ou comentário sobre este artigo? Gostaria muito de receber o seu feedback, deixe um comentário abaixo!"