SQL Server-blokkering is een normaal kenmerk van SQL Server-databasesystemen. Blokkering vindt plaats wanneer SQL Server verzoeken van meerdere clients afhandelt en verschillende processen tegelijkertijd dezelfde bronnen aanvragen. Als een bron in gebruik is, is deze vergrendeld en niet beschikbaar voor volgende verzoeken, dus het proces wordt uitgesteld totdat de bron wordt vrijgegeven en weer beschikbaar komt. SQL Server-blokkades lossen zichzelf normaal gesproken op zonder een merkbaar effect op de prestaties. Af en toe zorgen blokken er echter voor dat de prestaties afnemen, ofwel omdat het initiële proces de bron voor een langere periode vergrendelt voordat deze wordt vrijgegeven of omdat het initiële proces de bron helemaal niet vrijgeeft, waardoor de bronnen ontoegankelijk zijn totdat het blok is handmatig opgelost.
Wanneer een reeks bronnen gedurende een aanzienlijke hoeveelheid tijd wordt geblokkeerd, neemt de prestatiekwaliteit af tot het punt dat systeemgebruikers problemen beginnen op te merken. Deze problemen omvatten zaken als vragen die lang duren om te worden uitgevoerd of een time-out of gebruikers die de schermen die ze hebben gewijzigd niet kunnen opslaan.
SQL Server-blokken repareren
De kortetermijnoplossing voor het blokkeren van SQL Server is het identificeren en handmatig deblokkeren van de transactie wanneer u merkt dat de prestaties negatief worden beïnvloed door een blok of blokkades.
Nadat u de aanwezigheid van een SQL Server-blok hebt bevestigd, controleert u de SQL Server-activiteitsmonitor en verwijdert u de query's die de meeste problemen veroorzaken. U kunt ook SQL-scripts gebruiken om de status van vergrendeling en blokkering op SQL Server continu te bewaken. Brent Ozar stelt voor om enkele blokkeringsspecifieke prestatiemeteritems toe te voegen, zodat SQL Server u op de hoogte stelt wanneer u uw opgegeven blokkeringsdrempels hebt overschreden.
SQL Server-blokkades voorkomen
Het is handig voor een databasebeheerder om te weten hoe een SQL Server-blokkering kan worden hersteld. Maar om een goed presterend systeem te behouden, is het nog beter om te weten hoe u blokkering kunt voorkomen of op zijn minst kunt minimaliseren. Hier zijn vier tips om enkele veelvoorkomende typen SQL Server-blokkering te minimaliseren:
1. Indexen gebruiken
Het gebruik van geclusterde indexen in tabellen met veel gebruik helpt blokkering te verminderen door de query-optimizer te vragen een indexzoekopdracht uit te voeren in plaats van een indexscan. Als alleen het record dat wordt bijgewerkt, is vergrendeld, kunnen volgende processen de vergrendeling omzeilen en worden voltooid.
Het is ook belangrijk om ervoor te zorgen dat de instructies UPDATE en DELETE indexen gebruiken. Indexen helpen UPDATE- en DELETE-instructies om het aantal wijzigingsvergrendelingen dat ze verkrijgen te verminderen met behulp van niet-geclusterde indexen of indexhints om vergrendelingen te verwijderen.
2. Ruim uw zoekopdrachten op
Een best practice om SQL Server-blokkades te vermijden, is om lange transacties op te splitsen in meerdere kortere transacties. Langlopende query's houden een vergrendeling vast voor de duur van de transactie, waardoor de bron niet beschikbaar is voor andere processen. Door lange transacties op te splitsen in korte, blijven de gegevens in beweging.
Overweeg om SQL Server-afstemming te gebruiken om query's zo efficiënt mogelijk te maken. Een goede query-optimizer schrijft en herschrijft query's totdat ze zijn geconfigureerd om het aantal blokken te verminderen dat de prestaties kan vertragen.
3. Identificeer de hoofdoorzaak van SQL Server-blokkering
Het bijhouden van prestatiestatistieken in de loop van de tijd is een uitstekende manier om blokkering van SQL Server te voorkomen. Door te lokaliseren welke sessies vaak worden geblokkeerd en om welke verklaringen het gaat, kunt u een actie bepalen om de hoofdoorzaken van terugkerende blokkades te verwijderen door middel van indexering, query-optimalisatie of andere middelen.
Een andere plaats om naar de oorzaak van blokkering te zoeken, is de werkbelasting van het systeem. Voer een werkbelastinganalyse uit om te bepalen of er sprake is van een toename. Een te zware werkbelasting zorgt ervoor dat SQL Server wordt geblokkeerd omdat het groeiende aantal query's zich opstapelt en wacht op toegang tot vergrendelde bronnen. Mogelijk moet u indexen toevoegen of de werklast verdelen over meerdere databases om problemen met de hoge werklastprestaties op te lossen.
4. Houd je statistieken up-to-date
Verouderde statistieken kunnen ertoe leiden dat inefficiënte queryplannen worden uitgevoerd omdat het plan niet is bijgewerkt om rekening te houden met wijzigingen. SQL Server start zoekcrawls om te zoeken naar verplaatste of ontbrekende gegevens, die op hun beurt blokken zullen creëren.
De meest effectieve manier om statistieken actueel te houden, is door zoveel mogelijk updates te automatiseren. Als u geen automatische updates kunt plannen, moet u handmatige updates toevoegen aan uw checklist voor gepland onderhoud om ervoor te zorgen dat de updates regelmatig worden uitgevoerd.
Blokkering van SQL Server is misschien een feit van het leven van DBA, maar er zijn manieren om de impact ervan op de prestaties van uw SQL Server-database te verminderen. Doorbreek de blokkeringscyclus door enkele van de hierboven besproken strategieën te implementeren. Met een beetje planning, optimalisatie en automatisering is het mogelijk om het optreden van SQL Server-blokkering te verminderen en, in sommige omstandigheden, helemaal uit te bannen.