Don't have an account?
Search for an answer or ask a question of the zone or Customer Support.
You need to sign in to do that
Sign in to start searching questions
Signup for a Developer Edition
Sign in to start a discussion
ガバナ制限の根本的な解決方法はありませんでしょうか?
たとえば、Too many SOQL queries: 201のようなSOQLの実行総数の制限の回避方法、ご存知の方がいらっしゃいましたらご教授いただけませんでしょうか?
よろしくお願いいたします。
ソースを見る限り、設計に問題があると思います。
doIt()内で何故SOQLやDMLを3回ずつ実行しているのか分からないので、なんとも言えませんが、
id_listのループ内でSOQLやDMLを実行するのではなく、まとめて行うようにしましょう。
リファレンス等でも指摘されているので、一度読んでみてください。
ちなみにガバナー制限は、設計(書き方)で回避するしかありません。
どのような状況でどのガバナ制限に引っかかっているのかわかりません。
処理ごとにinsertやupdateをするのではなくListにaddして一括でinsertなどを行う。
例
List<Account> TEST = new List<Account>();
for(Integer i=0; i<=10; i++){
Account temp = new Account();
temp.Name = Test;
TEST.add(temp);
}
insert TEST;
早速ご回答いただきありがとうございます。
説明不足で申し訳ございません。
たとえば、一括処理時に下記のdoIt()を100回を呼び出そうとすると、ガバナ制限に引っかかってしまうのです。コントローラー内:Too many SOQL queries: 101バッチ内:Too many SOQL queries: 201//一括処理クラス------------------------------★仮にid_list内に100件があるとするfor (String sID : id_list) { cCom.doIt(sID);}------------------------------//共通クラスpublic class cCom { public static integer doIt(Id pid) { select....;//SOQLクエリ1 update1; select....;//SOQLクエリ2 update2; select....;//SOQLクエリ3 update3;}}どうやら更新のほうではなく、SOQLクエリの発行総数が引っかかっているようです。やはり、一括処理件数を減らすか、method内のSOQLクエリ数を減らすかしか方法がありませんでしょうか?ご教授いただけたら幸いです。よろしくお願いいたします。
ありがとうございました。とても参考になりました。
またよろしくお願いします。
ソースを見る限り、設計に問題があると思います。
doIt()内で何故SOQLやDMLを3回ずつ実行しているのか分からないので、なんとも言えませんが、
id_listのループ内でSOQLやDMLを実行するのではなく、まとめて行うようにしましょう。
リファレンス等でも指摘されているので、一度読んでみてください。
ちなみにガバナー制限は、設計(書き方)で回避するしかありません。
All Answers
どのような状況でどのガバナ制限に引っかかっているのかわかりません。
処理ごとにinsertやupdateをするのではなくListにaddして一括でinsertなどを行う。
例
List<Account> TEST = new List<Account>();
for(Integer i=0; i<=10; i++){
Account temp = new Account();
temp.Name = Test;
TEST.add(temp);
}
insert TEST;
早速ご回答いただきありがとうございます。
説明不足で申し訳ございません。
たとえば、一括処理時に下記のdoIt()を100回を呼び出そうとすると、ガバナ制限に引っかかってしまうのです。
コントローラー内:Too many SOQL queries: 101
バッチ内:Too many SOQL queries: 201
//一括処理クラス
------------------------------
★仮にid_list内に100件があるとする
for (String sID : id_list) {
cCom.doIt(sID);
}
------------------------------
//共通クラス
public class cCom {
public static integer doIt(Id pid) {
select....;//SOQLクエリ1
update1;
select....;//SOQLクエリ2
update2;
select....;//SOQLクエリ3
update3;
}
}
どうやら更新のほうではなく、SOQLクエリの発行総数が引っかかっているようです。
やはり、一括処理件数を減らすか、method内のSOQLクエリ数を減らすかしか方法がありませんでしょうか?
ご教授いただけたら幸いです。
よろしくお願いいたします。
ソースを見る限り、設計に問題があると思います。
doIt()内で何故SOQLやDMLを3回ずつ実行しているのか分からないので、なんとも言えませんが、
id_listのループ内でSOQLやDMLを実行するのではなく、まとめて行うようにしましょう。
リファレンス等でも指摘されているので、一度読んでみてください。
ちなみにガバナー制限は、設計(書き方)で回避するしかありません。
ありがとうございました。とても参考になりました。
またよろしくお願いします。