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