Лимиты губернатора Salesforce имеют решающее значение для поддержания стабильности и эффективности Salesforce. Учитывая, что Salesforce (и Apex) работают в многопользовательской среде с общими ресурсами, лимиты губернатора служат для того, чтобы ни один пользователь не потреблял все ресурсы, обеспечивая справедливость и отзывчивость платформы для всех.
Эта статья поможет вам понять, что это за ограничения и как эффективно работать в их рамках.
1. Что такое губернатор Salesforce?
Определение:
Salesforce Governor - это системный механизм в Salesforce, который устанавливает определенные ограничения на использование ресурсов. Считайте его контрольной точкой, обеспечивающей справедливое распределение системных ресурсов.
Роль:
Управляющие не позволяют одному арендатору монополизировать ресурсы. Благодаря этому среда Salesforce остается стабильной и эффективной для всех пользователей.
2. Что такое лимиты губернатора Salesforce?
SFDC Governor Limits - это конкретные ограничения, установленные Salesforce для поддержания производительности и безопасности системы.
Считайте, что Governor Limits в Salesforce - это правила выдачи книг в библиотеке. Библиотека позволяет брать определенное количество книг (ресурсов) за один раз, чтобы обеспечить всем доступ. Каждая операция в Salesforce похожа на заимствование книги. Существуют ограничения на количество книг (запросы, Операторы DML) вы можете взять в долг, чтобы обеспечить справедливое использование и доступность его
➡️ Обратите внимание, что лимиты губернатора Salesforce не включают хранение.
Информацию о лимитах данных и хранения в Salesforce можно найти в других наших статьях
Salesforce Data: Сократите расходы и повысьте уровень соответствия и Salesforce Превышен лимит хранения.
Лимиты вызовов API также выходят за рамки этой статьи, но имейте в виду, что существует ежедневный лимит вызовов API. Лимит зависит от типа организации и лицензии. Вы можете проверить лимиты API Salesforce (программно) с помощью функции Класс OrgLimits. Дополнительная информация о Лимиты и распределение запросов API статья.
3. Распространенные типы предельных параметров губернатора Salesforce
Ограничения запросов SOQL:
- Ошибка "Too Many SOQL Queries" возникает, когда в одной транзакции выполняется больше, чем максимальное количество SOQL-запросов. В запросе SOQL с подзапросы родитель-ребенокКаждое отношение родитель-ребенок считается дополнительным запросом.
- Максимальное количество запросов: 100 (синхронно), 200 (асинхронно).
Ограничения строк результатов:
- Ошибка "Too many Query rows" возникает, когда запросы в одной транзакции возвращают больше допустимого количества строк.
- Максимальное количество строк запроса: 50 000
Ограничения на выполнение операций DML:
- Ошибка "Слишком много операторов DML" возникает, когда в рамках одной транзакции выполняется больше допустимого количества операций DML.
- Максимальное количество операций DML: 150 (синхронно), 300 (асинхронно).
Ограничения на размер кучи:
- Ошибка "Размер кучи Apex слишком велик" возникает, когда в процессе обработки в памяти хранится слишком много данных.
- Максимальный размер кучи: 6 МБ (синхронно), 12 МБ (асинхронно).
Ограничения времени работы процессора:
- Ошибка "Apex CPU time limit exceeded" означает, что ваша транзакция заняла слишком много времени, превысив максимальное время работы процессора.
- Максимальное процессорное время: 10 000 мс (синхронное), 60 000 мс (асинхронное).
Чтобы узнать о других типах ограничений губернатора, проверьте Руководство разработчика Apex.
4. Превышение лимитов губернатора: Пример и решение
Одна из распространенных проблем, с которой сталкиваются разработчики, - исключение "101 Too Many SOQL Queries". Эта ошибка возникает, когда в одной транзакции (в синхронном режиме) выполняется более 100 SOQL-запросов.
Пример: Рассмотрим следующий фрагмент кода, который пытается получить данные о счете внутри цикла:
public class AccountProcessor {
public 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];
// Обработка контактов
}
}
}
Этот код быстро преодолеет ограничение в 101 SOQL-запрос, если количество учетных записей превысит 100.
Решение: Более эффективным подходом было бы расширение запроса:
public class AccountProcessor {
public 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 Too Many SOQL Queries" Governor Limit Exception также часто встречается при загрузке файлов, когда вы используете запрос для загрузки каждого файла.
5. Как контролировать лимиты управления Salesforce
Чтобы не превысить эти лимиты, необходимо следить за использованием ресурсов. Для этого следует использовать консоль разработчика Salesforce.
Если вы увидите одну из упомянутых ранее ошибок, вам помогут журналы отладки. Salesforce также предоставляет Лимиты класс и встроенные методы, такие как
- getQueries();
- getDML();
Возвращает количество записей, обработанных с помощью любого оператора, который учитывается в ограничениях DML.
Наиболее распространенными причинами ошибок предельных значений регулятора являются:
- Наличие запросов и операций в циклах: Избегайте операций DML и запросов внутри циклов.
- Неправильная обработка ошибок: Реализуйте правильную обработку исключений, чтобы предотвратить неожиданные ошибки ограничения.
7. Лучшие практики управления лимитами губернатора
Чтобы не выходить за рамки, следуйте этим рекомендациям:
Эффективные запросы:
- Старайтесь получать все необходимые данные в одном запросе, а не в цикле. Если цикл необходим, используйте циклы for в SOQL. Если проблема заключается в том, что в наборе результатов слишком много строк, используйте в запросах ограничения и фильтры.
Обработка сыпучих материалов:
- Используйте методы и шаблоны проектирования для групповой обработки. Объединяйте записи в коллекции и выполняйте массовые операции DML.
Использование коллекций:
- Минимизируйте операции DML, используя коллекции.
Оптимизация кода:
- Пишите эффективный, оптимизированный код. Избегайте лишних циклов и используйте эффективные алгоритмы.
Управляющие сделки:
- Для управления крупномасштабными операциями выбирайте асинхронную обработку.
8. Передовые стратегии для больших объемов данных
Управление большими объемами данных требует таких стратегий, как асинхронная обработка, пакетная обработка и постановка заданий в очередь.
Используйте @будущие методы, Batch Apexи Очередь Apex для выполнения больших операций без превышения различных ограничений.
9. Лимиты губернатора Вкратце
Лимиты губернатора обеспечивают справедливое использование ресурсов в многопользовательской архитектуре Salesforce. Понимая, что это за лимиты и как они функционируют, вы сможете избежать ошибок и оптимизировать работу вашего приложения.
Мы обсудили основные типы ограничений губернатора, такие как ограничения на запросы SOQL, ограничения на операторы DML, размер кучи и время процессора. Мы также показали, как отслеживать эти ограничения с помощью консоли разработчика и класса OrgLimits. Важно следовать лучшим практикам, таким как эффективные запросы, массовая обработка и асинхронная обработка, чтобы оставаться в рамках этих ограничений.
Например, разбиение больших транзакций данных с помощью Batch Apex или Queueable Apex поможет управлять и оптимизировать использование ресурсов. Аналогичным образом, понимание подводных камней, таких как выполнение запросов или операций DML в циклах, может предотвратить распространенные ошибки.
Помните, что эффективный код и правильное управление ресурсами не только снижают риски попадания в лимиты, но и обеспечивают бесперебойную работу всех пользователей, совместно использующих среду Salesforce.
10. Часто задаваемые вопросы (FAQ)
- Что такое лимиты губернатора Salesforce?
- Лимиты губернатора - это ограничения, которые Salesforce применяет для управления системными ресурсами.
- Почему Salesforce вводит лимиты губернатора?
- Они обеспечивают справедливое использование ресурсов и поддерживают производительность системы.
- Как я могу проверить, приближаюсь ли я к лимиту губернатора?
- Используйте консоль разработчика Salesforce и такие инструменты, как Лимиты класс для мониторинга использования.
- Что произойдет, если я превышу губернаторский лимит?
- Превышение лимита приводит к ошибкам и неудачным транзакциям.
- Можно ли обойти ограничения на управление Salesforce?
- Ограничения строго соблюдаются, но вы можете изменить свой код, чтобы он работал в рамках существующих ограничений, как показано здесь пример.
Об авторе
По адресу Ана НетоТаким образом, технический консультант в 1ТП17Т.
Я работаю инженером-программистом с 1997 года, а в последнее время полюбил писать и выступать публично". У вас есть вопросы или комментарии по поводу этой статьи? Я буду рад получить ваш отзыв, оставьте комментарий ниже!"