Problemen met Apex_CPU_TIME_LIMIT_EXCEEDEDED oplossen in stromen
Wanneer een transactie te veel CPU-tijd verbruikt, veroorzaakt Salesforce een Apex_CPU_TIME_LIMIT_EXCEEDED fout. Stromen delen deze limiet met elke andere automatisering in dezelfde transactie, inclusief Apex triggers.
Vereiste editions
| Ondersteunde editions weergeven. |
| Vereiste gebruikersmachtigingen | |
|---|---|
| Een stroom openen, bewerken, maken, activeren of deactiveren met behulp van alle stroomtypen, elementen en voorzieningen die beschikbaar zijn in Flow Builder, inclusief Einstein en Agentforce voor Flow: | Stroom beheren |
| Set-up weergeven en foutopsporingslogboeken openen: | Set-up en configuratie bekijken |
| Foutopsporingslogboeken weergeven, bewaren en verwijderen, en traceringsvlaggen instellen: | Alle gegevens weergeven |
Salesforce hanteert één CPU-tijdlimiet van 10.000 milliseconden (10 seconden) per synchrone transactie. Elk stukje automatisering in die transactie, zoals Apex triggers, stromen, werkstroomregels en processen, haalt uit hetzelfde budget. Als andere automatisering eerst het grootste deel van het budget verbruikt, kan zelfs een geoptimaliseerde stroom mislukken. De uitvoeringsvolgorde is afhankelijk van het stroomtype. Zie Triggers en volgorde van uitvoering voor de volledige volgorde.
- Stromen vóór opslaan worden eerder in de volgorde uitgevoerd dan stromen na opslaan.
- Apex triggers worden uitgevoerd vóór of na stromen, afhankelijk van hun triggertype.
Stromen die CPU-tijdlimieten overschrijden, opsporen en optimaliseren:
- Inzicht in de veel voorkomende patronen die CPU-limietfouten veroorzaken
- Bepalen welke elementen de meeste CPU-tijd verbruiken
- Optimaliseringstechnieken toepassen om CPU-verbruik te verminderen
- Preventierichtlijnen implementeren om CPU-limietfouten te voorkomen
- Problemen, oplossingen en preventietechnieken voor CPU-limietfouten
Identificeer veel voorkomende CPU-limietproblemen, pas oplossingen toe en volg preventietechnieken om Apex_CPU_TIME_LIMIT_EXCEEDED-fouten te voorkomen. - CPU-intensieve elementen in een stroom identificeren
Gebruik Apex foutopsporingslogboeken om aan te geven welke elementen in uw stroom de meeste CPU-tijd verbruiken.
Zie ook:
Problemen, oplossingen en preventietechnieken voor CPU-limietfouten
Identificeer veel voorkomende CPU-limietproblemen, pas oplossingen toe en volg preventietechnieken om Apex_CPU_TIME_LIMIT_EXCEEDED-fouten te voorkomen.
Deze tabel biedt een naslag voor het oplossen van problemen met CPU-limietfouten. Elke rij beschrijft een veelvoorkomend probleem, de oplossing om het op te lossen en technieken om het in toekomstige stromen te voorkomen. Bepaal eerst of een van deze problemen van toepassing is op uw stroom. Als dit niet het geval is, wordt een andere automatisering in dezelfde transactie—zoals een Apex trigger, een andere stroom of een werkstroomregel—gebruikt uit hetzelfde CPU-budget en kan dit de boosdoener zijn. Bekijk de Apex foutopsporingslogboeken om te bepalen wat CPU verbruikt voor de gehele transactie. Zie Foutopsporingslogboeken voor meer informatie.
| Probleem | Oplossing | Preventietechniek |
|---|---|---|
Data Manipulation Language (DML)-bewerkingen binnen lussen Het uitvoeren van bewerkingen voor Records maken, Records bijwerken of Records verwijderen binnen een luspad kost CPU-tijd bij elke herhaling. Het verwerken van meerdere records tegelijk kan de limiet snel oprakelen. Voorbeeld: Een stroom doorloopt 100 opportunities en gebruikt een element Records maken binnen de lus om een taak voor elke opportunity te maken, wat resulteert in 100 afzonderlijke DML-bewerkingen. |
Op verzameling gebaseerde bewerkingen van Data Manipulation Language (DML) gebruiken Gebruik binnen de lus toewijzingselementen om records toe te voegen aan een recordverzamelingsvariabele. Nadat de lus is voltooid, gebruikt u één element Records maken, Records bijwerken of Records verwijderen om de gehele verzameling tegelijk te verwerken. Deze benadering wordt bulkverwerking genoemd. Voorbeeld: Loop door opportunities en gebruik een toewijzingselement om een taak voor elke opportunity samen te stellen. Gebruik vervolgens een ander toewijzingselement om elke taak toe te voegen aan een verzamelingsvariabele. Gebruik na de lus een element Records maken om alle taken tegelijk te maken. Zie voor meer informatie Bulkverwerking stroom in transacties. |
Plaats DML-bewerkingen nooit binnen lussen. Ontwerp stromen altijd om records in een verzamelingsvariabele te verzamelen tijdens de lus en voer vervolgens DML uit nadat de lus is voltooid. |
Meerdere query's binnen lussen Records ophalen-elementen binnen een lus verbruiken aanzienlijke CPU-tijd, vooral bij het uitvoeren van een query op grote objecten of het gebruik van complexe filters. Voorbeeld: Een stroom doorloopt accounts en gebruikt Records ophalen binnen de lus om gerelateerde contactpersonen voor elke account op te halen, wat resulteert in één query per account. |
Query uitvoeren op gegevens vóór lussen Gebruik vóór de lus één element Records ophalen en gebruik de functionaliteit Gerelateerde records ophalen om alle benodigde gegevens op te halen met de juiste filters. Gebruik tijdens de lus de verzamelde gegevens in plaats van een query uit te voeren op elke herhaling. Als u niet één element Records ophalen kunt gebruiken, gebruikt u een element Records ophalen om de primaire records op te halen. Gebruik vervolgens een ander element Records ophalen om de secundaire records op te halen. Filter de secundaire records met behulp van een recordveld, de operator In en de eerste verzameling Records ophalen. Bijvoorbeeld Account-ID > In > Accounts van Accounts ophalen. Voorbeeld: Haal eerst alle gerelateerde contactpersonen op met een element Records ophalen dat filtert op de account-ID's en verwijs vervolgens naar de verzameling contactpersonen tijdens de lus. |
Vermijd query's binnen lussen. Haal alle benodigde gegevens op voordat u de lus ingaat. |
Complexe formules in lussen Toewijzingselementen die complexe formuleberekeningen uitvoeren voor elke lusherhaling, accumuleren CPU-tijd, met name bij tekenreeksmanipulatie, datumberekeningen of geneste functies. Voorbeeld: Een stroom doorloopt 500 records en elke herhaling voert meerdere formuleberekeningen uit om veldwaarden af te leiden. |
Formules vereenvoudigen Splits complexe formules op in eenvoudigere stappen. Bereken waarden die niet buiten de lus veranderen. Vermijd geneste functies indien mogelijk. Overweeg formulevelden voor het object te gebruiken in plaats van stroomformules. Voor bewerkingen voor volledige verzamelingen—zoals filteren, toewijzen of sorteren—werkt een element Transformeren efficiënter dan een lus. Gebruik voor het ophalen van alle gerelateerde records in één query in plaats van één query per lusherhaling een element Records ophalen met de operator IN. Zie Element transformeren voor meer informatie. |
Vereenvoudig formules en verplaats berekeningen die niet buiten de lus worden gewijzigd. Test formuleprestaties met realistische gegevensvolumes. |
Verwerking van grote recordverzamelingen Geplande stromen of batchbewerkingen die duizenden records in één transactie verwerken, zelfs met de juiste bulkverwerking, kunnen te veel CPU-tijd verbruiken. Voorbeeld: Een geplande stroom krijgt 5000 accountrecords en voert complexe transformaties uit op de gegevens van elke record voordat deze worden bijgewerkt. |
Alternatieve benaderingen gebruiken Denk bij grote gegevensvolumes aan:
|
Filter gegevens vroeg om het aantal verwerkte records te verminderen. Gebruik filters Records ophalen om alleen de records op te halen die u nodig hebt. Test met realistische gegevensvolumes voordat u implementeert naar productie. |
Meerdere stromen in een transactie Wanneer één stroom andere stromen activeert (via recordwijzigingen of substromen), telt de cumulatieve CPU-tijd van alle stromen in de transactie mee voor de limiet. Voorbeeld: Een door records geactiveerde stroom voor Accountupdates voert meerdere substromen uit en activeert ook andere door records geactiveerde stromen voor gerelateerde objecten. |
Stroomketens reduceren Consolideer gerelateerde automatisering in minder stromen. Controleer uw stroomtriggercriteria om ervoor te zorgen dat stromen alleen worden uitgevoerd wanneer dat nodig is. Overweeg invoervoorwaarden te gebruiken om te beperken wanneer door records geactiveerde stromen worden uitgevoerd. |
Bekijk de cumulatieve impact van alle automatisering (stromen, processen, werkstromen, triggers) die in dezelfde transactie kunnen worden uitgevoerd. Bewaak en optimaliseer de gehele automatiseringsketen. |
Bulkgegevens laden Door records geactiveerde stromen die worden uitgevoerd tijdens bulkimport van gegevens of bulkupdates, vereisen een efficiënte verwerking van alle records. Inefficiënte stromen raken CPU-limieten tijdens bulkbewerkingen, zelfs als ze prima werken voor afzonderlijke records. Voorbeeld: Een gebruiker importeert 200 accountrecords. De door records geactiveerde stroom voordat wordt opgeslagen voert meerdere opzoekopdrachten en berekeningen uit voor elke account. |
Optimaliseren voor bulkbewerkingen
Zie Element transformeren voor meer informatie. |
Neem altijd aan dat door records geactiveerde stromen meerdere records tegelijkertijd verwerken. Test met bulkladingen gegevens (met behulp van Data Loader of bulkupdates) voordat u implementeert naar productie. Indien niet op de juiste wijze ontworpen, kan een stroom die perfect werkt voor afzonderlijke records, mislukken tijdens bulkbewerkingen indien niet op de juiste wijze ontworpen. |
Algemene richtlijnen voor preventie
- Stroomprestaties bewaken: Controleer Apex foutopsporingslogboeken regelmatig om stromen te identificeren die CPU-limieten benaderen, zelfs als ze nog niet zijn mislukt. Met regelmatige bewaking optimaliseert u stromen voordat ze productieproblemen veroorzaken.
- Test met realistische gegevens: Test stromen met realistische gegevensvolumes om prestatieproblemen te ontdekken voordat ze worden geactiveerd. De foutopsporingsmodus test doorgaans met één record, die geen problemen met bulkbewerkingen onthult.
- Beslissingen over documentoptimalisering: Gebruik elementbeschrijvingen om te noteren waar u bulkverwerking of andere optimaliseringen hebt toegepast. Deze documentatie helpt toekomstige onderhouders het ontwerp te begrijpen en voorkomt dat er per ongeluk prestatieproblemen optreden.
- Begin eenvoudig en optimaliseer: Stel stromen samen in kleine stappen en test de prestaties bij elke stap. Het optimaliseren van een werkstroom is eenvoudiger dan het oplossen van een complexe, verbroken stroom.
CPU-intensieve elementen in een stroom identificeren
Gebruik Apex foutopsporingslogboeken om aan te geven welke elementen in uw stroom de meeste CPU-tijd verbruiken.
- Ga naar Set-up en geef Foutopsporingslogboeken op in het vak Snel zoeken.
- Stel het vastleggen van fouten in voor de gebruiker die de fout ondervindt, of voer de stroom uit in de foutopsporingsmodus.
- Reproduceer de fout door de stroom uit te voeren.
- Open het gegenereerde foutopsporingslogboek.
-
Zoek naar deze belangrijke events in het foutopsporingslogboek.
FLOW_CREATE_INTERVIEW_BEGIN- Toont wanneer elke stroom begintFLOW_ELEMENT_LIMIT_USAGE: toont CPU-tijdverbruik voor elk stroomelementCUMULATIVE_LIMIT_USAGE- Toont totalen van CPU-tijd
-
Identificeer elementen met hoge CPU-tijdwaarden.
Veel voorkomende boosdoeners zijn:
- Luselementen met grote verzamelingen.
- Records-elementen ophalen met complexe filters.
- DML-bewerkingen met meerdere records (Records maken, Records bijwerken, Records verwijderen).
- Toewijzingselementen met complexe formules.
U weet nu welke elementen de meeste CPU-tijd verbruiken. Gebruik deze informatie om doelgerichte optimaliseringen toe te passen.
Zie Werken met logboeken in de Developer Console voor meer informatie over foutopsporingslogboeken.

