[Apex] 가버너 제한
Apex ガバナ制限 | Salesforce Developer の制限および割り当てクイックリファレンス | Salesforce Developers
Apex の制限については「実行ガバナと制限」を参照してください。 Apex はマルチテナント環境で実行するため、Apex ランタイムエンジンは、回避 Apex コードまたはプロセスが共有リソースを独
developer.salesforce.com
Apex ガバナ制限
Apex の制限については「実行ガバナと制限」を参照してください。
Apex はマルチテナント環境で実行するため、Apex ランタイムエンジンは、回避 Apex コードまたはプロセスが共有リソースを独占しないよう制限事項を強制します。
トランザクション単位の Apex 制限
これらの制限は、各 Apex トランザクションに対して効力を持ちます。Apex 一括処理の場合、これらの制限は execute メソッドでレコードのバッチの実行ごとにリセットされます。
次の表では、同期 Apex と非同期 Apex (Apex 一括処理と future メソッド) が異なる場合、それぞれの制限を記載しています。制限が同じ場合、表には、同期および非同期 Apex の両方に適用される 1 つの制限のみが記載されます。
発行される SOQL クエリの合計数1 | 100 | 200 |
SOQL クエリによって取得されるレコードの合計数 | 50,000 | |
Database.getQueryLocator によって取得されるレコードの合計数 | 10,000 | |
発行される SOSL クエリの合計数 | 20 | |
1 つの SOSL クエリによって取得されるレコードの合計数 | 2,000 | |
発行される DML ステートメントの合計数2 | 150 | |
DML ステートメントの結果として処理されるレコードの合計数、Approval.process、または database.emptyRecycleBin | 10,000 | |
insert、update、または delete ステートメントによって繰り返しトリガする Apex 呼び出しのスタックの深さの合計数 3 | 16 | |
トランザクション内のコールアウト (HTTP 要求または Web サービスコール) の合計数 | 100 | |
トランザクション内のすべてのコールアウト (HTTP 要求または Web サービスコール) のタイムアウトの最大累積値 | 120 秒 | |
Apex 呼び出し 1 回につき許可される future アノテーションを持つメソッドの最大数 | 50 | batch および future のコンテキストの場合 0、queueable コンテキストの場合 1 |
System.enqueueJob によってキューに追加される Apex ジョブの最大数 | 50 | 1 |
許可される sendEmail メソッドの合計数 | 10 | |
ヒープの合計サイズ 4 | 6 MB | 12 MB |
Salesforce サーバの最大 CPU 時間5 | 10,000 ミリ秒 | 60,000 ミリ秒 |
Apex トランザクションごとの最大実行時間 | 10 分 | |
Apex トランザクションごとに許容される転送通知メソッドコールの最大数 | 10 | |
各転送通知メソッドコールで送信できる転送通知の最大数 | 2,000 | |
直ちに公開するように設定されているプラットフォームイベントに対する EventBus.publish コールの最大数 | 150 |
- Database.countQuery
- Database.getQueryLocator
- Database.query
- Approval.process
- Database.convertLead
- Database.emptyRecycleBin
- Database.rollback
- Database.setSavePoint
- delete と Database.delete
- insert と Database.insert
- merge と Database.merge
- undelete と Database.undelete
- update と Database.update
- upsert と Database.upsert
- コミット後に公開するように設定されたプラットフォームイベントに対する EventBus.publish
- System.runAs
3 insert、update、または delete ステートメントによってトリガを実行しない繰り返し Apex 処理は、1 つのスタックを使用する 1 つの呼び出し内に存在します。それに対し、トリガを実行した繰り返し Apex では、新しい Apex 呼び出しでトリガが発生します。この新しい呼び出しは、コードを実行した呼び出しとは独立しています。Apex の新しい呼び出しの実行は、1 つの呼び出しでの繰り返しコールよりも手間のかかる操作です。したがって、これらの種類の繰り返しコールのスタックの深さには、より厳しいトリガ制限があります。
4 メールサービスのヒープサイズは 36 MB です。
5 CPU 時間は、1 つの Apex トランザクションで発生する Salesforce アプリケーションサーバ上でのすべての実行に対して計算されます。CPU 時間は、Apex コードや、このコードからコールされるすべてのプロセス (パッケージコードやワークフローなど) の実行に対して計算されます。CPU 時間は、1 つのトランザクション専用であり、他のトランザクションからは独立しています。アプリケーションサーバの CPU 時間を消費しない操作は、CPU 時間には含まれません。たとえば、実行時間のうち DML、SOQL、および SOSL 用のデータベースに費やされた時間や、Apex コールアウトの待ち時間は含まれません。DML 操作にかかるアプリケーションサーバの CPU 時間は、Apex CPU の制限に含まれますが、大きな影響はないと考えられます。
メモ
- 制限は、各 testMethod に対して個別に適用されます。
- 実行中にコードのコード実行制限を決定するには、Limits メソッドを使用します。たとえば、プログラムによってすでにコールされた DML ステートメント数を決定するには、getDMLStatements メソッドを使用できます。または、コードに使用できる DML ステートメントの合計数を決定するには、getLimitDMLStatements メソッドを使用できます。
トランザクション単位の認定管理パッケージの制限
認定管理パッケージ (AppExchange のセキュリティレビューに合格した管理パッケージ) には、ほとんどのトランザクション単位の制限に対して独自の制限セットが設けられます。AppExchange から組織にインストールされ、固有の名前空間を持つ認定管理パッケージを開発するのは、Salesforce ISV パートナーです。
1 つのトランザクションで呼び出せる認定名前空間の数は無制限です。ただし、各名前空間で実行できる操作の数は、トランザクションあたりの制限を超えることはできません。トランザクション内の全名前空間で実行できる累積操作数にも制限があります。この累積制限は、名前空間あたりの制限の 11 倍です。たとえば、SOQL クエリの名前空間あたりの制限が 100 だとすると、1 つのトランザクションで実行できる SOQL クエリは最大 1,100 個です。この場合、累積制限は名前空間あたりの制限 100 の 11 倍です。これらのクエリは、いずれかの名前空間のクエリが 100 を超えない限り、無制限の数の名前空間で実行できます。累積制限は、すべての名前空間で共有される制限 (最大 CPU 時間の制限など) に影響しません。
メモ
これらのクロス名前空間制限は、認定管理パッケージの名前空間にのみ適用されます。認定されていないパッケージの名前空間には、別個に独自のガバナ制限がありません。使用するリソースは、組織のカスタムコードで使用されるのと同じガバナ制限に対して引き続き不利となります。
次の表では、累積クロス名前空間制限について説明します。
発行される SOQL クエリの合計数 | 1,100 |
Database.getQueryLocator によって取得されるレコードの合計数 | 110,000 |
発行される SOSL クエリの合計数 | 220 |
発行される DML ステートメントの合計数 | 1,650 |
トランザクション内のコールアウト (HTTP 要求または Web サービスコール) の合計数 | 1,100 |
許可される sendEmail メソッドの合計数 | 110 |
Lightning Platform フォームの Apex 制限
次の表の制限は、Apex トランザクションに固有ではなく、Lightning プラットフォームによって適用されます。
24 時間あたりの非同期 Apex メソッド実行 (Apex 一括処理、future メソッド、キュー可能 Apex、およびスケジュール済み Apex) の最大数1 | 250,000 か、組織内のユーザライセンス数 × 200 の大きい方の値 |
組織ごとの、5 秒を超える長時間のトランザクションに対する同期同時トランザクション数 2 | 10 |
同時にスケジュールされる Apex クラスの最大数 | 100.Developer Edition 組織の制限は 5 です。 |
Apex Flex キューに入っている Holding 状況の Apex 一括処理ジョブの最大数 | 100 |
同時にキューに入っているか有効な Apex 一括処理ジョブの最大数3 | 5 |
Apex 一括処理ジョブの start メソッドの最大同時実行数4 | 1 |
1 つのテストの実行で送信可能な一括処理ジョブの最大数 | 5 |
24 時間あたりのキュー可能なテストクラスの最大数 (Developer Edition 以外の本番組織)5 | 500 または組織のテストクラス数の 10 倍の大きい方 |
24 時間あたりのキュー可能なテストクラスの最大数 (Sandbox 組織および Developer Edition 組織)5 | 500 または組織のテストクラス数の 20 倍の大きい方 |
ユーザごとに同時に開くクエリカーソルの最大数6 | 50 |
Apex 一括処理の start メソッドでユーザごとに同時に開くクエリカーソルの最大数 | 15 |
Apex 一括処理の execute および finish メソッドでユーザごとに同時に開くクエリカーソルの最大数 | 5 |
1 Apex 一括処理の場合、メソッド実行には、start、execute、および finish メソッドの実行が含まれます。これは組織全体の制限で、他のすべての非同期 Apex (Apex 一括処理、キュー可能 Apex、スケジュール済み Apex、および future メソッド) と共有されます。使用可能な非同期 Apex 実行の数を確認するには、REST API limits リソースに対して要求を実行します。『REST API 開発者ガイド』の「組織の制限をリストする」を参照してください。この制限に反映されるライセンスの種類は、Salesforce フルユーザライセンス、Salesforce Platform ユーザライセンス、アプリケーションサブスクリプションのユーザライセンス、Chatter Only ユーザ、Identity ユーザ、Company Community ユーザです。
2 10 個の長時間のトランザクションが実行されている間に追加のトランザクションが開始されると、追加のトランザクションは拒否されます。この制限を計算する場合、HTTP コールアウトの処理時間は含まれません。
3 一括処理ジョブが送信されると、処理用にシステムキューに移動されるまで、Flex キューに保持されます。
4 キュー内のまだ開始されていない一括処理ジョブは、開始されるまで保持されます。複数のジョブが実行されている場合は、この制限により一括処理ジョブが失敗することはありません。Apex の一括処理ジョブの execute メソッドは、依然として並行して実行されます。
5 この制限は、テストの非同期実行に適用されます。このテストグループには、開発者コンソールを含め、Salesforce ユーザインターフェースから開始するテストが含まれます。
6 たとえば、開いているカーソルが 50 個あるとします。同じユーザとしてログインしているクライアントアプリケーションで新しいカーソルを開こうとすると、50 個のうち最も古いカーソルが解放されます。異なる Lightning Platform 機能のカーソル制限は個別に追跡されます。たとえば、50 個の Apex クエリカーソル、Apex 一括処理の start メソッドに 15 個のカーソル、Apex 一括処理の execute および finish メソッドにそれぞれ 5 個のカーソル、および 5 個の Visualforce カーソルを同時に開くことができます。
静的 Apex の制限
トランザクション内のコールアウト (HTTP 要求または Web サービスコール) のデフォルトのタイムアウト値 | 10 秒 |
コールアウト要求または応答 (HTTP 要求または Web サービスコール) の最大サイズ 1 | 同期 Apex の場合は 6 MB、非同期 Apex の場合は 12 MB |
SOQL クエリの最大実行時間。この時間を超えると、Salesforce によってトランザクションがキャンセルされます。 | 120 秒 |
Apex リリース内のクラスとトリガの最大コードユニット数 | 7500 |
Apex トリガのバッチサイズ2 | 200 |
ループリストのバッチサイズ用 | 200 |
Database.QueryLocator の 1 回の Apex 一括処理のクエリで返される最大レコード数 | 5000 万 |
1 HTTP 要求のサイズおよび応答のサイズは、ヒープサイズの合計に含まれます。
2 プラットフォームイベントと変更データキャプチャイベントの Apex トリガバッチサイズは 2,000 です。
サイズ固有の Apex 制限
クラスの最大文字数 | 100 万 |
トリガの最大文字数 | 100 万 |
組織内のすべての Apex コードで使用されるコードの最大量1 | 6 MB |
メソッドのサイズ制限(制限を超える大規模なメソッドはコードの実行中に例外が発生する場合があります。) | コンパイル形式で 65,535 バイトコード命令 |
1 この制限は、第一世代 (1GP) または第二世代 (2GP) 管理パッケージの Apex コードには適用されません。これらのパッケージタイプのコードは、組織のコードとは異なる独自の名前空間に属しています。この制限は、@isTest アノテーションで定義されたクラスに含まれるコードにも適用されません。
2 制限を超える大規模なメソッドはコードの実行中に例外が発生する場合があります。
転送通知の制限
[プッシュ通知をテスト] ページで生成された各テストプッシュ通知の受信者は 1 名に制限されています。テストプッシュ通知は、組織の 1 時間のプッシュ通知制限に反映されます。
組織の 1 時間あたりのプッシュ通知制限に達した場合でも、REST API を介したアプリケーション内表示と取得用の追加の通知は作成されます。