Retour à la leçonMission
Mission : une migration de 5 millions de lignes qui ne tiendra jamais dans la fenêtre de maintenance
Diagnostiquer pourquoi un script d'import massif écrit avec session.add() est inutilisable à l'échelle, puis le réécrire avec les bons outils tout en gérant le risque de verrous prolongés.
Contexte
Un développeur a écrit ce script pour migrer 5 millions de lignes vers PostgreSQL avant la fenêtre de maintenance de cette nuit :
python
with SessionLocal() as session:
for ligne in lire_ancien_systeme():
session.add(Produit(nom=ligne["nom"], prix=ligne["prix"]))
session.commit()Sur un échantillon de 10 000 lignes en local, ça fonctionne. Sur les 5 millions de lignes réelles, le process consomme toute la RAM du serveur avant même que la première requête SQL ne parte, puis plante avec une erreur mémoire. Il te reste quelques heures avant la fenêtre de maintenance pour livrer une version qui tienne la charge, sans bloquer les autres services qui lisent la table produits en journée.