治理

治理

Governance 是 NetSuite 用于检测和暂停长时间运行,失控或资源密集型脚本的系统的名称。

每种脚本类型都具有不能超过的治理限制,并且每种脚本类型都有四种类型的治理限制。

  • API 使用限制
  • 指令计数限制
  • 超时限制
  • 内存使用限制

如果脚本在这四个区域中的任何一个区域中超出其治理限制,NetSuite 将抛出一个无法捕获的异常并立即终止该脚本。

API 使用限制

NetSuite 使用基于使用单位的系统限制脚本的 API 使用。某些 NetSuite API 调用(特别是对数据库执行读取或写入操作的调用)每次调用时都会花费特定数量的单元。然后,每个脚本类型都具有可在每次执行脚本期间使用的最大单元数。

如果脚本超出其 API 使用限制,NetSuite 会通过抛出 SSS_USAGE_LIMIT_EXCEEDED 错误来终止脚本。

以下是常见操作的单位成本的几个示例。有关治理成本的详尽列表,请参阅 NetSuite 帮助中标题为“API 治理”的文章。

操作 单位成本
加载已保存的搜索 5
检索搜索结果 10
安排任务 10
请求 URL 10
发送电子邮件 10
创建自定义记录 2
创建员工记录 5
创建销售订单记录 10
保存自定义记录 4
保存联系人记录 10
保存采购订单记录 20

不同的操作使用不同数量的单元,并且某些操作基于所使用的记录类型而花费不同的量。函数成本的单位数越多,通常执行的时间就越长。

事务是记录类型中最大的事务,因此使用它们会花费最多的单位。相反,自定义记录非常轻量级,因此不需要花费很多单位。标准 NetSuite 的记录是交易,如客户,雇员或隐形眼镜,在成本方面坐在介于两者之间。

这些是脚本类型的使用限制:

脚本类型 使用限制
客户 1000
用户事件 1000
Suitelet 1000
门户 1000
工作流程动作 1000
Restlet 5000
计划
Map / Reduce
绑定安装
批量更新 每条记录 10,000

超时和指令计数限制

NetSuite 还使用治理系统通过使用超时机制和指令计数器来检测和暂停失控脚本。

如果脚本需要花费太多时间来运行,NetSuite 会通过抛出 SSS_TIME_LIMIT_EXCEEDED 错误来阻止它。

此外,可以根据指令计数检测和暂停失控脚本。如果超出定义的指令计数限制,NetSuite 将通过抛出 SSS_INSTRUCTION_COUNT_EXCEEDED 错误来停止脚本。

遗憾的是,没有帮助文档定义:

  • 每种脚本类型的超时
  • 每种脚本类型的指令计数限制
  • 什么构成单一的指令

重要的是要知道,如果你在其中一个脚本中遇到 SSS_TIME_LIMIT_EXCEEDED 错误或 SSS_INSTRUCTION_COUNT_EXCEEDED 错误,则你的处理时间过长。将你的调查重点放在循环结构上,以确定可以进行优化的位置。

内存使用限制

如果你的脚本超出内存使用限制,NetSuite 将通过抛出 SSS_MEMORY_USAGE_EXCEEDED 错误来终止你的脚本。

声明的每个变量,每个定义的函数,每个存储的 Object 都会影响脚本的内存使用量。

无论是计划的脚本的 Map / Reduce 脚本已经证明 50MB 内存限制。对于传入 RESTlet 或从 RESTlet 返回的任何 String 的大小,还有文件限制的 10MB。没有关于给定脚本的特定限制的其他文档。