Salesforce 总调速器限制说明

Salesforce 总调速器限制说明

Ana NetoTechnical Leave a Comment

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 限制。

6.避免调速器限位错误的常见原因

调速器限位错误最常见的原因是

  • 在循环中进行查询和操作 避免在循环内进行 DML 操作和查询。
  • 错误处理不当: 实施适当的异常处理,防止出现意想不到的极限错误。

7.管理总督限额的最佳做法

为了不超出限制,请遵循以下最佳做法:

高效查询

  • 尽量在一次查询中检索所有必要的数据,而不是在一个循环中检索。如果需要循环,请使用 SOQL 的 for 循环。如果您的问题是结果集中有太多记录,请在查询中使用 "限制 "和 "过滤"。

批量加工:

  • 使用批量处理方法和设计模式。将记录合并到集合中,并执行批量 DML 操作。

藏品的使用:

  • 通过使用集合最大限度地减少 DML 操作。

代码优化:

  • 编写高效、优化的代码。避免不必要的循环,使用高效算法。

指导交易:

  • 选择异步处理来管理大规模操作。

8.大数据量的高级策略

管理海量数据需要采取异步处理、批处理和作业排队等策略。

使用 @未来方法, 批处理 Apex可排队的顶点 以处理大量操作,而不会超出不同的限制。

9.总督任期限制 简而言之

管理限制可确保在 Salesforce 的多租户架构中公平使用资源。通过了解这些限制的内容和功能,您可以避免错误并优化应用程序的性能。

我们讨论了主要类型的治理器限制,如 SOQL 查询限制、DML 语句限制、堆大小和 CPU 时间限制。我们还展示了如何使用开发者控制台和 OrgLimits 类监控这些限制。遵循高效查询、批量处理和异步处理等最佳实践对保持在这些限制范围内非常重要。

例如,使用 Batch Apex 或 Queueable Apex 分解大型数据事务,有助于管理和优化资源使用。同样,了解在循环中运行查询或 DML 操作等陷阱,也能避免常见错误。

请记住,高效的代码和适当的资源管理不仅能降低触及限制的风险,还能确保共享 Salesforce 环境的所有用户都能顺利运行。

10.常见问题(FAQ)

  1. 什么是 Salesforce 总调速器限值?
    • 治理器限制是 Salesforce 用来管理系统资源的限制。
  2. 为什么 Salesforce 执行 "总督限制"?
    • 它们能确保资源的公平使用并维持系统性能。
  3. 如何检查我是否已接近总督任期?
    • 使用 Salesforce 开发人员控制台和工具,如 限制 类来监控使用情况。
  4. 超过州长限额会怎样?
    • 超过限额会导致错误和交易失败。
  5. 能否绕过 Salesforce 总调速器的限制?
    • 限制是严格执行的,但您可以更改代码,以便在现有限制范围内工作,如以下所示 例子.

关于作者

Ana Neto

作者 Ana Neto在Connecting Software担任技术顾问。

"自 1997 年以来,我一直是一名软件工程师,最近开始喜欢写作和公开演讲。您对本文有任何问题或评论吗?欢迎在下方留言!"

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.