Salesforce批量调控器限制

Salesforce批量调控器限制,salesforce,apex-code,apex,soql,Salesforce,Apex Code,Apex,Soql,我正在运行以下批处理,并在for循环中进行查询,以下是查询: lgm=[select Group.Name, group.type,group.id, group.ownerID from GroupMember where UserOrGroupId =: u.id]; 批处理循环到组织中的每个用户,并获取其权限集、分配给他的公共组和队列以及该用户的名称和id,然后将这些信息填充到名为ConsolidatedUser的自定义对象中 我还没有运行大量记录的批次,以查看是否达到调速器限值,并希望

我正在运行以下批处理,并在for循环中进行查询,以下是查询:

lgm=[select Group.Name, group.type,group.id, group.ownerID from GroupMember where UserOrGroupId =: u.id];
批处理循环到组织中的每个用户,并获取其权限集、分配给他的公共组和队列以及该用户的名称和id,然后将这些信息填充到名为ConsolidatedUser的自定义对象中

我还没有运行大量记录的批次,以查看是否达到调速器限值,并希望听取您的意见,因为现在批次工作正常, 我可以问一下,在一个批处理中,每个事务允许多少个soql查询,以确保我不会陷入任何冲突。 这是我的代码,谢谢你的帮助

global class TDTRMIS_GetUserDetails implements  Database.Batchable<sObject>, Database.Stateful {

global string UserPermissionSets='';
global string UserGroups='';
global string UserQueues='';
global integer i;

    global Database.QueryLocator start(Database.BatchableContext bc) {
        return Database.getQueryLocator(
            'SELECT Id, name, (select PermissionSet.Name, AssigneeId FROM PermissionSetAssignments)  from user' 
        );
    }

    global void execute(Database.BatchableContext bc, List<User> scope){
        // process each batch of records

                // process each batch of records

        List<ConsolidatedUser__c> lcu = new List<ConsolidatedUser__c>();
        list<GroupMember> lgm= new list<GroupMember>();
        for (User u : scope)
        {


            ConsolidatedUser__c cu= new ConsolidatedUser__c();
            lgm=[select Group.Name, group.type,group.id, group.ownerID from GroupMember where UserOrGroupId =: u.id];


            for(PermissionSetAssignment ps : u.PermissionSetAssignments)
                {
                UserPermissionSets=UserPermissionSets+ps.PermissionSet.name+'|';        
                }


            for(GroupMember gm : lgm)
            {

                 if(gm.group.type=='Regular' )
                 {
                 UserGroups=UserGroups+gm.group.Name+'|';
                 }

                 else if(gm.group.type=='Queue' )
                 {
                 UserQueues=UserQueues+gm.group.Name+'|';  
                 } 

            }  


            cu.PermSet__c=UserPermissionSets ;  
            cu.PublicGroupList__c=UserGroups;
            cu.QueueGroupList__c= UserQueues;
            cu.User_Lookup__c=u.id;    
            cu.name=u.name;
            lcu.add(cu);
        } 

    try{
    upsert lcu;
    }

    catch(exception e)
    {
    system.debug(e);
    }

    }  

    global void finish(Database.BatchableContext bc){

    //to be added later

    }    

}

这解释了您需要了解的有关SOQL调控器限制的所有信息:

基本上,每个事务的SOQL调控器限制是100

在循环中放置SOQL查询从来都不是一个好主意。有关备选方案,请参见以下内容:


批处理Apex被认为是异步Apex,因此在您的情况下发出的SOQL查询总数限制为200。 此限制适用于批处理的一次执行

我建议您从user for循环中删除SOQL。List在user for循环内的列表中收集用户ID,然后使用用户ID列表进行单个SOQL查询以获取GroupMember列表


这里有一个相关链接:

感谢您的回复,我看到了两种类型的SOQL查询限制;100和200个查询,我可以问你哪一个是这批的限制吗。谢谢@arun kumar在他的回答中提到,200是批量交易的限额。你找到答案了吗?