Salesforceのガバナー制限は、Salesforceの安定性と効率を維持するために非常に重要です。Salesforce(およびApex)はリソースを共有するマルチテナント環境で実行されるため、ガバナー制限は単一のユーザーがすべてのリソースを消費しないようにする役割を果たし、プラットフォームの公平性と応答性を維持します。
この記事では、これらの制限の意味と、制限の範囲内で効果的に働く方法を理解するのに役立つだろう。
1.Salesforceガバナーとは何ですか?
定義
Salesforce ガバナーとは、Salesforce 内のシステムメカニズムで、リソースの使用に特定の制限をかけるものです。システムリソースの公平な分配を保証するチェックポイントのようなものと考えてください。
役です:
ガバナーは、単一のテナントがリソースを独占することを防ぎます。これにより、Salesforceの環境は安定し、すべてのユーザーにとって効率的なものとなります。
2.Salesforce ガバナー・リミットとは何ですか?
SFDC Governor Limits は、システムのパフォーマンスとセキュリティを維持するために Salesforce によって強制される特定の制限です。
Salesforceのガバナー・リミットは、図書館の貸出規則だと考えてください。図書館では、誰もがアクセスできるように、一度に一定数の本(リソース)を借りることができます。Salesforceの各操作は、本を借りるようなものです。本の数には制限があります(クエリ, DMLステートメント)の公正な利用と利用可能性を確保するために借りることができる。
➡️ なお、Salesforceのガバナー制限にはストレージは含まれていない。
Salesforceのデータとストレージの制限については、他の記事をご覧ください。
Salesforceデータコスト削減とコンプライアンスの強化 そして Salesforce ストレージの上限を超えた。.
APIコールの制限もこの記事の範囲外だが、1日のAPIコール制限が存在することに注意。この制限は、組織のタイプとライセンスによって異なります。SalesforceのAPI制限を(プログラムで)確認するには OrgLimitsクラス.に関する詳細情報 APIリクエストの上限と割り当て の記事を参照されたい。
3.一般的な Salesforce ガバナー制限の種類
SOQLクエリの制限:
- SOQL クエリが多すぎる」エラーは、1 つのトランザクションで最大数を超える SOQL クエリが実行された場合に発生します。SOQLクエリーで 親子サブクエリそれぞれの親子関係は、追加のクエリとしてカウントされる。
- 最大クエリー数:100(同期)、200(非同期)。
結果の行数制限:
- Too many Query rows "エラーは、1つのトランザクション内のクエリが許容行数を超える行を返す場合に発生します。
- 最大クエリ行数50 000
DML ステートメントの制限:
- Too many DML statements(DML文が多すぎます)」エラーは、1つのトランザクション内で許容数を超えるDML操作が実行された場合に発生する。
- 最大DMLオペレーション:150(同期)、300(非同期)。
ヒープサイズの制限:
- Apex heap size too large "エラーは、処理中にメモリに保存されるデータが多すぎる場合に発生する。
- 最大ヒープサイズ:6MB(同期)、12MB(非同期)。
CPUの時間制限:
- Apex CPU time limit exceeded "エラーは、トランザクションに時間がかかりすぎ、最大CPU時間を超過したことを意味します。
- 最大CPU時間:10,000ミリ秒(同期)、60,000ミリ秒(非同期)。
その他のガバナー制限については Apexデベロッパーガイド.
4.ガバナー・リミットの超過例と解決策
開発者が直面する一般的な問題の1つに、"101 Too Many SOQL Queries" ガバナー制限例外がある。このエラーは、1つのトランザクション(同期モード)で100を超えるSOQLクエリーが実行された場合に発生します。
例 次のコード・スニペットは、ループの中で口座の詳細を取得しようとしている:
public class AccountProcessor {
public void processAccounts() { {.
List accounts = [SELECT Id, Name FROM Account];
for (アカウント acc : アカウント) {
// ループ内のこのクエリは、アカウントが多い場合、SOQLの制限を簡単に超えてしまいます。
List contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :acc.Id];
// 連絡先を処理する
}
}
}
アカウント数が100を超えると、このコードはすぐに101のSOQLクエリ制限にぶつかります。
解決策 より良い方法は、クエリーを一括化することだろう:
public class AccountProcessor {
public void processAccounts() { {.
List accounts = [SELECT Id, Name FROM Account];
Set accountIds = new Set();
for (アカウント acc : アカウント) {
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 (コンタクト con : contacts) {
if (!accountContactsMap.containsKey(con.AccountId)) {.
accountContactsMap.put(con.AccountId, new List());
}
accountContactsMap.get(con.AccountId).add(con);
}
for (アカウント acc : アカウント) {
List acctContacts = accountContactsMap.get(acc.Id);
// 連絡先を処理する
}
}
}
このリファクタリングされたコードは少し長くなるかもしれませんが、SOQLの制限を回避し、単一のクエリですべての関連コンタクトをフェッチします。
101 Too Many SOQL Queries" Governor Limit Exceptionは、各ファイルをアップロードするためにクエリーを使用する場合、ファイルをアップロードするときにもよく発生します。
5.Salesforce ガバナー・リミットの監視方法
リソースの使用量を監視することは、これらの制限に当たらないようにするために不可欠です。このためには、Salesforce Developer Consoleを使用してください。
前述したエラーのいずれかが表示された場合、デバッグログが役に立ちます。Salesforceは 限界 クラス のような組み込みメソッドと
- getQueries();
- getDML();
DML制限にカウントされるステートメントで処理されたレコード数を返します。
ガバナー・リミット・エラーの最も一般的な原因は以下の通りである:
- ループの中にクエリーとオペレーションを持つ ループ内部でのDML操作やクエリは避ける。
- 不適切なエラー処理: 予期せぬ制限エラーを防ぐために、適切な例外処理を実装する。
7.ガバナー限度額管理のベストプラクティス
制限内にとどまるためには、以下のベストプラクティスに従ってください:
効率的なクエリ:
- ループではなく、1回のクエリーで必要なデータをすべて取得するようにしてください。ループが必要な場合は、SOQLのforループを使用する。結果セットの行数が多すぎることが問題の場合は、クエリでLimitとFilterを使用してください。
バルク処理:
- バルク処理のメソッドとデザイン・パターンを使用する。レコードをコレクションに結合し、バルク DML 操作を実行する。
コレクションの使用:
- コレクションを使用することで、DML操作を最小限に抑えます。
コードの最適化:
- 効率的で最適化されたコードを書く。不必要なループを避け、効率的なアルゴリズムを使う。
取引の管理
- 大規模なオペレーションを管理するために、非同期処理を選択する。
8.大容量データに対する高度な戦略
大量のデータを管理するには、非同期処理、バッチ処理、ジョブのキューイングなどの戦略が必要です。
用途 将来の方法, バッチ・エイペックスであり キュー・エイペックス を使用することで、さまざまな制限を超えることなく広範なオペレーションに対応することができる。
9.ガバナー・リミット
ガバナ制限は、Salesforceのマルチテナントアーキテクチャにおけるリソースの公正な使用を保証します。これらの制限がどのようなもので、どのように機能するかを理解することで、エラーを回避し、アプリケーションのパフォーマンスを最適化することができます。
SOQL クエリ制限、DML ステートメント制限、ヒープサイズ、CPU 時間制限のような Governor Limits の主要なタイプについて説明しました。また、Developer Console と OrgLimits クラスを使用してこれらの制限を監視する方法も説明しました。効率的なクエリ、一括処理、非同期処理などのベストプラクティスに従って、これらの制限を守ることが重要です。
例えば、Batch ApexやQueueable Apexを使用して大規模なデータトランザクションを分解することで、リソースの使用状況を管理し最適化することができます。同様に、ループ内でクエリやDML操作を実行するような落とし穴を理解することで、一般的なエラーを防ぐことができます。
効率的なコードと適切なリソース管理は、制限にぶつかるリスクを軽減するだけでなく、Salesforce環境を共有するすべてのユーザーのスムーズな操作を保証することを忘れないでください。
10.よくある質問(FAQ)
- Salesforceのガバナーリミットとは何ですか?
- ガバナ制限は、Salesforceがシステムリソースを管理するために実施する制限である。
- なぜSalesforceはガバナー制限を実施するのか?
- リソースを公平に使用し、システムのパフォーマンスを維持する。
- ガバナー・リミットに近づいているかどうかを確認するには?
- Salesforce開発者コンソールおよび以下のようなツールを使用してください。 限界 クラスの使用状況を監視する。
- ガバナー・リミットを超えるとどうなりますか?
- 制限を超えるとエラーとなり、トランザクションは失敗する。
- Salesforceのガバナー制限をバイパスできますか?
- 制限は厳しく実施されるが、次のように、既存の制限内で動作するようにコードを変更することができる。 例.
著者について
記入例 アナ・ネト技術顧問、Connecting Softwareで。
"私は1997年からソフトウェア・エンジニアであり、最近は書くことと人前で話すことが好きです。この記事について質問やコメントはありますか?ご意見・ご感想をお待ちしております!"