Oorspronkelijk gepost op 2/27/2012 op de Valence Developer Blog door Craig Dunk.
Ik vind het leuk om bugs te verzamelen (zoals bij softwaredefecten) of in ieder geval verhalen over het opsporen van bugs. Met bugs zijn mijn favorieten altijd subtiel en moeilijk te reproduceren, maar ze houden een verandering van één regel in (als gevolg daarvan heb ik veel bugverhalen met betrekking tot threading).
Deze week ben ik een aantal uren bezig geweest met het opsporen van een interessant defect. Kortom, we hadden een aantal nieuwe API-aanroepen die spontaan mislukten in onze QA-omgeving. Nadat ik de logboekregistratie had opgevoerd en doorzocht, identificeerde ik enkele uitzonderingen die periodiek werden gegooid en ongeveer overeenkwamen met de tijden dat de webaanroepen mislukten. Ze omvatten het volgende:
System.Data.SqlClient.SqlException: Transactie (proces-id 123) is vastgelopen op vergrendelingsresources met een ander proces en is gekozen als slachtoffer van de impasse. Voer de transactie opnieuw uit. bij System.Data.SqlClient.SqlConnection.OnError(SqlException-uitzondering, Booleaanse breakConnection)
Gelukkig hebben we een geweldige (en bekroonde!) databaseontwikkelaar in een team in de buurt. Hij was van plan om samen met mij MSSql-traces op te zetten, maar was eigenlijk in staat om de zilveren kogel te identificeren door inspectie en op basis van dat bericht kon hij een opgeslagen procedure identificeren en gaf hij me een les over gelijktijdigheid.
Hij schrijft:
Gelijktijdigheid is een soort van Moeilijk om goed te krijgen in dit geval.
Ik denk dat we willen
SELECTEER @id = TableId
VAN TableName MET (HOLDLOCK)
WAAR Sleutel = @myKey
In plaats van
SELECTEER @id = TableId
VAN TableName
WAAR Sleutel = @myKey
Dit is een geweldig bugverhaal om te verzamelen, omdat het echt een verandering van één regel was en wat tijd kostte (voor mij) om te vinden en bovendien heb ik nu een echt nuttige bron in de vorm van Michael's Mythbuster Post. Wat ik leuk vind aan de post (naast het Mythbuster-thema) is dat het systematisch en uitgebreid is en je de tools geeft om te reproduceren en "dit thuis te proberen". Dus als je op deze pagina bent aangekomen omdat je ook een deadlock-uitzondering aan het debuggen bent, wil je het bovenstaande bericht bekijken.