mais detalhes sobre os beneficios e limitacoes das unbuffered queries, veja o artigo Buffered and Unbuffered queries Evitar que o loop principal do script acumule memoria (guardar valores em arrays ou strings) Cogitar a possibilidade de realizar varias consultas com LIMIT, ate esgotarem os itens a serem processados.Por fim, vale resaltar que o PHP tambem possui uma diretiva de configuracao que especifica a quantidade maxima de memoria que um script podera acumular ao longo de sua execucao (e que causa um erro fatal caso ultrapasse esse limite). Esta diretiva pode ser configurada em tempo de execucao desta forma:ini_set('memory_limit', '-1');Observacao: o valor "-1" significa "sem limite de memoria" (mas lembre-se que o servidor possui um limite fisico de memoria que voce provavelmente nao vai gostar de ultrapassar). Mas voce pode especificar um valor fixo como "256M", usando a notacao para representacao de bytes prevista pelo PHP.A perda de conexao com o Banco de DadosComo falamos anteriormente, e comum que o script cron tenha uma longa duracao. E, em alguns scripts em particular, o tempo de execucao de uma unica iteracao do loop principal do script pode ser muito grande. Por exemplo, se a operacao realizada dentro do loop envolve a requisicao a uma API externa, que pode estar sobrecarregada e demorar para responder em algum momento do dia. Nesta situacao, pode ocorrer a perda da sua conexao com o banco de dados por conta da inatividade. Normalmente a mensagem apresentada e "Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query'".Normalmente bancos de dados possuem uma configuracao de tempo limite de inatividade e, quando esse tempo e excedido, a conexao e fechada pelo servidor. Neste caso, seu script de cron pode falhar no meio de uma iteracao e o script ser abortado por conta disso.No MySQL, a diretiva que controla esse tempo e a wait_timeout. Mas nao pense que so por ela existir voce pode colocar um valor absurdamente alto. Lembre-se que se voce manter varias conexoes ociosas, estara ocupando recursos do seu servidor de Banco de Dados, que estara deixando de responder outras requisicoes. Porem, se voce estiver lidando com algum servidor slave de banco de dados, reservado exclusivamente para atender a crons, pode ser util aumentar esse tempo.Porem, caso essa alternativa seja inviavel, voce pode optar por reconectar no Banco de Dados a cada iteracao. Alias, caso haja interacoes com Banco de Dados em conjunto com outras operacoes que podem demorar, entao e melhor que voce abra a conexao, realize as operacoes no banco e feche a conexao, para depois realizar a operacao potencialmente demorada. Assim voce ja libera o banco o quanto antes.A execucao concorrente (em paralelo)Scripts cron possuem periodicidade. Porem, como esses scripts podem ser demorados, pode ocorrer de alguma execucao comece antes que a execucao anterior tenha terminado. Por exemplo, se voce coloca um script em cron para ser executado a cada 1 minuto, mas cada execucao leva 5 minutos.Neste caso, voce precisa estar atento aos itens que esta consultando para serem processados para evitar que um mesmo item seja