Apexのガバナ制限について
ガバナ制限
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 ステートメントの結果として処理されるレコードの合計数、Approval.process、または database.emptyRecycleBin:10,000
・insert、update、または delete ステートメントによって繰り返しトリガする Apex 呼び出しのスタックの深さの合計数 :16
・Apex トランザクションごとの最大実行時間:10 分
・Apex トランザクションごとに許容される転送通知メソッドコールの最大数:10