function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
OginoMaiOginoMai 

【Apex heap size too large】SOQL文でのデータの持ち方について

バッチ処理を実行すると、【Apex heap size too large】とエラーが発生します。
そこで、SOQL文を見直したのですがエラーは変わりませんでした。
※Account(取引先)は約2,300件ほど。

見直し前)
 'SELECT ' + util.getAllItem('Account') + ' FROM Account
 ※util.getAllItemと言う関数は、全てのAccount項目を取得する関数との事です。(最下部貼り付けております。)
 ※アカウント項目は全部で187項目。

見直し後)
 'SELECT ' + util.getAllItem('Account') + ' FROM Account WHERE (uniNumber__c >= \'0000000001\' AND uniNumber__c <= \'0000001000\')';

見直し前と後では、取得するレコード数には大きく差がある(1,000件以上)と思うのですが、
なぜか【Apex heap size too large】が引き続き発生している状況です。

上記見直し後のSOQL文も、最初に全Account(取引先)データを取得してしまうのでしょうか?

何かご存知の方がいらっしゃいましたら、少しでもご教授頂けますと幸いです。
どうぞよろしくお願いいたします。

■util.getAllItem■
Utilクラス
    public String getAllItem(String obj){
        Map<String, Schema.SObjectType> m = Schema.getGlobalDescribe() ;
        Schema.SObjectType s = m.get(obj) ;
        Schema.DescribeSObjectResult r = s.getDescribe() ;
        Map<String, Schema.SObjectField> fields = r.fields.getMap() ;
        string soql = '';
        for (String fieldName : fields.keyset()) {
            if (soql != '') {
                soql += ', ';
            }
            soql += fieldName;
        }

        return soql;
    }
Best Answer chosen by OginoMai
Taiki YoshikawaTaiki Yoshikawa
Apex heap size too largeということですのでレコードの取得件数が上限を超えたわけではなく、ヒープサイズが大きすぎることが原因のエラーと思われます。(あまりにも多くのデータが処理中にメモリに格納されている場合に発生するシステムエラーとのことです。)

取引先の項目を全て取得する処理を利用されていますが、バッチ処理内で必要な項目のみ取得するように変更することでエラーを回避できないでしょうか。

All Answers

Taiki YoshikawaTaiki Yoshikawa
Apex heap size too largeということですのでレコードの取得件数が上限を超えたわけではなく、ヒープサイズが大きすぎることが原因のエラーと思われます。(あまりにも多くのデータが処理中にメモリに格納されている場合に発生するシステムエラーとのことです。)

取引先の項目を全て取得する処理を利用されていますが、バッチ処理内で必要な項目のみ取得するように変更することでエラーを回避できないでしょうか。
This was selected as the best answer
OginoMaiOginoMai
ご回答を下さいましてありがとうございます。

>取引先の項目を全て取得する処理を利用されていますが、バッチ処理内で必要な項目のみ取得するように変更することでエラーを回避できないでしょうか。

こちらの件、承知いたしました。
バッチ処理で必要な項目を洗い出し、まずは変更してみることを試してみます。

レコード件数は関係なさそうとの事で、こちらは非常に安心いたしました。

ありがとうございました。