Het verwerken van grote hoeveelheden gegevens in SQL vereist een speciale aanpak om geheugenoverload, blokkades en een stabiele prestaties te voorkomen. Een van de belangrijkste technieken is het opdelen van operaties in batches: invoergegevens worden in kleine porties verwerkt, wat de belasting op de server verlaagt en betere controle over transacties en terugdraaien bij fouten mogelijk maakt.
Belangrijke aspecten:
ROWCOUNT of LIMIT / TOP)COMMIT, om het transactionele log te ontlastenVoorbeeld (SQL Server):
DECLARE @BatchSize INT = 1000; WHILE 1 = 1 BEGIN BEGIN TRANSACTION; DELETE TOP(@BatchSize) FROM BigLogTable WHERE CreatedDate < '2021-01-01'; IF @@ROWCOUNT = 0 BREAK; COMMIT TRANSACTION; END
Hoe verwijder je 100 miljoen records uit een grote tabel met minimale invloed op de prestaties?
Onjuiste antwoord: "Voer één grote DELETE uit".
Juiste antwoord: Verwijder in porties (batchgewijs) met controle over de batchgrootte, maak COMMIT na elke blok, verminder indien nodig de belasting op de schijf en blokkades met behulp van pauzes (WAITFOR DELAY of soortgelijke).
Voorbeeld (PostgreSQL):
DO $$ BEGIN LOOP DELETE FROM big_table WHERE created_at < NOW() - interval '1 year' LIMIT 10000; EXIT WHEN NOT FOUND; COMMIT; END LOOP; END$$;
Verhaal
Project: Een hoogbelaste bankdienst. Fout: Ontwikkelaar voerde het verwijderen van verouderde logs uit met één grote query van 80 miljoen rijen. Resultaat — het transactionele log groeide tot terabytes, alle beschikbare schijfruimte raakte vol, de service "viel" uit.
Verhaal
Project: Een online winkel met een voorraadbeheersysteem. Fout: Bij massale invoer was de transactiegrootte niet beperkt. Tijdens het importeren van massale batches gingen records fout, alle eerdere werk moest teruggedraaid en herhaald worden, wat uren in plaats van minuten kostte.
Verhaal
Project: Een retailer, een rapportagedatabase voor orderdetails. Fout: Batchverwerking werd gebruikt, maar men vergat COMMIT tussen de iteraties — het transactionele log groeide exponentieel, de server begon te "haperen", en vervolgens was er dringende opruiming van de logs met standaardmiddelen nodig.