Minha sugestão é esta:Mova as consultas do banco de dados para fora do loop e bloqueie o acesso para que você não faça consultas paralelas ao banco de dados. Eu acho que isso vai acelerar as coisas também, já que você não terá acesso ao disco paralelo, enquanto ainda pode fazer o processamento paralelo.
Significado (pseudo código)db =conectar ao banco de dadosthreadlock =lock();
parfor {threadlock.lockresult =db query (puxe todos os dados aqui, pois você não pode processar enquanto carrega sem manter o banco de dados bloqueado)thread.unlockprocessa os dados resultantes (que agora são apenas dados, e não um objeto sql).}