Mi sugerencia es esta:mueva las consultas de la base de datos fuera del ciclo y bloquee el acceso para que no realice consultas de bases de datos paralelas. Creo que eso también acelerará las cosas, ya que no tendrá acceso al disco en paralelo y podrá realizar el procesamiento en paralelo.
Significado (pseudocódigo)db =conectarse a la base de datosthreadlock =lock();
parfor {threadlock.lockresult =db query (obtenga todos los datos aquí, ya que no puede procesar mientras carga sin mantener la base de datos bloqueada) thread.unlockprocess datos resultantes (que ahora son solo datos, y no un objeto sql).}