SQL Server-blokering er et normalt træk ved SQL Server-databasesystemer. Blokering opstår, når SQL Server betjener anmodninger fra flere klienter, og forskellige processer anmoder om de samme ressourcer på samme tid. Hvis en ressource er i brug, er den låst og utilgængelig for efterfølgende anmodninger, så processen forsinkes, indtil ressourcen frigives og bliver tilgængelig igen. SQL Server-blokke løser sig normalt uden en mærkbar effekt på ydeevnen. Men nogle gange forårsager blokke, at ydeevnen forringes, enten fordi den indledende proces låser ressourcen i en længere periode, før den frigives, eller fordi den indledende proces slet ikke frigiver ressourcen, hvilket gør ressourcerne utilgængelige, indtil blokken er løses manuelt.
Når et sæt ressourcer er blokeret i et betydeligt tidsrum, falder ydeevnekvaliteten til det punkt, at systembrugere begynder at bemærke problemer. Disse problemer omfatter ting som forespørgsler, der tager lang tid at køre eller timeout, eller brugere, der ikke kan gemme skærme, de har ændret.
Sådan rettes SQL Server-blokke
Den kortsigtede løsning på SQL Server-blokering er at identificere og manuelt fjerne blokeringen af transaktionen, når du bemærker, at ydeevnen bliver negativt påvirket af en blokering eller blokeringer.
Når du har bekræftet tilstedeværelsen af en SQL Server-blok, skal du kontrollere SQL Server-aktivitetsmonitoren og dræbe de forespørgsler, der forårsager de fleste problemer. Du kan også bruge SQL-scripts til løbende at overvåge tilstanden af låsning og blokering på SQL Server. Brent Ozar foreslår, at du tilføjer nogle blokeringsspecifikke ydeevnetællere, så SQL Server giver dig besked, når du har overskredet dine angivne blokeringstærskler.
Sådan forhindrer du SQL Server-blokeringer
Det er nyttigt for en databaseadministrator at vide, hvordan man reparerer en SQL Server-blok. Men for at opretholde et højtydende system er det endnu bedre at vide, hvordan man forhindrer - eller i det mindste minimerer - forekomsten af blokering. Her er fire tips til at minimere nogle almindelige typer af SQL Server-blokering:
1. Brug indekser
Brug af klyngede indekser i tabeller med høj brug hjælper med at reducere blokering ved at bede forespørgselsoptimeringsværktøjet køre en indekssøgning i stedet for en indeksscanning. Når kun den post, der opdateres, er låst, kan efterfølgende processer omgå låsen og kan fuldføres.
Det er også vigtigt at sikre, at UPDATE- og DELETE-sætninger bruger indekser. Indekser hjælper UPDATE og DELETE-sætninger med at reducere antallet af modifikationslåse, de erhverver ved at bruge enten ikke-klyngede indekser eller indekstip til at fjerne låse.
2. Ryd op i dine forespørgsler
En bedste praksis for at undgå SQL Server-blokke er at opdele lange transaktioner i flere kortere transaktioner. Langvarige forespørgsler holder en lås i hele transaktionens varighed, hvilket gør ressourcen utilgængelig for andre processer. At dele lange transaktioner op i korte holder dataene i bevægelse.
Overvej at bruge SQL Server-tuning for at gøre forespørgsler så effektive som muligt. En god forespørgselsoptimering vil skrive og omskrive forespørgsler, indtil de er konfigureret til at reducere antallet af blokke, der kan bremse ydeevnen.
3. Identificer årsagen til SQL Server-blokering
Sporing af ydeevnemålinger over tid er en fantastisk måde at undgå SQL Server-blokering på. Ved at finde ud af, hvilke sessioner der ofte blokeres, og hvilke udsagn der er involveret, kan du bestemme en fremgangsmåde for at fjerne de grundlæggende årsager til tilbagevendende blokeringer ved hjælp af indeksering, forespørgselsoptimering eller på andre måder.
Et andet sted at lede efter årsagen til blokering er systemets arbejdsbyrde. Kør en arbejdsbelastningsanalyse for at afgøre, om der har været en stigning. En for stor arbejdsbyrde vil forårsage blokering af SQL Server, da det stigende antal forespørgsler hober sig op og venter på adgang til låste ressourcer. Det kan være nødvendigt at tilføje indekser eller fordele arbejdsbyrden på tværs af flere databaser for at løse problemer med ydeevne med tunge arbejdsbyrder.
4. Hold din statistik opdateret
Forældede statistikker kan udløse ineffektive forespørgselsplaner til at køre, fordi planen ikke blev opdateret for at tage højde for ændringer. SQL Server starter søgegennemgange for at lede efter flyttede eller manglende data, hvilket igen vil skabe blokeringer.
Den mest effektive måde at holde statistik opdateret på er at automatisere så mange opdateringer som muligt. Hvor du ikke er i stand til at planlægge automatiske opdateringer, skal du sørge for at tilføje manuelle opdateringer til din planlagte vedligeholdelsestjekliste for at sikre, at opdateringerne udføres regelmæssigt.
SQL Server-blokering kan være en kendsgerning i DBA-livet, men der er måder at afbøde dens indvirkning på din SQL Server-databaseydelse. Bryd blok-ophæv-cyklussen ved at implementere nogle af strategierne diskuteret ovenfor. Med lidt planlægning, optimering og automatisering er det muligt at reducere forekomsten af SQL Server-blokering – og i nogle tilfælde at udrydde den helt.