Prática recomendada do método Batch Start: DML / Scheduling?
Durante algum projeto de solução, minha equipe encontrou alguma complexidade em torno do agendamento em lote. Para manter o desempenho, perguntamos se não há problema em agendar o lote de acompanhamento no startmétodo em vez do finishmétodo. Nossa resposta inicial foi que fazer isso violaria as melhores práticas, mas não temos certeza de como articular claramente os riscos potenciais que superam qualquer benefício. Alterar o estado do banco de dados é aceitável para um método que retorna um localizador de consulta? Quais são os riscos concretos envolvidos, além de uma potencial colisão de jobs se o Job1 ainda estiver em execução quando o Job2 for iniciado?
Respostas
A diferença é que o método de início "encadeamento" não funcionará. Database.executeBatch de um método de início resulta em:
| FATAL_ERROR | System.AsyncException: Database.executeBatch não pode ser chamado a partir de um início de lote, execução de lote ou método futuro.
Nem mesmo é contra as melhores práticas, é literalmente uma limitação de design. Vá com o método Schedulable chamando dois métodos database.executeBatch.
Às vezes, vale a pena verificar os Execution Governors and Limits e outras documentações antes mesmo de considerar uma solução.