Sök…


Anmärkningar

styrning

"Governance" är namnet som ges till NetSuites system för att upptäcka och stoppa långa körningar, språng eller resurskrävande skript.

Varje skriptyp har styrelsegränser som den inte kan överskrida, och det finns fyra typer av styrelsegränser för varje skriptyp.

  • API-användningsgräns
  • Instruktion Antal gränser
  • Tidsgräns
  • Begränsning av minnesanvändning

Om ett skript överskrider sin styrningsgräns inom något av dessa fyra områden, kommer NetSuite att kasta ett oavsiktligt undantag och avsluta skriptet omedelbart.

API-användningsgräns

NetSuite begränsar API-användningen av dina skript med ett system baserat på "användningsenheter". Vissa NetSuite API-samtal, särskilt de som utför en läs- eller skrivhandling i databasen, kostar ett visst antal enheter varje gång de åberopas. Varje skriptyp har då ett maximalt antal enheter som kan användas under varje exekvering av skriptet.

Om ett skript överskrider sin API-användningsgräns avslutar NetSuite skriptet genom att kasta ett SSS_USAGE_LIMIT_EXCEEDED fel.

Nedan följer några exempel på enhetskostnader för vanliga operationer. För en uttömmande lista över kostnader för styrning, se artikeln "API Governance" i NetSuite Hjälp.

Drift Enhetskostnad
Laddar en sparad sökning 5
Hämtar sökresultat 10
Schemalägga en uppgift 10
Begär en URL 10
Skickar ett e-postmeddelande 10
Skapa en anpassad post 2
Skapa en anställdsrekord 5
Skapa en försäljningsorderpost 10
Spara en anpassad post 4
Sparar en kontaktpost 10
Spara en inköpsorderpost 20

Olika operationer använder olika mängder enheter, och vissa operationer kostar ett annat belopp baserat på den posttyp som används. Ju större antalet enheter en funktion kostar, vanligtvis desto längre tid tar det att köra.

Transaktioner är de största av rekordtyperna, så att arbeta med dem kostar det största antalet enheter. Omvänt är anpassade poster mycket lätta och kostar därför inte många enheter. Standard NetSuite-poster som inte är transaktioner, som kunder, anställda eller kontakter, ligger mellan de två när det gäller kostnad.

Dessa är användningsgränserna efter skriptyp:

Skriptyp Användningsgräns
Klient 1000
Användarhändelse 1000
Suitelet 1000
portlet 1000
Arbetsflödesåtgärd 1000
RESTlet 5000
Planerad 10 tusen
Karta / Minska 10 tusen
Paketinstallation 10 tusen
Massuppdatering 10 000 per post

Tidsgränser och instruktionsgränser

NetSuite använder också styrningssystemet för att upptäcka och stoppa språngskript med hjälp av en timeout-mekanism och en instruktionsräknare.

Om ett skript tar för mycket tid att köra kommer NetSuite att stoppa det genom att kasta ett SSS_TIME_LIMIT_EXCEEDED fel.

Dessutom kan språngskript upptäckas och stoppas baserat på deras "Instruktionsräkning". Om de definierade gränsvärdena för instruktioner överskrids kommer NetSuite att stoppa skriptet genom att kasta ett SSS_INSTRUCTION_COUNT_EXCEEDED fel.

Det finns tyvärr ingen hjälpdokumentation som definierar:

  • tidsgränsen för varje skriptyp
  • instruktionerna räknar gränserna för varje skriptyp
  • vad som utgör en enda "instruktion"

Det är helt enkelt viktigt att veta att om du stöter på antingen SSS_TIME_LIMIT_EXCEEDED felet eller SSS_INSTRUCTION_COUNT_EXCEEDED felet i ett av dina skript, har du bearbetning som tar för lång tid. Fokusera din undersökning på dina slingstrukturer för att avgöra var optimeringar kan göras.

Begränsning av minnesanvändning

Om ditt skript överskrider minnesanvändningsgränsen, avslutar NetSuite ditt skript genom att kasta ett SSS_MEMORY_USAGE_EXCEEDED fel.

Varje variabel som deklareras, varje definierad funktion, varje objekt som lagras bidrar till minnesanvändningen av ditt skript.

Både det schemalagda skriptet och kartan / minska skriptet har dokumenterat 50MB minne. Det finns också en dokumenterad gräns på 10MB för storleken på alla strängar som skickas in till eller returneras från en RESTlet. Det finns ingen annan dokumentation om de specifika gränserna för ett givet skript.

Hur många enheter har jag kvar?

I SuiteScript 1.0 använder du nlobjContext.getRemainingUsage() att hämta de återstående enheterna. En nlobjContext referens hämtas med den globala nlapiGetContext funktionen.

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

I SuiteScript 2.0 använder getRemainingUsage metoden getRemainingUsage för N/runtime modulens Script .

// 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow