Apexのガバナ制限について

developer.salesforce.com

 

ガバナ制限

Apexはマルチテナント環境(マンションのようなもの)で実行するため、共有のリソースを独り占めしないように制限事項がある。

もし、Apexで書いたコードが制限を超えた場合、例外を出す。

 

次の5つがある。

トランザクション単位のApexの制限

トランザクション単位の認定管理パッケージの制限

・Force.comプラットフォームのApex制限

・静的Apexの制限

・転送通知の制限

 

今回はトランザクション単位のApexの制限を見る。

トランザクション単位のApexの制限とは、トランザクション単位でカウントされるものである。

バッチなどの一括処理の場合、制限はexecuteメソッドでレコードのバッチの実行ごとにリセットされる。

同期Apex、非同期Apex(非同期Apexは一括処理と、futureメソッドが該当する)で、制限が異なる場合がある。(以下抜粋)

 

【異なる場合】

・発行されるSOQLクエリの合計数

同期:100

非同期:200

・ヒープの合計サイズ

同期:6MB

非同期:12MB

Salesforce サーバの最大 CPU 時間

同期:10,000ミリ秒

非同期:60,000ミリ秒

 

【同じもの】

・SOQL クエリによって取得されるレコードの合計数: 50,000

・発行される DML ステートメントの合計数:150

DML ステートメントの結果として処理されるレコードの合計数、Approval.process、または database.emptyRecycleBin:10,000

・insert、update、または delete ステートメントによって繰り返しトリガする Apex 呼び出しのスタックの深さの合計数 :16

・Apex トランザクションごとの最大実行時間:10 分

・Apex トランザクションごとに許容される転送通知メソッドコールの最大数:10