Apexはマルチテナント環境で実行されるため、Apexランタイムエンジンは共有リソースを独占しないように、いくつかの制限を厳しく実施します。
これらの制限またはガバナは、以下の表であらわされる数値に基づいてトラッキングされ、実施されます。
Apexコードが制限を超えた場合は、関連するガバナはハンドリング不可の実行時例外を出します。
ガバナ制限は、全組織、ならびに特定のnamespaceに適用されます。
たとえば、Salesforce.com ISV パートナーによって作成された管理パッケージをForce.com AppExchangeからインストールした場合、パッケージに含まれるコンポーネントは組織中の他のコンポーネントから独立したnamespaceに属しています。したがって、そのパッケージ中のApexコードは150回までDML文を実行できます。さらに、組織中に既に存在するApexコードも最大で150回のDML文を実行できます。それは、管理パッケージと既存の組織中コードの両方が実行された場合は、1回のリクエストで150回以上のDML文が実行されるかもしれないということを意味します。
一方で、Salesforce.com ISVパートナーによって作成されていないAppExchangeからパッケージをインストールした場合は、そのパッケージに含まれるコードは別のガバナ制限としてカウントされません。
累積的なリソースメッセージおよび警告電子メールも管理パッケージnamespaceに基づいて生成されます。
Salesforce.com ISVパートナーパッケージの詳細については、salesforce.com パートナープログラムを参照してください。
| 1回のトランザクションで実行できるSOQLクエリの合計回数1 |
100
|
| Batch Apex およびfutureメソッドにおいて1回のトランザクションで実行できるSOQLクエリの合計回数1 |
200
|
| 1回のトランザクションでSOQLクエリにより取得できる合計レコード数 |
50,000
|
| 1回のトランザクションで実行できるSOSLクエリの合計回数 |
20
|
| 1回のトランザクションでSOSLクエリにより取得できる合計レコード数 |
200
|
| 1回のトランザクションで実行できるDML文の合計回数2 |
150
|
| 1回のトランザクションでDML文、またはApproval.process、またはdatabase.emptyRecycleBinにより処理できる合計レコード数 |
10,000
|
| 1回のトランザクションで実行可能なステートメント数 |
200,000
|
| Batch Apex およびfutureメソッドにおいて1回のトランザクションで実行可能なステートメント数 |
1,000,000
|
| 1回のトランザクションで消費できるメモリヒープサイズ3
|
3 MB
|
| Batch Apex およびfutureメソッドにおいて1回のトランザクションで消費できるメモリヒープサイズ
|
6 MB3
|
| ApexからのDML文(insert, update, delete)呼び出しで再帰的に起動されるトリガの呼び出し階層の深さ4 |
16
|
| ForループListのバッチサイズ |
200
|
| 1回のリクエストで呼び出せるコールアウト処理の回数 (HTTPリクエスト または Web services コール) |
10
|
| 1回のリクエスト中のすべてのコールアウト処理のタイムアウト (HTTPリクエスト または Web services コール) |
120 秒
|
| 1回のリクエスト中のコールアウト処理のデフォルトタイムアウト (HTTPリクエスト または Web services コール) |
10 秒
|
| 1回のApex起動で実行できる@futureアノテーションがついたメソッド数5 |
10
|
| コールアウトリクエストまたはレスポンスの最大サイズ (HTTPリクエスト または Web services コール) 6 |
3 MB
|
| 1回のトランザクションで実行できるsendEmailメソッドの回数 |
10
|
| 1回のトランザクションで実行できるdescribeメソッドの回数7 |
100
|
1
親-子リレーションシップサブクエリのあるSOQL文では、各親-子リレーションシップは追加のクエリとしてカウントされます。このような形のクエリは制限値がトップレベルクエリの3倍となります。リレーションシップクエリ結果の行数はスクリプト実行全体の行数に含めてカウントされます。
2次のメソッドはリクエスト中のDML文の実行としてカウントされます。:
- Approval.process
- database.emptyRecycleBin
- delete および database.delete
- findSimilar
- insert および database.insert
- merge
- rollback
- runAs
- setSavePoint
- update および database.update
- upsert および database.upsert
3 Batch Apex のメモリヒープサイズは 6 MB です。電子メールサービスのメモリヒープサイズは 18 MB です。
4 insert, update,
または delete文によるトリガの実行を伴わない、再帰的なApex呼び出しは同一の処理レイヤとして扱われます。
一方、トリガにより起動された再帰的なApex呼び出しは、トリガを起動した呼び出しとは別の呼び出しとして扱われます。
なぜならば、新しいApex呼び出しはコストの高い処理であるため、このタイプの深い階層の呼び出しにはより厳しい制約が課せられるためです。
5Salesforceは、futureアノテーションに対する制限を課しています。24時間に、フルSalesforceユーザーライセンス数, Salesforce Platformユーザーライセンス数, および Force.com - One Appユーザーライセンス数毎に200回のメソッド呼び出しが可能です。これは組織単位での制限です。Chatter Only, ゲストユーザー, カスタマーポータルユーザー, およびパートナーポータルユーザーライセンスはこの制限の計算に含まれません。たとえば、ある組織が3つのフルSalesforceユーザーライセンスと2つのSalesforce Platformライセンスと、100のカスタマポータルユーザーライセンスを持っているとしましょう。組織全体では24時間に1,000回のメソッド呼び出しが可能です。( (3 + 2) * 200です。105ではありません。)
6HTTPリクエストおよびレスポンスのサイズは合計メモリヒープサイズの一部として計算されます。 この制限に関係なく、3MBの合計メモリヒープサイズを超えないようにしてください。
7 Describes は、次のメソッドおよびオブジェクトを含みます。:
- ChildRelationship objects
- RecordTypeInfo objects
- PicklistEntry objects
- fields calls
制限は、各 testMethodに対して独立して適用されます。
実行中のコードのスクリプト実行制限を判断するために、Limitsメソッドを使用してください。
たとえば、プログラムによって既にコールされたDML文の数を判断するためのgetDMLStatementsメソッドや、またはそのコンテキストでのDML文実行可能な回数を判断するための getLimitDMLStatementsメソッドを使用できます。
より効率的なSOQLクエリのために、特にトリガ中でのクエリでは、より絞り込み効果の高い、インデックスを利用したクエリを使用しください。絞り込み効果の高いクエリとは、プライマリキー(Id)、外部キー、Name項目、監査日付(例:
LastModifiedDate)、外部ID項目でフィルタリングするクエリです。
大きな組織では、実行時間が非常に長くなるのを防止するために性能の低いクエリは停止させることができます。停止させたい場合は、Salesforce.comの担当者に連絡してください。
static変数の値はAPIバッチごとにリセットされますが、ガバナ制限はリセットされません。APIバッチの状態のトラッキングにstatic変数を使わないでください。なぜならば、Salesforceはユーザーが指定したバッチサイズよりもより細かい単位にバッチを分割している可能性があるためです。
実行時のガバナ制限に加え、
Apexには次の制限があります:
電子メールの制限
- インバウンド電子メールの制限
-
| 電子メールサービス: 処理可能な電子メールメッセージの最大数 (オンデマンド電子メール-to-caseを含む) |
ライセンス数に1,000を乗じた数 |
| 電子メールサービス: 電子メールメッセージの最大サイズ (ボディおよび添付) |
10 MB1
|
| オンデマンド電子メール-to-ケース: 添付ファイルの最大サイズ |
10 MB
|
| オンデマンド電子メール-to-ケース: 処理可能な電子メールメッセージの最大数 (電子メールサービスの制限と合算されます) |
Number of user licenses multiplied
by 1,000
|
1 電子メールサービスにおけるメッセージの最大サイズは言語と文字コードセットに依存します.電子メールサービスを作成する際は次の点に注意してください:
- 電子メールサービスは受信したメール中の1つのアドレスのみ処理します。
- Salesforceは、オンデマンド電子メール-to-ケースを含む、統合された電子メールサービスの処理可能な数を日次で制限します。制限を超えたメッセージはバウンスされ、破棄されるか次の日に実行されるキューに入れられます。この動作は、各電子メールサービスの「メールの処理数制限超過時のアクション」設定により選択可能です。
Salesforce はユーザライセンス数に1,000を乗じた数で制限値を求めます。たとえば、もし10ライセンスをお持ちであれば組織は最大10,000/日の電子メールメッセージを処理できます。
- Sandbox組織で作成した電子メールサービスアドレスは、本番組織へコピーできません。
- 各電子メールサービスのエラーメールを、送信者のアドレスの代わりの特定のアドレスへ送信するようにSalesforceを設定できます。
-
電子メール(テキスト本文、HTML本文および添付ファイルを含む)が約10MB(言語や文字セットにより異なります)を超えた場合、電子メールサービスは送信者に通知し、電子メールを拒否します。
- アウトバウンド電子メール: Apexから送信されるシングルおよび一括メール送信
-
シングルメールを最大1,000通/日(GMTベース)まで外部へ送信できます。 標準アプリケーションから送信されるシングルメールはこの制限のカウントに含められません。
一括送信メールを最大1,000通/日(GMTベース)まで外部へ送信できます。 各メールに含めることができる外部アドレスの最大数はご利用のSalesforce エディションに依存します。:
| Professional |
250 |
| Enterprise Edition |
500 |
| Unlimited Edition |
1,000 |
組織内のユーザーに対しては無制限にメールを送信できます。
Batch Apex のガバナ制限
Batch
Apexを利用する際は下記に留意してください。: