LIMIT_EXCEEDED in Salesforce-Deployments beheben
Die Apex-Tests eines Deployments, oder der dahinterliegende Datenladevorgang, haben eines der Governor- oder orgweiten Limits von Salesforce erreicht.
Tritt auf bei: Ausführung von Apex-Tests oder Massen-Datenoperationen, nicht bei der Validierung des Metadaten-Deployments selbstWas das bedeutet
LIMIT_EXCEEDED umfasst eine Familie von Salesforce-Limits, am häufigsten Apex-Governor-Limits wie SOQL-Abfragen, DML-Anweisungen oder CPU-Zeit, die während der von einem Deployment geforderten Testausführung erreicht werden. Es kann auch bedeuten, dass ein orgweites Limit, wie tägliche API-Aufrufe oder Massen-E-Mail-Empfänger, durch eine vom Deployment ausgelöste Automatisierung überschritten wurde.
Governor-Limits pro Transaktion (100 SOQL-Abfragen, 150 DML-Anweisungen, 10.000 CPU-Millisekunden synchron) werden bei jeder Transaktion zurückgesetzt, daher deutet dies fast immer auf nicht bulk-fähigen Code innerhalb einer Transaktion hin, statt auf eine echte Kapazitätsgrenze der Org.
Häufige Ursachen
Die Lösung
- Den Codepfad, der das Limit erreicht, bulkifizierenSchreiben Sie den Trigger, die Klasse oder den Test so um, dass er mit Sammlungen statt einzelnen Datensätzen arbeitet, wodurch SOQL- und DML-Aufrufe pro Transaktion reduziert werden.
// Bad: SOQL inside a loop for (Account a : accounts) { List<Contact> cons = [SELECT Id FROM Contact WHERE AccountId = :a.Id]; } // Good: one query outside the loop Map<Id, List<Contact>> conMap = new Map<Id, List<Contact>>(); for (Contact c : [SELECT Id, AccountId FROM Contact WHERE AccountId IN :accountIds]) { if (!conMap.containsKey(c.AccountId)) conMap.put(c.AccountId, new List<Contact>()); conMap.get(c.AccountId).add(c); } - Testdatenvolumen auf das nötige Minimum reduzierenReduzieren Sie das Apex-Testsetup auf den kleinsten Datensatz, der die zu testende Logik noch abdeckt.
- Org-Limits vor großen Deployments prüfenÜberprüfen Sie API- und andere Tageslimits in Setup, bevor Sie einen Massen-Datenladevorgang oder ein Deployment ausführen, das zur bereits an diesem Tag verbrauchten Nutzung hinzukommt.
Wie Serpent das verhindert
Serpent hält vorgewärmte Scratch-Orgs für Testläufe bereit, sodass ein Massentest oder Datenladevorgang auf einen sauberen Satz an Limits trifft, statt mit allem anderen zu konkurrieren, das bereits in einer gemeinsam genutzten Sandbox läuft. Siehe die Bibliothek der Salesforce-Deploymentfehler.

Prävention
Verwandte Fehler
LIMIT_EXCEEDED, erklärt
Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.
In unter 15 Minuten eingerichtet. Keine DevOps-Einstellung nötig.
