Salesforce記録①:単一トランザクション処理の制限について(202406)

## トランザクション処理制限

:::note warn
 基本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 
:::note warn
面倒臭いTIME LIMIT、注意すべき
:::

最大CPU時間：現在のトランザクションで使用されたCPU時間（ミリ秒単位）。1つのトランザクションで最大10000ミリ秒まで使用できます。

#### Maximum heap size: 0 out of 6000000
:::note warn
注意すべき
:::
最大ヒープサイズ：現在のトランザクションで使用されたヒープメモリのサイズ（バイト単位）。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
:::note warn
基本非同期処理回数と指していること.
一つ組織、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実行状況を監視するコードは下記：
``` js
    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