Artikeln föreslår viktiga tips för att undvika blockeringar i SQL Servers
Även SQL Server har sett en enorm utveckling de senaste åren, användare står fortfarande regelbundet inför situationen med blockeringar. Helst bör en databasserver kunna hämta flera förfrågningar men det resulterar ofta i block. Konflikterna där en process väntar på att en annan resurs släpps kallas block. Och sedan finns det blockeringar.
Föreställ dig en situation där en person ber den andra att släppa en resurs och den andra väntar på att den första ska släppas. Som ett resultat sitter båda fast i en dödläge. Ingen av processerna kan fortsätta eftersom båda är låsta och kräver att den andra släpper resursen eller låser.
När du arbetar med SQL servers, blockeringar är ganska vanliga och de kan hämma hela processen. Det är inte möjligt att undvika blockeringar helt och hållet men man kan säkert minimera chansen att skapa ett dödläge.
Dödläge problem
Innan vi hoppar till tipsen för att minimera blockeringar, låt oss ta en snabb titt på några av most troliga orsaker till blockeringar. SQL servers är utformade för att upptäcka blockeringen automatiskt, men om de rapporteras bör DBA försöka förstå orsaken bakom dödläget. Most vanlig orsak är dålig design av databasen, utan korrekt validering och testning, och brist på indexering. Vissa blockeringar orsakas också av dåligt utformade frågor.
Det bör noteras att blockeringar direkt påverkar prestandan och kan stoppa behandlingen av databasen.
1. Håll ordern densamma
Låsningar är bundna om resurserna inte behandlas i en väldefinierad ordning. För att minimera blockeringar bör alla samtidiga transaktioner komma åt objekt i en väldefinierad ordning. DBA: er bör utforma tydliga regler för åtkomst till databasobjekt. Vanligtvis utför låsskärmar dödlägeskontroll och när de upptäcks väljer de ett dödläge och rullar tillbaka transaktionen. Således släpps alla lås och tidigare sessioner får fortsätta processen. Deadlock-offer väljs på grundval av Deadlock-prioritet som ställts in av Server eller återställning cost.
2. Begränsning under transaktion
Du kan begränsa användarna att mata in alla typer av data när transaktionen bearbetas och du kan uppdatera informationen före transaktionen för att undvika blockeringar. Försök också att hålla användarinteraktionen till miniminivåer eftersom det påverkar hastigheten. Helst bör transaktionerna vara korta och snabba för att undvika blockeringar. En applikation ska utformas så att den tar tag i låsen på minst möjlig tid och släpper dem så snabbt som möjligt.
3. NOLOCK Tips
När någon kör en fråga mot en tabell i SQL-standardisoleringsnivå låses tabellen och nästa frågor måste vänta på släppet. NOLOCK Hint är till hjälp i sådana situationer eftersom det tillåter åsidosättande av bordslåsning och andra frågor får enkel åtkomst.
4. Använd bundna anslutningar
Om samma applikation kan öppna två eller flera anslutningar som kan samarbeta med varandra skulle det inte skapa blockeringar. Det är därför det rekommenderas att använda bundna anslutningar.
Blockeringar är inte det enda besväret du sannolikt kommer att uppleva när du arbetar med en SQL Server databas. I själva verket incidenter av sql korruption är mer benägna att orsaka dig sorg. För att undvika ett dataförlustscenario investerar du i ett kraftfullt återställningsverktyg som DataNumen SQL Recovery.
Författarintroduktion:
Victor Simon är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive mdb-återhämtning och mjukvaruprodukter för SQL-återställning. För mer information besök https://www.datanumen.com/