Geschiedenis van de vraag:
Bulk bijwerken van gegevens is vereist bij overgangen, migraties en het corrigeren van bedrijfslogica. Een typisch voorbeeld: de status van tientallen miljoenen rijen in een actieve tabel wijzigen zonder de service te stoppen, met behoud van beschikbaarheid en prestaties.
Probleem:
Een gewone UPDATE zonder beperking duurt lang, kan leiden tot escalatie van blokkeringen, blokkeert de tabel en leidt tot een collectieve rollback bij een fout. Er is een aanpak nodig die de impact op gebruikers minimaliseert en transactionele integriteit waarborgt.
Oplossing:
Codevoorbeeld:
-- Voorbeeld van batch-update van 10.000 rijen WHILE 1 = 1 BEGIN UPDATE TOP (10000) mytable SET status = 'archived', updated = GETDATE() WHERE status = 'active'; IF @@ROWCOUNT = 0 BREAK; END
Belangrijke kenmerken:
Is het mogelijk om een bulk UPDATE in één transactie uit te voeren zonder de tabel te blokkeren?
Over het algemeen niet. Een grote transactie blokkeert de tabel/pagina's en verhoogt het risico op blokkeringen en time-outs. Het is beter om in batches te werken.
Heeft de aanwezigheid van indices invloed op de snelheid van bulk updates?
Ja. Elke update van geïndexeerde velden vereist herstructurering van de index voor elke rij. Soms is het zinvol om tijdelijk indices te verwijderen, maar dit vereist een grondige analyse.
Worden alle rijen atomair bijgewerkt bij batch-updates?
Nee, atomiciteit is alleen gegarandeerd binnen één batch (rijlimiet/transactie). Als de batch wordt onderbroken, kunnen sommige rijen worden bijgewerkt en andere niet. Voor echte atomiciteit is alleen een volledige UPDATE in één transactie veilig, wat gevaarlijk is bij grote hoeveelheden.
Een technische ingenieur besloot 10 miljoen rijen met één query in de productie-database bij te werken: UPDATE mytable SET status = 'archived'. De site "bevroor", de rollback duurde tientallen minuten, de prestaties leden.
Voordelen:
De query is opgebroken in batches van 10.000 rijen met korte transacties, de update vindt plaats tijdens werkuren zonder stilstand.
Voordelen: