Propendo per il setTimeout del server che scatta, se non puoi aumentare il tempo d'esecuzione degli script sul server dovrai "spezzettare" i ventimila record in tanti piccoli pacchetti da mille eseguendo la procedura venti volte (da 0 a 1000 primo ciclo, da 1001 a 2000 secondo ciclo, da 2001 a 3000 terzo ciclo etc.... a vedi esci dal ciclo i cicli li puoi memorizzare in una sessione) se che non dia problemi il file quando sei quasi alla fine a caricare 17000/18000 record