トランザクション処理制限
基本APEXにMethodを単位として、一つトランザクションに扱う。
FLOW起動 (一つinterview 実例化)も一つトランザクションに扱う。
トランザクション実行する時、LOG日誌に出った各制限の名称を揃え、下記のように
DEV開発環境のLimit数もっと少ないので、ご注意ください。
FULL SANDBOXや正式環境は下記と大体同じです、環境によって、違う可能性がある。
普通APEX
Number of SOQL queries: 0 out of 100
Number of query rows: 0 out of 50000
Number of SOSL queries: 0 out of 20
Number of DML statements: 0 out of 150
Number of Publish Immediate DML: 0 out of 150
Number of DML rows: 0 out of 10000
Maximum CPU time: 0 out of 10000
Maximum heap size: 0 out of 6000000
Number of callouts: 0 out of 100
Number of Email Invocations: 0 out of 10
Number of future calls: 0 out of 50
Number of queueable jobs added to the queue: 0 out of 50
Number of Mobile Apex push calls: 0 out of 10
Batch
Number of SOQL queries: 0 out of 200
Number of query rows: 0 out of 50000
Number of SOSL queries: 0 out of 20
Number of DML statements: 0 out of 150
Number of Publish Immediate DML: 0 out of 150
Number of DML rows: 0 out of 10000
Maximum CPU time: 0 out of 60000 //普通apexの6倍
Maximum heap size: 0 out of 12000000 //普通apexの2倍
Number of callouts: 0 out of 0
Number of Email Invocations: 0 out of 10
Number of future calls: 0 out of 0 //なし
Number of queueable jobs added to the queue: 0 out of 1 //1注意
Number of Mobile Apex push calls: 0 out of 10
Number of SOQL queries: 0 out of 100
SOQLクエリの数:現在のトランザクションで実行されたSOQLクエリの回数。1つのトランザクションで最大100回まで実行できます。
Number of query rows: 0 out of 50000
クエリ行数:現在のトランザクションでデータベースから取得された行数。1つのトランザクションで最大50000行まで取得できます。
この制限はAPEXで直接Select文を実行すること。
例:
List<Account> accounts = [SELECT Id, Name FROM Account];
この制限はDatabase.QueryLocatorに適用しない。
Database.QueryLocator を使用すると、最大で 5000 万件のレコードを取得できますが、これらのレコードは一度にメモリに読み込まれるわけではなく、バッチ処理で段階的に処理されます。
例:
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
Number of SOSL queries: 0 out of 20
SOSLクエリの数:現在のトランザクションで実行されたSOSLクエリの回数。1つのトランザクションで最大20回まで実行できます。
Number of DML statements: 0 out of 150
DMLステートメントの数:現在のトランザクションで実行されたDML(データ操作言語)ステートメントの回数(挿入、更新、削除など)。1つのトランザクションで最大150回まで実行できます。
Number of Publish Immediate DML: 0 out of 150
即時公開DMLステートメントの数:即時に公開されたDML操作の回数。制限は150回です。
Number of DML rows: 0 out of 10000
DML行数:現在のトランザクションで処理されたDML操作に関連する行数。1つのトランザクションで最大10000行まで処理できます。
Maximum CPU time: 14 out of 10000
面倒臭いTIME LIMIT、注意すべき
最大CPU時間:現在のトランザクションで使用されたCPU時間(ミリ秒単位)。1つのトランザクションで最大10000ミリ秒まで使用できます。
Maximum heap size: 0 out of 6000000
注意すべき
最大ヒープサイズ:現在のトランザクションで使用されたヒープメモリのサイズ(バイト単位)。1つのトランザクションで最大6MB(6000000バイト)まで使用できます。
Number of callouts: 0 out of 100
コールアウトの数:現在のトランザクションで実行された外部コールの回数。1つのトランザクションで最大100回のHTTPコールやWebサービスコールを実行できます。
Number of Email Invocations: 0 out of 10
電子メール呼び出しの数:現在のトランザクションで送信された電子メールの回数。1つのトランザクションで最大10通の電子メールを送信できます。
Number of future calls: 0 out of 50
将来呼び出しの数:現在のトランザクションで呼び出された将来メソッドの回数。1つのトランザクションで最大50回の将来メソッドを呼び出すことができます。
Number of queueable jobs added to the queue: 0 out of 50
基本非同期処理回数と指していること.
一つ組織、24時間非同期処理最大250000(Versionにより)件。(Batch,Apex,FLOWの非同期処理)
キューに追加されたQueueableジョブの数:現在のトランザクションでキューに追加されたQueueable Apexジョブの回数。1つのトランザクションで最大50個のQueueableジョブを追加できます。
Number of Mobile Apex push calls: 0 out of 10
モバイルApexプッシュ呼び出しの数:現在のトランザクションで実行されたモバイルApexプッシュ呼び出しの回数。1つのトランザクションで最大10回のモバイルApexプッシュ呼び出しを実行できます。
APEXでDEBUG実行状況を監視するコードは下記:
System.debug('最大 CPU 時間: ' + Limits.getLimitCpuTime()/1000 +' 秒');
System.debug('最大ヒープサイズ: ' + Limits.getLimitHeapSize()/1048576 +' MB');
System.debug('最大 SOQL クエリ回数: ' + Limits.getLimitQueries() +' 回');
System.debug('最大 DML 回数: ' + Limits.getLimitDMLStatements() +' 回');
System.debug('残りの CPU 時間: ' + (Limits.getLimitCpuTime()-Limits.getCpuTime())/1000 +' 秒');
System.debug('残りのヒープサイズ: ' + (Limits.getLimitHeapSize()-Limits.getHeapSize())/1048576 +' MB');
System.debug('残りの SOQL クエリ回数: ' + (Limits.getLimitQueries()-Limits.getQueries()) +' 回');
System.debug('残りの DML 回数: ' + (Limits.getLimitDMLStatements()-Limits.getDMLStatements()) +' 回');
参考資料:https://help.salesforce.com/s/articleView?id=sf.flow_considerations_limit_transaction.htm&type=5