sql >> Database >  >> RDS >> Sqlserver

Deze eenvoudige code zorgt voor een impasse. Eenvoudig voorbeeldprogramma inbegrepen

Uw twee verklaringen krijgen rijsloten in verschillende volgorde. Dat is een klassiek geval voor impasses. U kunt dit oplossen door ervoor te zorgen dat de volgorde van de genomen sloten altijd in een globale volgorde is (bijvoorbeeld gesorteerd op ID). U moet waarschijnlijk de twee UPDATE . samenvoegen instructies in één en sorteer de lijst met ID's op de client voordat u deze naar SQL Server verzendt. Voor veel typische UPDATE plannen werkt dit eigenlijk prima (maar niet gegarandeerd).

Of u voegt logica voor opnieuw proberen toe voor het geval u een impasse ontdekt (SqlException.Number == 1205 ). Dit is eleganter omdat er geen diepere codewijzigingen nodig zijn. Maar deadlocks hebben gevolgen voor de prestaties, dus doe dit alleen bij lage deadlock-percentages.

Als uw parallelle verwerking veel updates genereert, kunt u INSERT al die updates in een tijdelijke tabel (die gelijktijdig kan worden gedaan) en als je klaar bent, voer je één grote UPDATE uit die alle afzonderlijke updaterecords naar de hoofdtabel kopieert. U wijzigt gewoon de join-bron in uw voorbeeldquery's.



  1. Hoe DateTime converteren naar een getal met een precisie groter dan dagen in T-SQL?

  2. String- en NULL-waarden samenvoegen in SQL Server

  3. MYSQL/PHP KIES DISTINCT

  4. gegevens importeren van de ene tabel naar een andere tabel