sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är SQL Server Blocking?

Blockering av SQL Server är en normal egenskap hos SQL Server-databassystem. Blockering sker när SQL Server betjänar förfrågningar från flera klienter och olika processer begär samma resurser samtidigt. Om en resurs används är den låst och otillgänglig för efterföljande förfrågningar, så processen fördröjs tills resursen släpps och blir tillgänglig igen. SQL Server-block löser sig normalt utan någon märkbar effekt på prestandan. Emellertid kan block ibland göra att prestandan försämras antingen för att den initiala processen låser resursen under en längre tid innan den släpps eller för att den initiala processen inte släpper resursen alls, vilket gör resurserna otillgängliga förrän blocket är lösas manuellt.

När en uppsättning resurser blockeras under en betydande tid, minskar prestandakvaliteten till den grad att systemanvändare börjar märka problem. Dessa problem inkluderar saker som att frågor tar lång tid att köra eller tar lång tid eller att användare inte kan spara skärmar som de har ändrat.

Hur man åtgärdar SQL Server-blockeringar

Den kortsiktiga lösningen på SQL Server-blockering är att identifiera och manuellt avblockera transaktionen när du märker att prestandan påverkas negativt av ett eller flera block.

När du har bekräftat närvaron av ett SQL Server-block, kontrollera SQL Server-aktivitetsmonitorn och döda de frågor som orsakar mest problem. Du kan också använda SQL-skript för att kontinuerligt övervaka tillståndet för låsning och blockering på SQL Server. Brent Ozar föreslår att du lägger till några blockeringsspecifika prestandaräknare så att SQL Server meddelar dig när du har överskridit dina angivna blockeringströsklar.

Hur man förhindrar blockering av SQL Server

Det är användbart för en databasadministratör att veta hur man fixar ett SQL Server-block. Men för att upprätthålla ett högpresterande system är det ännu bättre att veta hur man förhindrar – eller åtminstone minimerar – förekomsten av blockering. Här är fyra tips för att minimera några vanliga typer av SQL Server-blockering:

1. Använd index

Att använda klustrade index i tabeller med hög användning hjälper till att minska blockeringen genom att frågeoptimeraren uppmanas att köra en indexsökning istället för en indexsökning. När endast posten som uppdateras är låst, kan efterföljande processer kringgå låset och kan slutföras.

Det är också viktigt att se till att UPDATE- och DELETE-satser använder index. Index hjälper UPDATE- och DELETE-satser att minska antalet modifieringslås som de skaffar med antingen icke-klustrade index eller indextips för att ta bort lås.

2. Rensa upp dina frågor

En bästa praxis för att undvika SQL Server-blockeringar är att dela upp långa transaktioner i flera kortare transaktioner. Långgående frågor håller ett lås under transaktionens varaktighet, vilket gör resursen otillgänglig för andra processer. Att dela upp långa transaktioner i korta håller data i rörelse.

Överväg att använda SQL Server-justering för att göra frågor så effektiva som möjligt. En bra frågeoptimerare kommer att skriva och skriva om frågor tills de är konfigurerade för att minska antalet block som kan bromsa prestandan.

3. Identifiera grundorsaken till blockering av SQL Server

Att spåra prestandastatistik över tid är ett utmärkt sätt att undvika blockering av SQL Server. Genom att lokalisera vilka sessioner som ofta blockeras och vilka uttalanden som är inblandade, kan du bestämma en åtgärd för att ta bort grundorsakerna till återkommande blockeringar genom indexering, frågeoptimering eller på annat sätt.

En annan plats att leta efter grundorsaken till blockering är systemets arbetsbelastning. Kör en arbetsbelastningsanalys för att avgöra om det har skett en ökning. En för stor arbetsbelastning kommer att orsaka blockering av SQL Server eftersom det växande antalet frågor hopar sig i väntan på åtkomst till låsta resurser. Du kan behöva lägga till index eller fördela arbetsbelastningen över flera databaser för att lösa prestandaproblem med tung arbetsbelastning.

4. Håll din statistik uppdaterad

Föråldrad statistik kan leda till att ineffektiva frågeplaner körs eftersom planen inte uppdaterades för att ta hänsyn till ändringar. SQL Server kommer att starta sökgenomsökningar för att leta efter flyttad eller saknad data, vilket i sin tur skapar block.

Det mest effektiva sättet att hålla statistiken aktuell är att automatisera så många uppdateringar som möjligt. Om du inte kan schemalägga automatiska uppdateringar, se till att lägga till manuella uppdateringar till din checklista för schemalagt underhåll för att säkerställa att uppdateringarna görs regelbundet.

Blockering av SQL Server kan vara ett faktum i DBA-livet, men det finns sätt att minska dess inverkan på din SQL Server-databas prestanda. Bryt block-avblockeringscykeln genom att implementera några av strategierna som diskuterats ovan. Med lite planering, optimering och automatisering är det möjligt att minska förekomsten av SQL Server-blockering – och, under vissa omständigheter, att utrota den helt.


  1. PostgreSQL tabellvariabel

  2. SQL BEGRÄNSNINGAR

  3. Skillnaden mellan sys.views, sys.system_views och sys.all_views i SQL Server

  4. Så här kontrollerar du datumformatet för din Oracle-session