Även om vi alla vet att låsning är avgörande för dataintegriteten, ändrar det inte det faktum att det kan vara en allvarlig nagel i ögonen på dig!
När vi ser blockering i vår databas antar vi ofta att något är fel – det är inte alltid fallet. Enligt min erfarenhet är majoriteten av SQL Server-blockering legitim, men den måste undersökas och förstås. Deadlocks, å andra sidan, är sällan legitima! Deadlocks anses vara kritiska i SQL Server-världen eftersom processer dödas automatiskt, eftersom SQL Server löser dödlägen utan att kräva manuellt ingripande. Återigen, även om de är "lösta", måste de definitivt undersökas och förstås.
Det finns några designstrategier som kan hjälpa till att minska förekomsten av SQL Server-blockering och låsningar i din databas:
- Använd klustrade index på tabeller med hög användning
- Undvik SQL-satser med högt antal rader
- Dela upp långa transaktioner i många kortare transaktioner
- Se till att UPDATE- och DELETE-satser använder index
- Schemalägg inte batchuppdateringsjobb så att de överlappar
- Håll din statistik uppdaterad
Och jag är säker på att det finns många fler, men verkligheten är att du kan följa alla de bästa metoderna du kan tänka dig och fortfarande ha blockering och dödlägen. Detta beror på att låsningar i de flesta fall orsakas av dåligt utformad applikationskod. (Applikationsdesignens kaninhål:kodning, transaktionsisolering och åtkomstmönster. Men låt oss nu fokusera på att undersöka och förstå blockering och dödlägen).
SQL-serverblockering och dödlägen
Den första utmaningen med blockering och dödlägen är att identifiera när och var de händer eftersom de vanligtvis inte rapporteras, rapporteras i efterhand eller löses automatiskt. För att få en verklig förståelse för vad som händer i din databas angående blockering och dödlägen, måste du se deras förekomster över tid. För att åtgärda problemet och stoppa framtida händelser måste du också komma till grundorsaken till blockeringen – beväpna dig själv med information som du behöver för att vidarebefordra tillbaka till applikationsutvecklarna och på så sätt sätta stopp för skuldspelet mellan utvecklarna och DBA.
Det är därför jag verkligen gillar Workload Analyzer i Spotlight Cloud. Jag kan välja ett tidsintervall – en timme, en dag eller ett anpassat intervall – och se låset -relaterad aktivitet för det området. Jag har genast en bättre förståelse för vad som händer! Jag kan se låsningsmönster, jämföra låsningshastigheten över tid med ett tidigare tidsintervall, se blockeringshastigheten över en specifik tidsram och se nyckeltal för låsning som Lock Exclusive, Shared &Update.
Så nu vill jag komma till grundorsaken – det är där Dimensions Tree kommer in. Jag kan borra ner och filtrera informationen för en specifik tidsram, så att jag kan se samma information i djupare dimensioner som Databaser , Användare , Program och SQL-utlåtanden , samtidigt som jag filtrerar bort det "vita bruset" när jag går - vilket tydligt identifierar källan/källorna till mitt problem.
Här tittar jag på vilka databaser upplever mest låsning under tidsintervallet:
Nu ska jag gå igenom Användare inom den valda databasen:
Sedan väljer jag att se listan med SQL-utlåtanden orsakar låsning som utfördes av den valda användaren i den valda databasen för det angivna Tidsintervallet .
Nu kan jag se alla låsningar relaterad information för den valda SQL-satsen .
Så om du vill gå till botten med dina problem med låsning, blockering och dödläge rekommenderar jag att du kollar in Spotlight Cloud. Spotlight Cloud gör det enklare än någonsin att undersöka och förstå låsningsproblemen i databasen och i slutändan säkerställa att din applikationskod är fri från dödläge.