Salesforce gouverneur limieten zijn cruciaal voor het handhaven van Salesforce stabiliteit en efficiëntie. Gegeven het feit dat Salesforce (en Apex) draaien in een multitenant omgeving met gedeelde bronnen, dienen governor limieten om ervoor te zorgen dat geen enkele gebruiker alle bronnen gebruikt, waardoor het platform eerlijk en responsief blijft voor iedereen.
Dit artikel helpt je te begrijpen wat deze grenzen zijn en hoe je er effectief binnen kunt werken.
1. Wat is een Salesforce Gouverneur?
Definitie:
Een Salesforce Governor is een systeemmechanisme binnen Salesforce dat specifieke limieten op het gebruik van bronnen afdwingt. Zie het als een controlepost die zorgt voor een eerlijke verdeling van systeembronnen.
Rol:
Governors voorkomen dat een enkele tenant bronnen monopoliseert. Dit houdt de Salesforce omgeving stabiel en efficiënt voor alle gebruikers.
2. Wat zijn de limieten van de Salesforce Gouverneur?
SFDC Governor Limits zijn de specifieke beperkingen die worden afgedwongen door Salesforce om de prestaties en beveiliging van het systeem te handhaven.
Beschouw Gouverneurslimieten in Salesforce als de leenregels in een bibliotheek. De bibliotheek staat toe dat je een bepaald aantal boeken (bronnen) per keer leent om er zeker van te zijn dat iedereen toegang heeft. Elke bewerking in Salesforce is als het lenen van een boek. Er zijn grenzen aan het aantal boeken (vragen, DML-opdrachten) die je kunt lenen om eerlijk gebruik en beschikbaarheid van zijn
➡️ Houd er rekening mee dat Salesforce gouverneurslimieten exclusief opslag zijn.
Bekijk onze andere artikelen voor informatie over Salesforce gegevens- en opslaglimieten
Salesforce Gegevens: Kosten besparen en compliance verbeteren en Salesforce Opslaglimiet overschreden.
API oproeplimieten vallen ook buiten het bereik van dit artikel, maar wees je ervan bewust dat er een dagelijkse API oproeplimiet bestaat. De limiet varieert op basis van het type organisatie en de licentie. Je kunt de Salesforce API limieten (programmatisch) controleren met behulp van de Klasse OrgLimits. Meer informatie over de API verzoeklimieten en toewijzingen artikel.
3. Gebruikelijke types van Salesforce Gouverneursbegrenzingen
SOQL-querybeperkingen:
- De fout "Te veel SOQL-query's" treedt op als er meer dan het maximale aantal SOQL-query's wordt uitgevoerd in een enkele transactie. In een SOQL query met ouder-kind subqueriesElke ouder-kind relatie telt als een extra query.
- Maximale zoekopdrachten: 100 (synchroon), 200 (asynchroon).
Resultaat Rij Limieten:
- De fout "Too many Query rows" treedt op wanneer de query's in een enkele transactie meer dan het toegestane aantal rijen opleveren.
- Maximale Query rijen: 50 000
DML-opgavebeperkingen:
- De fout "Too many DML statements" treedt op wanneer er meer dan het toegestane aantal DML-bewerkingen wordt uitgevoerd binnen één transactie.
- Maximale DML-bewerkingen: 150 (synchroon), 300 (asynchroon).
Heap-groottelimieten:
- De fout "Apex heap size too large" treedt op wanneer er te veel gegevens in het geheugen worden opgeslagen tijdens het verwerken.
- Maximale heapgrootte: 6 MB (synchroon), 12 MB (asynchroon).
CPU-tijdlimieten:
- De fout "Apex CPU time limit exceeded" betekent dat je transactie te lang duurde en de maximale CPU-tijd overschreed.
- Maximale CPU-tijd: 10.000 ms (synchroon), 60.000 ms (asynchroon).
Controleer voor andere soorten gouverneurslimieten de Apex Gids voor Ontwikkelaars.
4. Overschrijding van de grenzen van de gouverneur: Een voorbeeld en oplossing
Een veel voorkomend probleem voor ontwikkelaars is de "101 Too Many SOQL Queries" gouverneurslimietuitzondering. Deze fout treedt op wanneer er meer dan 100 SOQL queries worden uitgevoerd in een enkele transactie (in synchrone modus).
Voorbeeld: Bekijk het volgende codefragment dat accountgegevens probeert op te halen in een lus:
openbare klasse AccountProcessor {
openbare void processAccounts() {
List accounts = [SELECT Id, Name FROM Account];
voor (Rekening acc : rekeningen) {
// Deze query binnen een lus kan gemakkelijk de SOQL-limiet overschrijden als er veel accounts zijn
Lijst contacten = [SELECT Id, Naam FROM Contact WHERE AccountId = :acc.Id];
// Contacten verwerken
}
}
}
Deze code zal snel de limiet van 101 SOQL-query's bereiken als het aantal accounts meer dan 100 is.
Oplossing: Een betere aanpak zou zijn om de query in bulk uit te voeren:
openbare klasse AccountProcessor {
openbare void processAccounts() {
List accounts = [SELECT Id, Name FROM Account];
Set accountIds = nieuwe Set();
voor (Rekening acc : rekeningen) {
accountIds.add(acc.Id);
}
Lijst contacten = [SELECT Id, Naam, AccountId FROM Contact WHERE AccountId IN :accountIds];
Map<Id, List> accountContactsMap = nieuwe Map<Id, List>();
for (Contact con : contacten) {
Als (!accountContactsMap.containsKey(con.AccountId)) {
accountContactsMap.put(con.AccountId, nieuwe Lijst());
}
accountContactsMap.get(con.AccountId).add(con);
}
voor (Rekening acc : rekeningen) {
Lijst acctContacten = accountContactsMap.get(acc.Id);
// Contacten verwerken
}
}
}
Deze gerefactureerde code is misschien iets langer, maar het haalt alle gerelateerde contactpersonen op in een enkele query, waardoor de SOQL-limiet wordt vermeden.
De "101 Too Many SOQL Queries" Governor Limit Exception komt ook vaak voor bij het uploaden van bestanden, wanneer je een query gebruikt om elk bestand te uploaden.
5. Hoe de limieten van de Salesforce Gouverneur bewaken
Het monitoren van je brongebruik is essentieel om ervoor te zorgen dat je niet tegen deze limieten aanloopt. Hiervoor moet je de Salesforce Developer Console gebruiken.
Als je een van de eerder genoemde fouten ziet, kunnen de debuglogs helpen. Salesforce biedt ook een Grenzen klasse en ingebouwde methoden zoals
- getQueries();
- getDML();
Geeft als resultaat het aantal records dat is verwerkt met een instructie die meetelt voor DML-limieten
De meest voorkomende oorzaken voor fouten in de limiet van de gouverneur zijn:
- Query's en bewerkingen binnen lussen: Vermijd DML-bewerkingen en query's in lussen.
- Onjuiste foutafhandeling: Implementeer goede uitzonderingsafhandeling om onverwachte limietfouten te voorkomen.
7. Beste praktijken voor het beheer van gouverneurslimieten
Volg deze best practices om binnen de limieten te blijven:
Efficiënt zoeken:
- Probeer alle benodigde gegevens in een enkele query op te halen in plaats van in een lus. Als een lus nodig is, gebruik dan de for-lussen van SOQL. Als het probleem is dat de resultaatverzameling te veel rijen heeft, gebruik dan Limit en Filter in je query's.
Bulkverwerking:
- Methoden en ontwerppatronen voor bulkverwerking gebruiken. Records combineren in verzamelingen en bulk DML-bewerkingen uitvoeren.
Gebruik van collecties:
- Minimaliseer DML-bewerkingen door collecties te gebruiken.
Codeoptimalisatie:
- Schrijf efficiënte, geoptimaliseerde code. Vermijd onnodige lussen en gebruik efficiënte algoritmen.
Regerende transacties:
- Kies voor asynchrone verwerking om grootschalige bewerkingen te beheren.
8. Geavanceerde strategieën voor grote gegevensvolumes
Het beheren van grote gegevensvolumes vereist strategieën zoals asynchrone verwerking, batchverwerking en het in een wachtrij plaatsen van taken.
Gebruik @toekomstige methoden, Batch Apexen Wachtrij Apex om uitgebreide bewerkingen uit te voeren zonder de verschillende limieten te overschrijden.
9. Limieten voor de gouverneur In het kort
Governor-limieten zorgen voor een eerlijk gebruik van resources in de multitenant-architectuur van Salesforce. Door te begrijpen wat deze limieten zijn en hoe ze werken, kun je fouten voorkomen en de prestaties van je applicatie optimaliseren.
We hebben de belangrijkste soorten Governor Limits besproken, zoals SOQL query limieten, DML statement limieten, heap grootte en CPU tijdslimieten. We hebben ook laten zien hoe deze limieten bewaakt kunnen worden met de Developer Console en de OrgLimits klasse. Het is belangrijk om best practices te volgen zoals efficiënt queryen, bulkverwerking en asynchrone verwerking om binnen deze limieten te blijven.
Het opsplitsen van grote gegevenstransacties met behulp van Batch Apex of Queueable Apex kan bijvoorbeeld helpen bij het beheren en optimaliseren van het gebruik van resources. Ook het begrijpen van valkuilen zoals het uitvoeren van queries of DML-bewerkingen binnen loops kan veelvoorkomende fouten voorkomen.
Onthoud dat efficiënte code en goed resource management niet alleen het risico op het overschrijden van limieten verminderen, maar ook zorgen voor een soepele werking voor alle gebruikers die de Salesforce omgeving delen.
10. Vaak gestelde vragen (FAQ)
- Wat zijn de limieten van de Salesforce Gouverneur?
- Governor Limits zijn beperkingen die Salesforce afdwingt om systeembronnen te beheren.
- Waarom dwingt Salesforce de limieten van de gouverneur af?
- Ze zorgen voor een eerlijk gebruik van bronnen en handhaven de systeemprestaties.
- Hoe kan ik controleren of ik de limieten van de gouverneur nader?
- Gebruik de Salesforce Developer Console en hulpmiddelen zoals de Grenzen klasse om het gebruik te controleren.
- Wat gebeurt er als ik een Gouverneurslimiet overschrijd?
- Het overschrijden van een limiet resulteert in fouten en mislukte transacties.
- Kan ik de limieten van de Salesforce Gouverneur omzeilen?
- Limieten worden strikt gehandhaafd, maar je kunt je code wijzigen om binnen de bestaande limieten te werken, zoals te zien is in deze voorbeeld.
Over de auteur
Door Ana Neto, technisch adviseur bij Connecting Software.
"Ik ben software engineer sinds 1997, met een recentere liefde voor schrijven en spreken in het openbaar. Heb je vragen of opmerkingen over dit artikel? Ik zou graag je feedback horen, laat hieronder een reactie achter!"