SFエンジニア
Apexでプログラムを作ってテストしていたら “System.LimitException”というエラーが出たんだけど、なんでかね?
ガバナ制限を超えたときにスローされるエラーですね。説明します。
目次
Apex: ガバナ制限とは?
Salesforceはクラウドベースのプラットフォームであり、多数の顧客が同じリソースを共有して使用しています。一つの組織やユーザーが過度にリソースを消費し、他の顧客のパフォーマンスに影響を与えるのを防ぐために、さまざまな ガバナ制限 を導入しています。
[Salesforceシステム管理] 基礎:Salesforce組織とは?
【Salesforce組織とは?】 Salesforceの組織って何ですか? Salesforceを利用する企業や組織の独立した利用環境を指します。詳しく説明しましょう。 クラウド Salesforc…
以下は、Salesforceの主要なガバナ制限の一部です:
- SOQLクエリ制限: 1つのトランザクション内で実行できるSOQLクエリの数に制限があります。
制限(同期 Apex の場合) – 100
エラーメッセージの例 – System.LimitException: Too many SOQL queries: 101
1つのトランザクション内で許可されたSOQLクエリの数を超えたときに表示されます。 - SOQLレコード取得制限: 1つのSOQLクエリで取得できるレコード数に制限があります。
制限 – 50,000
エラーメッセージ: System.LimitException: Too many query rows: 50001
1つのSOQLクエリで取得できる最大レコード数を超えた場合に表示されます。 - DMLステートメント制限: 1つのトランザクション内で実行できるDMLステートメント(insert, update, delete, upsertなど)の数や、1つのDMLステートメントで処理できるレコード数に制限があります。
制限 – 150
エラーメッセージの例: System.LimitException: Too many DML statements: 151
1つのトランザクション内で許可されたDMLステートメントの数を超えたときに表示されます。 - Apex CPU時間制限: 1つのトランザクションにおけるApexコードの最大実行時間には制限があります。これは、長時間実行されるコードがシステム全体のパフォーマンスに影響を与えないようにするためです。
制限(同期 Apex の場合) – 10,000 ミリ秒
エラーメッセージ: System.LimitException: Apex CPU time limit exceeded
1つのトランザクションにおけるApexのCPU使用時間が許可された限度を超えたときに表示されます。
他にも多くのガバナ制限があります。
Salesforce Developer の制限および割り当てクイックリファレンス: Apex ガバナ制限
Apex ではガバナ制限を超えないようにするための、プログラミングの定石があります。例えば以下のようなものです。
- ループ内でのSOQLやDMLステートメントの使用を避け、代わりにリストやセットを使用してデータを集約し、一度に処理する。
- SOQLクエリでは、必要なフィールドのみを取得するようにクエリを書く。また、WHERE句を使用して必要なレコードのみをフィルタリングする。
- 制限を緩和するために、バッチApexなどの非同期処理を利用する。
Apex でガバナ制限を超えないようにするためのベストプラクティスについては、別のトピックでサンプルコードを示しながら説明する予定です。
以上です!
コメント