Salesforce-Governor-Limits sind entscheidend für die Aufrechterhaltung der Stabilität und Effizienz von Salesforce. Da Salesforce (und Apex) in einer mandantenfähigen Umgebung mit gemeinsam genutzten Ressourcen betrieben wird, dienen Gouverneurslimits dazu, sicherzustellen, dass kein einzelner Benutzer alle Ressourcen verbraucht und die Plattform für alle fair und reaktionsschnell bleibt.
Dieser Artikel soll Ihnen helfen, diese Grenzen zu verstehen und zu wissen, wie Sie sie effektiv einhalten können.
1. Was ist ein Salesforce-Regler?
Definition:
Ein Salesforce Governor ist ein Systemmechanismus innerhalb von Salesforce, der bestimmte Grenzen für die Ressourcennutzung durchsetzt. Man kann ihn sich als Kontrollpunkt vorstellen, der eine gerechte Verteilung der Systemressourcen sicherstellt.
Die Rolle:
Gouverneure verhindern, dass ein einzelner Tenant die Ressourcen monopolisiert. Dadurch bleibt die Salesforce-Umgebung für alle Benutzer stabil und effizient.
2. Was sind die Grenzwerte des Salesforce-Reglers?
BDE-Governor-Limits sind die spezifischen Einschränkungen, die von Salesforce zur Aufrechterhaltung der Systemleistung und -sicherheit durchgesetzt werden.
Betrachten Sie die Governor Limits in Salesforce als die Ausleihregeln in einer Bibliothek. In der Bibliothek können Sie eine bestimmte Anzahl von Büchern (Ressourcen) auf einmal ausleihen, um sicherzustellen, dass jeder Zugang hat. Jeder Vorgang in Salesforce ist wie das Ausleihen eines Buches. Es gibt Grenzen für die Anzahl der Bücher (Abfragen, DML-Anweisungen), die Sie ausleihen können, um eine faire Nutzung und Verfügbarkeit ihrer
➡️ Bitte beachten Sie, dass die Grenzen des Salesforce-Reglers keine Lagerung beinhalten.
Weitere Informationen zu den Daten und Speichergrenzen des Salesforce finden Sie in unseren anderen Artikeln
Salesforce-Daten: Kosten senken und Compliance verbessern und Salesforce Speichergrenze überschritten.
Die Grenzen für API-Aufrufe gehen ebenfalls über den Rahmen dieses Artikels hinaus, aber beachten Sie, dass es ein tägliches API-Aufruflimit gibt. Das Limit variiert je nach Organisationstyp und Lizenz. Sie können die Salesforce-API-Grenzwerte (programmatisch) mit der Funktion OrgLimits-Klasse. Weitere Informationen über die API-Anforderungslimits und -Zuweisungen Artikel.
3. Gängige Typen von Salesforce-Reglern Grenzwerte
SOQL-Abfrage-Grenzen:
- Der Fehler "Zu viele SOQL-Abfragen" tritt auf, wenn mehr als die maximale Anzahl von SOQL-Abfragen in einer einzigen Transaktion ausgeführt werden. In einer SOQL-Abfrage mit Eltern-Kind-Unterabfragenzählt jede Eltern-Kind-Beziehung als eine zusätzliche Abfrage.
- Maximale Abfragen: 100 (synchron), 200 (asynchron).
Ergebnis Zeilenbegrenzungen:
- Der Fehler "Too many Query rows" tritt auf, wenn die Abfragen in einer einzigen Transaktion mehr als die zulässige Anzahl von Zeilen zurückgeben.
- Maximale Abfragezeilen: 50 000
DML-Anweisungs-Grenzwerte:
- Der Fehler "Zu viele DML-Anweisungen" tritt auf, wenn mehr als die zulässige Anzahl von DML-Operationen innerhalb einer einzigen Transaktion ausgeführt werden.
- Maximale DML-Operationen: 150 (synchron), 300 (asynchron).
Heap-Größenbegrenzungen:
- Der Fehler "Apex heap size too large" tritt auf, wenn während der Verarbeitung zu viele Daten im Speicher abgelegt werden.
- Maximale Heap-Größe: 6 MB (synchron), 12 MB (asynchron).
CPU-Zeitlimits:
- Der Fehler "Apex CPU time limit exceeded" bedeutet, dass Ihre Transaktion zu lange gedauert hat und die maximale CPU-Zeit überschritten wurde.
- Maximale CPU-Zeit: 10.000 ms (synchron), 60.000 ms (asynchron).
Für andere Arten von Begrenzungen durch den Begrenzungsregler, siehe die Apex-Entwicklerhandbuch.
4. Überschreitung der Grenzen des Reglers: Ein Beispiel und eine Lösung
Ein häufiges Problem, mit dem Entwickler konfrontiert werden, ist die Ausnahme "101 Too Many SOQL Queries" (101 zu viele SOQL-Abfragen). Dieser Fehler tritt auf, wenn mehr als 100 SOQL-Abfragen in einer einzigen Transaktion (im synchronen Modus) ausgeführt werden.
Beispiel: Betrachten Sie den folgenden Codeausschnitt, der versucht, Kontodetails innerhalb einer Schleife abzurufen:
public class AccountProcessor {
public void processAccounts() {
List Konten = [SELECT Id, Name FROM Konto];
for (Konto acc : Konten) {
// Diese Abfrage innerhalb einer Schleife kann bei vielen Konten leicht die SOQL-Grenze überschreiten
List contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :acc.Id];
// Kontakte verarbeiten
}
}
}
Dieser Code stößt schnell an die Grenze von 101 SOQL-Abfragen, wenn die Anzahl der Konten 100 übersteigt.
Lösung: Ein besserer Ansatz wäre es, die Abfrage zu vereinfachen:
public class AccountProcessor {
public void processAccounts() {
List Konten = [SELECT Id, Name FROM Konto];
Set accountIds = new Set();
for (Konto acc : Konten) {
accountIds.add(acc.Id);
}
List contacts = [SELECT Id, Name, AccountId FROM Contact WHERE AccountId IN :accountIds];
Map<Id, List> accountContactsMap = new Map<Id, List>();
for (Kontakt con : Kontakte) {
if (!accountContactsMap.containsKey(con.AccountId)) {
accountContactsMap.put(con.AccountId, new List());
}
accountContactsMap.get(con.AccountId).add(con);
}
for (Konto acc : Konten) {
List acctContacts = accountContactsMap.get(acc.Id);
// Kontakte verarbeiten
}
}
}
Dieser überarbeitete Code ist zwar etwas länger, aber er holt alle zugehörigen Kontakte in einer einzigen Abfrage, wodurch die SOQL-Beschränkung vermieden wird.
Die "101 Too Many SOQL Queries" Governor Limit Exception tritt auch häufig beim Hochladen von Dateien auf, wenn Sie eine Abfrage zum Hochladen jeder Datei verwenden.
5. Überwachung der Grenzwerte des Salesforce-Reglers
Die Überwachung Ihrer Ressourcennutzung ist wichtig, um sicherzustellen, dass Sie diese Grenzen nicht erreichen. Hierfür sollten Sie die Salesforce-Entwicklerkonsole verwenden.
Wenn einer der oben genannten Fehler auftritt, können die Debug-Protokolle helfen. Salesforce bietet auch eine Grenzwerte Klasse und eingebaute Methoden wie
- getQueries();
- getDML();
Gibt die Anzahl der Datensätze zurück, die mit einer beliebigen Anweisung verarbeitet wurden, die gegen die DML-Grenzen verstößt.
Die häufigsten Ursachen für Fehler bei der Begrenzung des Drehzahlreglers sind:
- Abfragen und Operationen innerhalb von Schleifen: Vermeiden Sie DML-Operationen und Abfragen innerhalb von Schleifen.
- Unsachgemäße Fehlerbehandlung: Implementieren Sie eine angemessene Ausnahmebehandlung, um unerwartete Limitfehler zu vermeiden.
7. Bewährte Praktiken für die Verwaltung von Gouverneurslimits
Befolgen Sie diese bewährten Verfahren, um die Grenzwerte einzuhalten:
Effiziente Abfrage:
- Versuchen Sie, alle erforderlichen Daten in einer einzigen Abfrage und nicht in einer Schleife abzurufen. Wenn eine Schleife notwendig ist, verwenden Sie die for-Schleifen von SOQL. Wenn Ihr Problem darin besteht, dass die Ergebnismenge zu viele Zeilen enthält, verwenden Sie Limit und Filter in Ihren Abfragen.
Bulk-Verarbeitung:
- Verwendung von Massenverarbeitungsmethoden und Entwurfsmustern. Kombinieren Sie Datensätze in Sammlungen und führen Sie Massen-DML-Operationen durch.
Verwendung von Sammlungen:
- Minimieren Sie DML-Vorgänge durch die Verwendung von Sammlungen.
Code-Optimierung:
- Schreiben Sie effizienten, optimierten Code. Vermeiden Sie unnötige Schleifen und verwenden Sie effiziente Algorithmen.
Regulierende Transaktionen:
- Entscheiden Sie sich für eine asynchrone Verarbeitung, um umfangreiche Vorgänge zu verwalten.
8. Fortgeschrittene Strategien für große Datenvolumina
Die Verwaltung großer Datenmengen erfordert Strategien wie asynchrone Verarbeitung, Batch-Verarbeitung und das Einreihen von Aufträgen in Warteschlangen.
Verwenden Sie @future Methoden, Batch-Apexund Warteschlangen-Apex um umfangreiche Operationen zu bewältigen, ohne die verschiedenen Grenzen zu überschreiten.
9. Gouverneurslimits Kurz gesagt
Governor-Limits sorgen für eine faire Nutzung der Ressourcen in der mandantenfähigen Architektur von Salesforce. Wenn Sie verstehen, was diese Grenzen sind und wie sie funktionieren, können Sie Fehler vermeiden und die Leistung Ihrer Anwendung optimieren.
Wir haben die wichtigsten Arten von Governor Limits wie SOQL-Abfrage-Limits, DML-Anweisungs-Limits, Heap-Größe und CPU-Zeit-Limits besprochen. Wir haben auch gezeigt, wie man diese Limits mit der Entwicklerkonsole und der OrgLimits-Klasse überwachen kann. Es ist wichtig, Best Practices wie effiziente Abfragen, Massenverarbeitung und asynchrone Verarbeitung zu befolgen, um innerhalb dieser Grenzen zu bleiben.
So kann beispielsweise die Aufteilung großer Datentransaktionen mit Batch Apex oder Queueable Apex zur Verwaltung und Optimierung der Ressourcennutzung beitragen. Ebenso können häufige Fehler vermieden werden, wenn man weiß, dass Abfragen oder DML-Operationen innerhalb von Schleifen ausgeführt werden.
Denken Sie daran, dass effizienter Code und eine ordnungsgemäße Ressourcenverwaltung nicht nur das Risiko von Grenzwertüberschreitungen mindern, sondern auch einen reibungslosen Betrieb für alle Benutzer der Salesforce-Umgebung gewährleisten.
10. Häufig gestellte Fragen (FAQ)
- Was sind die Grenzwerte des Salesforce-Reglers?
- Governor Limits sind Einschränkungen, die Salesforce zur Verwaltung von Systemressourcen durchsetzt.
- Warum erzwingt Salesforce die Begrenzung des Gouverneurs?
- Sie sorgen für eine gerechte Ressourcennutzung und erhalten die Systemleistung.
- Wie kann ich überprüfen, ob ich mich dem Gouverneurslimit nähere?
- Verwenden Sie die Salesforce-Entwicklerkonsole und Tools wie das Grenzwerte Klasse, um die Nutzung zu überwachen.
- Was passiert, wenn ich ein Gouverneurslimit überschreite?
- Das Überschreiten eines Limits führt zu Fehlern und fehlgeschlagenen Transaktionen.
- Kann ich die Beschränkungen des Salesforce-Reglers umgehen?
- Die Grenzwerte werden streng eingehalten, aber Sie können Ihren Code so ändern, dass er innerhalb der bestehenden Grenzen funktioniert, wie in diesem Beispiel zu sehen Beispiel.
Über den Autor
Durch Ana Neto, technical Berater bei Connecting Software.
"Ich bin seit 1997 Software-Ingenieur, und seit kurzem schreibe ich gerne und halte öffentliche Vorträge. Haben Sie Fragen oder Kommentare zu diesem Artikel? Ich würde mich über Ihr Feedback freuen. Hinterlassen Sie unten einen Kommentar!"