After all my research, I think the question I should be asking is:

> After a form submit, can I create multiple batches based on the maximum table size for the serialized batch string and how can this be done?

I am using a batch process to pass users to an external site using their API.

For each user I set `$batch['operations'][] = array('process_funcion', array(LIST OF VARIABLES));`

The batch processing works for upto 5000 users; anything over that I get the following error:

> Access denied  
> You are not authorized to access this page. 

I thought this had to do with max_packet size, but I am not to sure of that anymore.

The batch is being initiated after a form is being processed.

Do you have any ideas on how I can process 5000 users at a time, or why I am getting this error?

I think that the insert to the batch table is to big, so I am trying to split this into separate batches like this.

    $contactCount = 1;
    foreach ($contacts as $contact) {
      $batch['operations'][] = array('_contact_add_batch', array($module, $acc_id, $Group_ID, $verb,$contact));
      //Due to max_packet_size restrictions, need to set multiple batches
      if (($contactCount % 2000) == 0){
        batch_set($batch);
      }
      $contactCount++;
    }
    // For the last set of batches, in the event that there is not 2000, lets add them also.
    if (!empty($batch['operations'])) {
      batch_set($batch);
    }

I am still getting the Access Denied error.