netsuite
Governance
Ricerca…
Osservazioni
Governance
"Governance" è il nome dato al sistema NetSuite per il rilevamento e l'interruzione di script a esecuzione prolungata, in esecuzione o ad uso intensivo delle risorse.
Ogni tipo di script ha limiti di governance che non può superare e sono disponibili quattro tipi di limiti di governance per ogni tipo di script.
- Limite di utilizzo dell'API
- Limite di conteggio delle istruzioni
- Limite di timeout
- Limite di utilizzo della memoria
Se uno script supera il limite di governance in una qualsiasi di queste quattro aree, NetSuite genererà un'eccezione impenibile e interromperà immediatamente lo script.
Limite di utilizzo API
NetSuite limita l'utilizzo dell'API degli script con un sistema basato su "unità di utilizzo". Alcune chiamate API NetSuite, in particolare quelle che eseguono un'azione di lettura o scrittura sul database, costano un numero specifico di unità ogni volta che vengono richiamate. Ogni tipo di script ha quindi un numero massimo di unità che possono essere utilizzate durante ogni esecuzione dello script.
Se uno script supera il limite di utilizzo dell'API, NetSuite termina lo script SSS_USAGE_LIMIT_EXCEEDED
un errore SSS_USAGE_LIMIT_EXCEEDED
.
Di seguito sono riportati alcuni esempi di costi unitari per le operazioni comuni. Per un elenco completo dei costi di governance, consultare l'articolo intitolato "Governance API" nella Guida di NetSuite.
operazione | Costo unitario |
---|---|
Caricamento di una ricerca salvata | 5 |
Recupero dei risultati di ricerca | 10 |
Pianificazione di un'attività | 10 |
Richiesta di un URL | 10 |
Invio di un'email | 10 |
Creare un record personalizzato | 2 |
Creazione di un record dipendente | 5 |
Creazione di un record dell'ordine di vendita | 10 |
Salvataggio di un record personalizzato | 4 |
Salvataggio di un record di contatto | 10 |
Salvataggio di un record dell'ordine d'acquisto | 20 |
Diverse operazioni utilizzano quantità diverse di unità e alcune operazioni costano un importo diverso in base al tipo di record utilizzato. Maggiore è il numero di unità a cui una funzione costa, in genere più tempo ci vorrà per eseguire.
Le transazioni sono il più grande dei tipi di record, quindi lavorare con loro costa la maggior quantità di unità. Viceversa, i record personalizzati sono molto leggeri e quindi non costano molte unità. I record NetSuite standard che non sono Transazioni, come Clienti, Dipendenti o Contatti, si collocano tra i due in termini di costi.
Questi sono i limiti di utilizzo per tipo di script:
Tipo di script | Limite di utilizzo |
---|---|
Cliente | 1.000 |
Evento utente | 1.000 |
Suitelet | 1.000 |
Portlet | 1.000 |
Azione del flusso di lavoro | 1.000 |
Restlet | 5.000 |
In programma | 10.000 |
Riduci mappa | 10.000 |
Installazione del pacchetto | 10.000 |
Aggiornamento di massa | 10.000 per record |
Limiti di timeout e di conteggio delle istruzioni
NetSuite utilizza inoltre il sistema di governance per rilevare e bloccare gli script di fuga utilizzando un meccanismo di timeout e un contatore di istruzioni.
Se uno script impiega troppo tempo per essere eseguito, NetSuite lo interrompe SSS_TIME_LIMIT_EXCEEDED
un errore SSS_TIME_LIMIT_EXCEEDED
.
Inoltre, gli script di fuga possono essere rilevati e fermati in base al loro "Conteggio istruzioni". Se i limiti del conteggio delle istruzioni definiti vengono superati, NetSuite interromperà lo script SSS_INSTRUCTION_COUNT_EXCEEDED
un errore SSS_INSTRUCTION_COUNT_EXCEEDED
.
Sfortunatamente non esiste una documentazione della Guida che definisca:
- il timeout per ogni tipo di script
- i limiti del conteggio delle istruzioni per ogni tipo di script
- cosa costituisce una singola "istruzione"
È semplicemente importante sapere che se si verifica l'errore SSS_TIME_LIMIT_EXCEEDED
o l'errore SSS_INSTRUCTION_COUNT_EXCEEDED
in uno dei propri script, l'elaborazione richiede troppo tempo. Focalizza la tua indagine sulle strutture del tuo loop per determinare dove possono essere fatte le ottimizzazioni.
Limite di utilizzo della memoria
Se lo script supera il limite di utilizzo della memoria, NetSuite interromperà lo script SSS_MEMORY_USAGE_EXCEEDED
un errore SSS_MEMORY_USAGE_EXCEEDED
.
Ogni variabile dichiarata, ogni funzione definita, ogni oggetto memorizzato contribuisce all'utilizzo della memoria del tuo script.
Sia lo script programmato che la mappa / lo script di riduzione hanno documentato i limiti di memoria di 50MB
. Esiste anche un limite documentato di 10MB
per la dimensione di qualsiasi stringa passata o restituita da un RESTlet. Non c'è altra documentazione sui limiti specifici per un determinato script.
Quante unità rimango?
In SuiteScript 1.0, utilizzare nlobjContext.getRemainingUsage()
per recuperare le unità rimanenti. Un riferimento nlobjContext
viene recuperato utilizzando la funzione globale nlapiGetContext
.
// 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());
In SuiteScript 2.0, utilizzare il metodo getRemainingUsage
dell'oggetto Script
del modulo N/runtime
.
// 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()
});
});