netsuite
ガバナンス
サーチ…
備考
ガバナンス
「ガバナンス」とは、長時間実行される、暴走する、またはリソースを消費するスクリプトを検出および停止するためのNetSuiteのシステムに与えられた名前です。
各スクリプト・タイプには、ガバナンス制限を超えることはできません。また、各スクリプト・タイプには4種類のガバナンス制限があります。
- API使用制限
- 命令数制限
- タイムアウト制限
- メモリ使用制限
スクリプトがこれらの4つの領域のいずれかでガバナンス制限を超えた場合、NetSuiteは検出不可能な例外をスローしてすぐにスクリプトを終了します。
API使用制限
NetSuiteは、スクリプトのAPI使用を「使用単位」に基づくシステムで制限します。一部のNetSuite API呼び出し、特にデータベースでの読み取りまたは書き込み操作を実行するAPIコールでは、呼び出されるたびに特定の数のユニットが必要です。各スクリプトの種類には、スクリプトの実行ごとに使用できる最大数があります。
スクリプトがAPI使用制限を超えた場合、NetSuiteはSSS_USAGE_LIMIT_EXCEEDED
エラーをスローすることによってスクリプトを終了します。
以下に、一般的な業務の単価の例をいくつか示します。ガバナンスコストの包括的なリストについては、NetSuiteヘルプの「APIガバナンス」の記事を参照してください。
操作 | 単価 |
---|---|
保存された検索の読み込み | 5 |
検索結果の取得 | 10 |
タスクのスケジューリング | 10 |
URLのリクエスト | 10 |
電子メールを送信する | 10 |
カスタムレコードの作成 | 2 |
従業員レコードの作成 | 5 |
受注伝票の登録 | 10 |
カスタムレコードの保存 | 4 |
連絡先レコードの保存 | 10 |
購買発注レコードの保存 | 20 |
異なる操作は異なる量の単位を使用し、特定の操作は使用されるレコードの種類に応じて異なる金額を必要とします。関数のコストが高いほど、通常は実行に時間がかかります。
トランザクションはレコードタイプの中で最大のものであるため、それらを扱うことで最大のコストがかかります。逆に、カスタムレコードは非常に軽量であるため、多くの単価はかかりません。顧客、従業員、または連絡先のような取引ではない標準のNetSuiteレコードは、コスト面で両者の間に位置します。
これらは、スクリプトの種類ごとの使用制限です。
スクリプトの種類 | 使用制限 |
---|---|
クライアント | 1,000 |
ユーザーイベント | 1,000 |
スイートレット | 1,000 |
ポートレット | 1,000 |
ワークフローアクション | 1,000 |
RESTlet | 5,000 |
予定 | 10,000 |
マップ/縮小 | 10,000 |
バンドルのインストール | 10,000 |
一括更新 | 1レコードにつき10,000 |
タイムアウトと命令数の制限
また、NetSuiteはガバナンスシステムを使用して、タイムアウトメカニズムと命令カウンタを使用して暴走スクリプトを検出して停止させます。
スクリプトの実行に時間がかかりすぎると、NetSuiteはSSS_TIME_LIMIT_EXCEEDED
エラーを投げてSSS_TIME_LIMIT_EXCEEDED
ます。
さらに、暴走したスクリプトは、それらの「命令カウント」に基づいて検出および停止することができます。定義された命令数の制限を超えると、NetSuiteはSSS_INSTRUCTION_COUNT_EXCEEDED
エラーをスローしてスクリプトを停止します。
残念ながら、以下を定義するヘルプドキュメントはありません :
- 各スクリプトタイプのタイムアウト
- 各スクリプトタイプの命令数の制限
- 単一の「命令」を構成するものは、
いずれかのSSS_TIME_LIMIT_EXCEEDED
エラーまたはSSS_TIME_LIMIT_EXCEEDED
エラーが発生した場合、処理に時間がかかりすぎることがSSS_INSTRUCTION_COUNT_EXCEEDED
ます。最適化が行われる場所を決定するためにループ構造に焦点を当てます。
メモリ使用制限
スクリプトがメモリの使用制限を超えた場合、NetSuiteはSSS_MEMORY_USAGE_EXCEEDED
エラーをスローしてスクリプトを終了します。
宣言されたすべての変数、定義されたすべての関数、保存されたすべてのオブジェクトは、スクリプトのメモリ使用量に寄与します。
スケジューリングされたスクリプトとMap / Reduceスクリプトの両方で50MB
メモリー制限が文書化されています。また、RESTletに渡された、またはRESTletから返されたストリングのサイズについては、文書化された10MB
制限があり10MB
。特定のスクリプトの特定の制限に関する他のドキュメントはありません。
いくつのユニットが残っていますか?
SuiteScript 1.0では、 nlobjContext.getRemainingUsage()
を使用して残りのユニットを取得します。 nlobjContext
参照は、グローバル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());
SuiteScript 2.0では、 N/runtime
モジュールのScript
オブジェクトのgetRemainingUsage
メソッドを使用します。
// 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()
});
});