sql >> Database teknologi >  >> RDS >> Sqlserver

Denne simple kode giver dødvande. Enkelt eksempelprogram inkluderet

Dine to udsagn får rækkelåse i forskellig rækkefølge. Det er en klassisk sag til dødvande. Du kan rette dette ved at sikre, at rækkefølgen af ​​låse, der tages, altid er i en eller anden global rækkefølge (f.eks. sorteret efter ID). Du bør nok kombinere de to UPDATE sætninger i én og sorter listen over ID'er på klienten, før den sendes til SQL Server. For mange typiske UPDATE planlægger dette faktisk fungerer fint (dog ikke garanteret).

Eller du tilføjer genforsøgslogik, hvis du opdager en dødlås (SqlException.Number == 1205 ). Dette er mere elegant, fordi det ikke kræver dybere kodeændringer. Men deadlocks har præstationsimplikationer, så gør kun dette ved lave deadlock-rater.

Hvis din parallelle behandling genererer mange opdateringer, kan du INSERT alle disse opdateringer til en midlertidig tabel (som kan gøres samtidigt), og når du er færdig, udfører du en stor UPDATE der kopierer alle de individuelle opdateringsposter til hovedtabellen. Du ændrer blot joinkilden i dine eksempelforespørgsler.



  1. Brug "SELECT" til at kalde en funktion

  2. Hvordan konfigureres Hibernate, Spring og Apache dbcp til forbindelsespooling?

  3. MySQL INSERT hvis den ikke eksisterer (bruger ikke primærnøgle)

  4. Mysq- Connection hvordan man indstiller til at kunne indsætte arabisk tekst i databasen