サーチ…


備考

ガバナンス

「ガバナンス」とは、長時間実行される、暴走する、またはリソースを消費するスクリプトを検出および停止するための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()
    });
});


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow