Sie befinden sich hier:
Beheben von Apex_CPU_TIME_LIMIT_EXCEEDED-Fehlern in Flows
Wenn eine Transaktion zu viel CPU-Zeit in Anspruch nimmt, gibt Salesforce den Fehler Apex_CPU_TIME_LIMIT_EXCEEDED aus. Flows verwenden diese Obergrenze für alle anderen Automatisierungen in derselben Transaktion, einschließlich Apex-Auslösern.
Erforderliche Editionen
| Unterstützte Editionen anzeigen. |
| Erforderliche Benutzerberechtigungen | |
|---|---|
| Öffnen, Bearbeiten, Erstellen, Aktivieren oder Deaktivieren eines Flows mit allen in Flow Builder verfügbaren Flow-Typen, -Elementen und -Funktionen, einschließlich Einstein und Agentforce für Flow: | Flow verwalten |
| Anzeigen von "Setup" und Zugreifen auf Debug-Protokolle: | Setup und Konfiguration anzeigen |
| Anzeigen, Beibehalten und Löschen von Debug-Protokollen und Festlegen von Verfolgungskennzeichnungen: | Alle Daten anzeigen |
Salesforce erzwingt eine einzelne CPU-Zeitobergrenze von 10.000 Millisekunden (10 Sekunden) pro synchroner Transaktion. Alle Automatisierungen in dieser Transaktion, beispielsweise Apex-Auslöser, Flows, Workflow-Regeln und Prozesse, werden aus demselben Budget abgerufen. Wenn eine andere Automatisierung zuerst den Großteil des Budgets beansprucht, kann selbst ein optimierter Flow fehlschlagen. Die Ausführungsreihenfolge hängt vom Flow-Typ ab. Die vollständige Reihenfolge finden Sie unter Auslöser und Ausführungsreihenfolge.
- Flows vor dem Speichern werden in der Reihenfolge früher ausgeführt als Flows nach dem Speichern.
- Apex Auslöser werden je nach Auslösertyp vor oder nach Flows ausgeführt.
Fehlerbehebung und Optimierung von Flows, die CPU-Zeitobergrenzen erreichen:
- Verstehen der gängigen Muster, die CPU-Obergrenzenfehler verursachen
- Ermitteln, welche Elemente die meiste CPU-Zeit in Anspruch nehmen
- Anwenden von Optimierungstechniken zum Reduzieren des CPU-Verbrauchs
- Implementieren von Präventionsrichtlinien zum Vermeiden von CPU-Obergrenzenfehlern
- Probleme, Lösungen und Präventionstechniken für CPU-Obergrenzenfehler
Identifizieren Sie allgemeine CPU-Obergrenzenprobleme, wenden Sie Lösungen an und befolgen Sie Präventionstechniken, um Apex_CPU_TIME_LIMIT_EXCEEDED-Fehler zu vermeiden. - Identifizieren CPU-intensiver Elemente in einem Flow
Verwenden Sie Apex-Debug-Protokolle, um zu ermitteln, welche Elemente in Ihrem Flow die meiste CPU-Zeit in Anspruch nehmen.
Siehe auch:
Probleme, Lösungen und Präventionstechniken für CPU-Obergrenzenfehler
Identifizieren Sie allgemeine CPU-Obergrenzenprobleme, wenden Sie Lösungen an und befolgen Sie Präventionstechniken, um Apex_CPU_TIME_LIMIT_EXCEEDED-Fehler zu vermeiden.
Diese Tabelle enthält eine Referenz zur Fehlerbehebung bei CPU-Obergrenzen. Jede Zeile beschreibt ein häufiges Problem, die Lösung zur Behebung und die Techniken, um es in künftigen Flows zu verhindern. Bestimmen Sie zunächst, ob eines dieser Probleme auf Ihren Flow zutrifft. Wenn keine zutrifft, wird eine andere Automatisierung in derselben Transaktion, beispielsweise ein Apex-Auslöser, ein anderer Flow oder eine Workflow-Regel, aus demselben CPU-Budget abgerufen und kann der Übeltäter sein. Lesen Sie die Apex Debug Protokolle, um zu ermitteln, was die CPU in der gesamten Transaktion beansprucht. Weitere Details finden Sie unter Debug-Protokolle.
| Problem | Lösung | Präventionstechnik |
|---|---|---|
Vorgänge der Datenmanipulationssprache (DML) in Schleifen Das Ausführen von Vorgängen vom Typ "Datensätze erstellen", "Datensätze aktualisieren" oder "Datensätze löschen" innerhalb eines Schleifenpfads beansprucht bei jeder Iteration CPU-Zeit. Wenn Sie mehrere Datensätze gleichzeitig verarbeiten, kann die Obergrenze schnell ausgeschöpft sein. Beispiel: Ein Flow durchläuft 100 Opportunities und verwendet ein Element vom Typ "Datensätze erstellen" in der Schleife, um eine Aufgabe für jede Opportunity zu erstellen, was zu 100 separaten DML-Vorgängen führt. |
Verwenden von DML-Vorgängen (Collection-Based Data Manipulation Language) Verwenden Sie in der Schleife Zuweisungselemente, um einer Datensatzsammlungsvariablen Datensätze hinzuzufügen. Verwenden Sie nach Abschluss der Schleife ein einzelnes Element vom Typ "Datensätze erstellen", "Datensätze aktualisieren" oder "Datensätze löschen", um die gesamte Sammlung gleichzeitig zu verarbeiten. Dieser Ansatz wird als Massenvorgang bezeichnet. Beispiel: Durchlaufen Sie Opportunities und verwenden Sie ein Zuweisungselement, um eine Aufgabe für jede Opportunity zu erstellen. Verwenden Sie dann ein anderes Zuweisungselement, um jede Aufgabe einer Sammlungsvariablen hinzuzufügen. Verwenden Sie nach der Schleife das Element "Datensätze erstellen", um alle Aufgaben gleichzeitig zu erstellen. Weitere Informationen finden Sie unter Flow-Massenverarbeitung in Transaktionen. |
Platzieren Sie DML-Vorgänge niemals in Schleifen. Entwerfen Sie Flows immer so, dass sie während der Schleife Datensätze in einer Sammlungsvariablen erfassen, und führen Sie dann nach Abschluss der Schleife DML aus. |
Mehrere Abfragen in Schleifen Elemente vom Typ "Datensätze abrufen" in einer Schleife verbrauchen erhebliche CPU-Zeit, insbesondere bei Abfragen großer Objekte oder bei Verwendung komplexer Filter. Beispiel: Ein Flow durchläuft Accounts und verwendet "Datensätze abrufen" innerhalb der Schleife, um zugehörige Kontakte für jeden Account abzurufen, was zu einer Abfrage pro Account führt. |
Daten vor Schleifen abfragen Verwenden Sie vor der Schleife ein einzelnes Element vom Typ "Datensätze abrufen" und die Funktion "Zugehörige Datensätze abrufen", um alle erforderlichen Daten mit den entsprechenden Filtern abzurufen. Verwenden Sie während der Schleife die erfassten Daten, statt sie bei jeder Iteration abzufragen. Wenn Sie kein einzelnes Element vom Typ "Datensätze abrufen" verwenden können, verwenden Sie ein Element vom Typ "Datensätze abrufen", um die primären Datensätze abzurufen. Verwenden Sie dann ein anderes Element vom Typ "Datensätze abrufen", um die sekundären Datensätze abzurufen. Filtern Sie die sekundären Datensätze mithilfe eines Datensatzfelds, des Operators "In" und der ersten Sammlung "Datensätze abrufen". Beispiel: Account-ID > In > Accounts from Get Accounts (Accounts abrufen). Beispiel: Rufen Sie zunächst alle zugehörigen Kontakte mit einem Element vom Typ "Datensätze abrufen" ab, das nach Account-IDs filtert, und verweisen Sie dann während der Schleife auf die Kontaktsammlung. |
Vermeiden Sie Abfragen in Schleifen. Rufen Sie alle erforderlichen Daten ab, bevor Sie die Schleife aufrufen. |
Komplexe Formeln in Schleifen Bei Zuweisungselementen, die bei jeder Schleifeniteration komplexe Formelberechnungen ausführen, fällt CPU-Zeit an, insbesondere bei Zeichenfolgenbearbeitung, Datumsberechnungen oder verschachtelten Funktionen. Beispiel: Ein Flow durchläuft 500 Datensätze und jede Iteration führt mehrere Formelberechnungen aus, um Feldwerte abzuleiten. |
Vereinfachen von Formeln Unterteilen Sie komplexe Formeln in einfachere Schritte. Berechnen Sie Werte, die sich außerhalb der Schleife nicht ändern. Vermeiden Sie nach Möglichkeit verschachtelte Funktionen. Ziehen Sie die Verwendung von Formelfeldern im Objekt anstelle von Flow-Formeln in Erwägung. Bei Vorgängen für ganze Sammlungen wie Filtern, Zuordnen oder Sortieren funktioniert ein Transformationselement effizienter als eine Schleife. Verwenden Sie das Element "Datensätze abrufen" mit dem Operator IN, um alle verwandten Datensätze in einer einzelnen Abfrage statt einer Abfrage pro Schleifendurchlauf abzurufen. Weitere Informationen finden Sie unter Element umwandeln. |
Vereinfachen Sie Formeln und verschieben Sie Berechnungen, die sich nicht ändern, außerhalb der Schleife. Testen Sie die Formelleistung mit realistischen Datenvolumen. |
Verarbeiten großer Datensatzsammlungen Geplante Flows oder Batchvorgänge, die Tausende von Datensätzen in einer einzigen Transaktion verarbeiten, können selbst bei ordnungsgemäßer Massenverarbeitung zu viel CPU-Zeit in Anspruch nehmen. Beispiel: Ein geplanter Flow ruft 5000 Accountdatensätze ab und führt komplexe Transformationen an den Daten jedes Datensatzes durch, bevor er sie aktualisiert. |
Verwenden alternativer Ansätze Bei großen Datenmengen sollten Sie Folgendes berücksichtigen:
|
Filtern Sie Daten frühzeitig, um die Anzahl der verarbeiteten Datensätze zu reduzieren. Verwenden Sie Filter vom Typ "Datensätze abrufen", um nur die benötigten Datensätze abzurufen. Testen Sie vor der Bereitstellung in der Produktion mit realistischen Datenvolumen. |
Mehrere Flows in einer Transaktion Wenn ein Flow andere Flows auslöst (durch Datensatzänderungen oder Subflows), wird die kumulierte CPU-Zeit aller Flows in der Transaktion auf die Obergrenze angerechnet. Beispiel: Ein durch einen Datensatz ausgelöster Flow für Accountaktualisierungen führt mehrere Subflows aus und löst auch andere durch einen Datensatz ausgelöste Flows für verwandte Objekte aus. |
Reduzieren von Flow-Ketten Konsolidieren Sie die zugehörige Automatisierung in weniger Flows. Überprüfen Sie Ihre Flow-Auslöserkriterien, um sicherzustellen, dass Flows nur bei Bedarf ausgeführt werden. Verwenden Sie ggf. Eintrittsbedingungen, um zu begrenzen, wann durch einen Datensatz ausgelöste Flows ausgeführt werden. |
Überprüfen Sie die kumulierten Auswirkungen aller Automatisierungen (Flows, Prozesse, Workflows, Auslöser), die in derselben Transaktion ausgeführt werden können. Überwachen und optimieren Sie die gesamte Automatisierungskette. |
Massendaten werden geladen Durch Datensätze ausgelöste Flows, die während Massendatenimporten oder Massenaktualisierungen ausgeführt werden, erfordern eine effiziente Verarbeitung aller Datensätze. Ineffiziente Flows erreichen CPU-Obergrenzen während Massenvorgängen, selbst wenn sie für einzelne Datensätze einwandfrei funktionieren. Beispiel: Ein Benutzer importiert 200 Accountdatensätze. Der vor dem Speichern durch einen Datensatz ausgelöste Flow führt mehrere Nachschlagevorgänge und Berechnungen für jeden Account aus. |
Optimieren für Massenvorgänge
Weitere Informationen finden Sie unter Element umwandeln. |
Gehen Sie immer davon aus, dass durch einen Datensatz ausgelöste Flows mehrere Datensätze gleichzeitig verarbeiten. Testen Sie mit Massendatenladungen (mit Data Loader oder Massenaktualisierungen), bevor Sie sie in der Produktion bereitstellen. Wenn ein Flow nicht ordnungsgemäß konzipiert ist, kann er bei Massenvorgängen fehlschlagen, wenn er nicht ordnungsgemäß konzipiert ist. |
Allgemeine Präventionsrichtlinien
- Überwachen der Flow-Leistung: Überprüfen Sie regelmäßig Apex-Debug-Protokolle, um Flows zu identifizieren, die sich den CPU-Obergrenzen nähern, auch wenn sie noch nicht fehlgeschlagen sind. Regelmäßige Überwachung hilft Ihnen, Flows zu optimieren, bevor sie zu Produktionsproblemen führen.
- Testen Sie mit realistischen Daten: Testen Sie Flows mit realistischen Datenvolumen, um Leistungsprobleme vor der Aktivierung zu erkennen. Der Debug-Modus testet in der Regel mit einem Datensatz, der keine Probleme beim Massenvorgang aufzeigt.
- Entscheidungen zur Dokumentoptimierung: Verwenden Sie Elementbeschreibungen, um zu notieren, wo Sie die Massenverarbeitung oder andere Optimierungen angewendet haben. Diese Dokumentation hilft künftigen Wartungskräften, das Design zu verstehen, und verhindert die versehentliche Einführung von Leistungsproblemen.
- Einfach beginnen und optimieren: Erstellen Sie Flows in kleinen Schritten und testen Sie die Leistung bei jedem Schritt. Die Optimierung eines funktionierenden Flows ist einfacher als die Korrektur eines komplexen fehlerhaften Flows.
Identifizieren CPU-intensiver Elemente in einem Flow
Verwenden Sie Apex-Debug-Protokolle, um zu ermitteln, welche Elemente in Ihrem Flow die meiste CPU-Zeit in Anspruch nehmen.
- Wechseln Sie zu Setup und geben Sie im Feld Schnellsuche den Text Debug-Protokolle ein.
- Richten Sie die Debug-Protokollierung für den Benutzer ein, bei dem der Fehler auftritt, oder führen Sie den Flow im Debug-Modus aus.
- Reproduzieren Sie den Fehler, indem Sie den Flow ausführen.
- Öffnen Sie das generierte Debug-Protokoll.
-
Suchen Sie im Debug-Protokoll nach diesen wichtigen Ereignissen.
FLOW_CREATE_INTERVIEW_BEGIN: Zeigt an, wann jeder Flow gestartet wirdFLOW_ELEMENT_LIMIT_USAGE: Zeigt den CPU-Zeitverbrauch für jedes Flow-Element anCUMULATIVE_LIMIT_USAGE– Zeigt laufende Gesamtsummen der CPU-Zeit an
-
Identifizieren Sie Elemente mit hohen CPU-Zeitwerten.
Zu den häufigsten Tätern zählen:
- Schleifenelemente mit großen Sammlungen.
- Rufen Sie Datensatzelemente mit komplexen Filtern ab.
- DML-Vorgänge mit mehreren Datensätzen (Datensätze erstellen, Datensätze aktualisieren, Datensätze löschen).
- Zuweisungselemente mit komplexen Formeln.
Sie wissen nun, welche Elemente die meiste CPU-Zeit in Anspruch nehmen. Verwenden Sie diese Informationen, um gezielte Optimierungen anzuwenden.
Weitere Informationen zu Debug-Protokollen finden Sie unter Arbeiten mit Protokollen in der Developer Console.

