Salesforce 管理器限制对于保持 Salesforce 的稳定性和效率至关重要。鉴于 Salesforce(和 Apex)是在共享资源的多租户环境中运行的,调速器限制的作用是确保没有一个用户占用所有资源,从而保持平台对每个人的公平性和响应性。
本文将帮助您了解这些限制是什么,以及如何在这些限制范围内有效工作。
1.什么是 Salesforce 调速器?
定义
Salesforce 治理器是 Salesforce 中的一种系统机制,可对资源使用实施特定限制。可以将其视为确保系统资源公平分配的检查点。
角色。
治理器可防止任何单一租户垄断资源。这样就能为所有用户保持 Salesforce 环境的稳定和高效。
2.什么是 Salesforce 总调速器限值?
SFDC 管理员限制是 Salesforce 为维护系统性能和安全性而强制执行的特定限制。
将 Salesforce 中的 "州长限制 "视为图书馆的借阅规则。图书馆允许您一次借阅一定数量的图书(资源),以确保每个人都能使用。Salesforce 中的每个操作就像借书一样。借阅图书(资源)的数量是有限制的。疑问, DML 语句) 您可以借用,以确保其公平使用和可用性
➡️ 请注意,Salesforce 总督限额不包括存储空间。
有关 Salesforce 数据和存储限制的信息,请查看我们的其他文章
Salesforce 数据:降低成本,提高合规性 和 Salesforce 储存量超标.
API 调用限制也超出了本文的讨论范围,但请注意存在每日 API 调用限制。该限制因组织类型和许可证而异。您可以使用 OrgLimits 类.更多信息 应用程序接口请求限制和分配 文章
3.Salesforce 总调速器限制的常见类型
SOQL 查询限制:
- 当单个事务中执行的 SOQL 查询次数超过最大值时,就会出现 "SOQL 查询过多 "错误。在带有 父子子查询,每个父子关系都算一个额外查询。
- 最大查询次数:100(同步),200(异步)。
结果行限制:
- 当单个事务中的查询返回行数超过允许的行数时,就会出现 "查询行数过多 "错误。
- 最大查询行数:50 000
DML 语句限制:
- 当单个事务中执行的 DML 操作超过允许的数量时,就会出现 "DML 语句过多 "错误。
- 最大 DML 操作数:150(同步),300(异步)。
堆大小限制
- 当处理过程中内存中存储的数据过多时,就会出现 "Apex 堆大小过大 "错误。
- 最大堆大小:6 MB(同步),12 MB(异步)。
CPU 时间限制:
- 超过 Apex CPU 时间限制 "错误意味着您的事务耗时过长,超过了 CPU 的最长时间。
- 最大 CPU 时间:10,000 毫秒(同步),60,000 毫秒(异步)。
有关其他类型的调速器限制,请查看 Apex 开发人员指南.
4.超出总督限额:示例与解决方案
开发人员面临的一个常见问题是 "101 个 SOQL 查询过多 "调速器限制异常。当单个事务(同步模式)中执行的 SOQL 查询超过 100 个时,就会出现这种错误。
例如 请看下面的代码片段,它试图在一个循环中获取账户详细信息:
公共类 AccountProcessor {
公共 void processAccounts() {
List accounts = [SELECT Id, Name FROM Account];
for (Account acc : accounts) {
// 如果账户较多,循环中的这种查询很容易超过 SOQL 限制
List contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :acc.Id];
// 处理联系人
}
}
}
如果账户数超过 100,该代码将很快达到 101 SOQL 查询的限制。
解决方案 更好的方法是批量化查询:
公共类 AccountProcessor {
公共 void processAccounts() {
List accounts = [SELECT Id, Name FROM Account];
Set accountIds = new Set();
for (Account acc : accounts) {
accountIds.add(acc.Id);
}
List contacts = [SELECT Id, Name, AccountId FROM Contact WHERE AccountId IN :accountIds];
Map<Id, List> accountContactsMap = new Map<Id, List>();
for (Contact con : contacts) {
if (!accountContactsMap.containsKey(con.AccountId)) {
accountContactsMap.put(con.AccountId, new List());
}
accountContactsMap.get(con.AccountId).add(con);
}
for (Account acc : accounts) {
List acctContacts = accountContactsMap.get(acc.Id);
// 处理联系人
}
}
}
重构后的代码可能会稍长一些,但它能在一次查询中获取所有相关联系人,避免了 SOQL 的限制。
当使用查询上传每个文件时,"101 太多 SOQL 查询 "总督限制异常在上传文件时也很常见。
5.如何监控 Salesforce 总调速器限值
要确保不超出这些限制,监控资源使用情况至关重要。为此,您应使用 Salesforce 开发人员控制台。
如果出现前面提到的错误,调试日志可以提供帮助。Salesforce 还提供了 限制 类 等内置方法
- getQueries();
- getDML();
返回已使用任何语句处理的记录数,该语句不计入 DML 限制。
调速器限位错误最常见的原因是
- 在循环中进行查询和操作 避免在循环内进行 DML 操作和查询。
- 错误处理不当: 实施适当的异常处理,防止出现意想不到的极限错误。
7.管理总督限额的最佳做法
为了不超出限制,请遵循以下最佳做法:
高效查询
- 尽量在一次查询中检索所有必要的数据,而不是在一个循环中检索。如果需要循环,请使用 SOQL 的 for 循环。如果您的问题是结果集中有太多记录,请在查询中使用 "限制 "和 "过滤"。
批量加工:
- 使用批量处理方法和设计模式。将记录合并到集合中,并执行批量 DML 操作。
藏品的使用:
- 通过使用集合最大限度地减少 DML 操作。
代码优化:
- 编写高效、优化的代码。避免不必要的循环,使用高效算法。
指导交易:
- 选择异步处理来管理大规模操作。
8.大数据量的高级策略
9.总督任期限制 简而言之
管理限制可确保在 Salesforce 的多租户架构中公平使用资源。通过了解这些限制的内容和功能,您可以避免错误并优化应用程序的性能。
我们讨论了主要类型的治理器限制,如 SOQL 查询限制、DML 语句限制、堆大小和 CPU 时间限制。我们还展示了如何使用开发者控制台和 OrgLimits 类监控这些限制。遵循高效查询、批量处理和异步处理等最佳实践对保持在这些限制范围内非常重要。
例如,使用 Batch Apex 或 Queueable Apex 分解大型数据事务,有助于管理和优化资源使用。同样,了解在循环中运行查询或 DML 操作等陷阱,也能避免常见错误。
请记住,高效的代码和适当的资源管理不仅能降低触及限制的风险,还能确保共享 Salesforce 环境的所有用户都能顺利运行。
10.常见问题(FAQ)
- 什么是 Salesforce 总调速器限值?
- 治理器限制是 Salesforce 用来管理系统资源的限制。
- 为什么 Salesforce 执行 "总督限制"?
- 它们能确保资源的公平使用并维持系统性能。
- 如何检查我是否已接近总督任期?
- 使用 Salesforce 开发人员控制台和工具,如 限制 类来监控使用情况。
- 超过州长限额会怎样?
- 超过限额会导致错误和交易失败。
- 能否绕过 Salesforce 总调速器的限制?
- 限制是严格执行的,但您可以更改代码,以便在现有限制范围内工作,如以下所示 例子.
关于作者
作者 Ana Neto在Connecting Software担任技术顾问。
"自 1997 年以来,我一直是一名软件工程师,最近开始喜欢写作和公开演讲。您对本文有任何问题或评论吗?欢迎在下方留言!"