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()
    });
});


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow