netsuite
Führung
Suche…
Bemerkungen
Führung
"Governance" bezeichnet das System von NetSuite zum Erkennen und Anhalten von Skripts mit langer Laufzeit, unkontrolliertem oder ressourcenintensivem Betrieb.
Für jeden Skripttyp gibt es Governance-Grenzwerte, die nicht überschritten werden dürfen, und es gibt vier Arten von Governance-Grenzwerten für jeden Skripttyp.
- API-Nutzungslimit
- Befehlsanzahllimit
- Timeout-Limit
- Speicherbelegung
Wenn ein Skript seine Governance-Grenze in einem dieser vier Bereiche überschreitet, löst NetSuite eine nicht abrufbare Ausnahme aus und beendet das Skript sofort.
API-Nutzungslimit
NetSuite beschränkt die API-Nutzung Ihrer Skripts auf ein System, das auf "Nutzungseinheiten" basiert. Einige NetSuite-API-Aufrufe, insbesondere solche, die eine Lese- oder Schreibaktion für die Datenbank ausführen, kosten bei jedem Aufruf eine bestimmte Anzahl von Einheiten. Jeder Skripttyp verfügt dann über eine maximale Anzahl von Einheiten, die bei jeder Ausführung des Skripts verwendet werden können.
Wenn ein Skript das API-Nutzungslimit überschreitet, bricht NetSuite das Skript ab, indem es einen SSS_USAGE_LIMIT_EXCEEDED
Fehler SSS_USAGE_LIMIT_EXCEEDED
.
Nachfolgend finden Sie einige Beispiele für die Stückkosten für übliche Vorgänge. Eine vollständige Liste der Governance-Kosten finden Sie im Artikel "API Governance" in der NetSuite-Hilfe.
Operation | Kosten pro Einheit |
---|---|
Laden einer gespeicherten Suche | 5 |
Suchergebnisse abrufen | 10 |
Planen einer Aufgabe | 10 |
URL anfordern | 10 |
Eine E-Mail senden | 10 |
Einen benutzerdefinierten Datensatz erstellen | 2 |
Erstellen eines Mitarbeiterdatensatzes | 5 |
Kundenauftragsdatensatz erstellen | 10 |
Speichern eines benutzerdefinierten Datensatzes | 4 |
Speichern eines Kontaktdatensatzes | 10 |
Bestelldatensatz speichern | 20 |
Für verschiedene Vorgänge werden unterschiedliche Einheiten verwendet, und bestimmte Vorgänge kosten je nach verwendetem Datensatztyp einen anderen Betrag. Je mehr Einheiten eine Funktion kostet, desto länger dauert die Ausführung.
Transaktionen sind die größten Datensatztypen, daher kostet die Arbeit mit ihnen die größte Menge an Einheiten. Umgekehrt sind benutzerdefinierte Datensätze sehr leicht und kosten daher nicht viele Einheiten. Standard-NetSuite-Datensätze, bei denen es sich nicht um Transaktionen wie Kunden, Mitarbeiter oder Kontakte handelt, werden hinsichtlich der Kosten zwischen den beiden Datensätzen platziert.
Dies sind die Verwendungsgrenzen nach Skripttyp:
Skripttyp | Nutzungslimit |
---|---|
Klient | 1.000 |
Benutzerereignis | 1.000 |
Suitelet | 1.000 |
Portlet | 1.000 |
Workflow-Aktion | 1.000 |
RESTlet | 5.000 |
Geplant | 10.000 |
Karte verkleinern | 10.000 |
Bundle-Installation | 10.000 |
Massenaktualisierung | 10.000 pro Datensatz |
Timeout- und Instruction-Count-Limits
NetSuite verwendet das Governance-System auch, um Runaway-Skripts mithilfe eines Timeout-Mechanismus und eines Befehlszählers zu erkennen und zu stoppen.
Wenn die Ausführung eines Skripts zu lange dauert, wird es von SSS_TIME_LIMIT_EXCEEDED
Fehler SSS_TIME_LIMIT_EXCEEDED
.
Darüber hinaus können Runaway-Skripts anhand ihrer "Instruction Count" erkannt und angehalten werden. Wenn die festgelegten Befehlsanzahlgrenzen überschritten werden, stoppt NetSuite das Skript, indem es einen SSS_INSTRUCTION_COUNT_EXCEEDED
Fehler SSS_INSTRUCTION_COUNT_EXCEEDED
.
Es gibt leider keine Hilfedokumentation, die Folgendes definiert:
- das Timeout für jeden Skripttyp
- Die Anzahl der Anweisungen für jeden Skripttyp
- Was ist eine einzelne "Anweisung"?
Es ist einfach wichtig zu wissen, dass die Verarbeitung zu lange SSS_TIME_LIMIT_EXCEEDED
, wenn Sie entweder den Fehler SSS_TIME_LIMIT_EXCEEDED
oder den Fehler SSS_INSTRUCTION_COUNT_EXCEEDED
in einem Ihrer Skripts SSS_INSTRUCTION_COUNT_EXCEEDED
. Konzentrieren Sie Ihre Untersuchung auf Ihre Schleifenstrukturen, um festzustellen, wo Optimierungen vorgenommen werden können.
Speicherbelegung
Wenn Ihr Skript die Speicherauslastung überschreitet, beendet NetSuite Ihr Skript, indem SSS_MEMORY_USAGE_EXCEEDED
Fehler SSS_MEMORY_USAGE_EXCEEDED
.
Jede deklarierte Variable, jede definierte Funktion, jedes gespeicherte Objekt trägt zur Speicherauslastung Ihres Skripts bei.
Sowohl das geplante Skript als auch das Map / Reduce-Skript verfügen über dokumentierte Speichergrenzen von 50MB
. Es gibt auch ein dokumentiertes Limit von 10MB
für die Größe eines String, der an ein RESTlet übergeben oder von diesem zurückgegeben wird. Es gibt keine andere Dokumentation zu den spezifischen Grenzwerten für ein bestimmtes Skript.
Wie viele Einheiten habe ich noch?
Verwenden Sie in SuiteScript 1.0 nlobjContext.getRemainingUsage()
, um die verbleibenden Einheiten abzurufen. Eine nlobjContext
Referenz abgerufen wird, die globale Verwendung nlapiGetContext
Funktion.
// 1.0
var context = nlapiGetContext();
nlapiLogExecution("DEBUG", "Governance Monitoring", "Remaining Usage = " + context.getRemainingUsage());
nlapiSearchRecord("transaction"); // uses 10 units
nlapiLogExecution("DEBUG", "Governance Monitoring", "Remaining Usage = " + context.getRemainingUsage());
Verwenden Sie in SuiteScript 2.0 die getRemainingUsage
Methode des Script
Objekts des N/runtime
Moduls.
// 2.0
require(["N/log", "N/runtime", "N/search"], function (log, runtime, s) {
var script = runtime.getCurrentScript();
log.debug({
"title": "Governance Monitoring",
"details": "Remaining Usage = " + script.getRemainingUsage()
});
s.load({"id":"customsearch_mysearch"}); // uses 5 units
log.debug({
"title": "Governance Monitoring",
"details": "Remaining Usage = " + script.getRemainingUsage()
});
});