tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Apex の一括処理のガバナ制限

Apex の一括処理のガバナ制限のメモ。

Apex開発者ガイド(P827の辺り)
http://developerforcejp.s3.amazonaws.com/developer/docs/apexcode/salesforce_apex_language_reference.pdf


Apex では最大 5 件のキュー内または有効な一括処理ジョブを実行できます。


24 時間での Apex 一括処理メソッドの最大実行数は、250,000 または組織のライセンス数の 200 倍の大きいほうです。メソッドの実行数には、start、execute、および finish メソッドの実行が含まれます。これは組織全体の制限で、他のすべての非同期Apex (スケジュール済みApexおよび future メソッド) と共有されます。

この制限のカウント対象となるライセンスは、Salesforce フルユーザライセンスまたは Force.com アプリケーションサブスクリプションのユーザライセンスです。Chatter Free ユーザ、Chatter 顧客ユーザ、カスタマーポータルユーザ、およびパートナーポータルユーザライセンスは、含まれません。


Apex一括処理のstartメソッドは、ユーザごとに同時に最大 15 個のクエリカーソルを開くことができます。Apex 一括処理の execute および finish メソッドは、上記とは別に、それぞれユーザごとに開けるクエリカーソルは 5 個までという制限があります。


Database.QueryLocatorオブジェクトでは最大5,000 万件のレコードが返されます。5,000 万件以上のレコードが返された場合、一括処理ジョブは即座に終了し「失敗」とマークされます。


一括処理クラスの start メソッドが QueryLocator を返す場合、Database.executeBatch の省略可能な範囲パラメータには最大値2,000を指定できます。これより大きい値に設定すると、Salesforceでは、QueryLocatorが返すレコードを、最大 2,000 レコードまでの、より小さいバッチに分割します。一括処理クラスの startメソッドが Iterable オブジェクトを返す場合、scope パラメータ値に上限はありませんが、非常に大きい値を使用すると、他の制限が発生する場合があります。


Database.executeBatchのscopeパラメータ (省略可能) でサイズが指定されない場合、Salesforceではstartメソッドによって返されるレコードを 200 個ずつのバッチに分割し、各バッチを execute メソッドに渡します。Apex ガバナ制限は、execute の各実行でリセットされます。


start、execute、および finish メソッドは、それぞれ最大 10 回のコールアウトを実装できます。


Apex の一括処理ジョブの start メソッドは、組織内で一度に 1 つのみ実行できます。キュー内のまだ開始されていない一括処理ジョブは、開始されるまで保持されます。なお、この制限により一括処理ジョブが失敗することはありません。また、複数のジョブが実行されている場合は、Apexの一括処理ジョブのexecuteメソッドが並行して実行されます。