Den här artikeln delar vikten av index i en SQL-databas. Den ger också en kort översikt över de klustrade och icke-klustrade indexen. Vidare diskuterar artikeln orsaker till SQL Server-indexkorruption, faktorer för att identifiera ett skadat index och metoder för att fixa det.
Index i SQL Server hjälper till att påskynda processen att hämta rader från en tabell eller vy. Men det korrekta valet av index är avgörande för att förbättra frågeprestanda. SQL Server stöder klustrade och icke-klustrade index. Korruption i något av dessa index kan orsaka förseningar vid hämtning av rader. Du kan också få andra eller raderade värden när du hämtar några rader. Dessutom kan de längsta pågående frågorna bli felaktiga på grund av korrupta index på tabeller.
Oavsett situation måste du reparera korruption i index i god tid för att förhindra att SQL Server-databasens arbetsflöde påverkas.
Innan vi diskuterar metoderna för att felsöka indexkorruption, låt oss kort överblicka klustrade och icke-klustrade index.
Översikt över klustrade och icke-klustrade index
Genom att tillämpa en primärnyckelrestriktion på en kolumn i en tabell skapas ett klustrat index på kolumnen. Ett klustrat index sorterar data fysiskt och lagrar data i en tabell baserat på dess definierade indexnyckel. Eftersom vi bara kan sortera data i en ordning är det inte möjligt att ha mer än ett klustrat index.
Däremot sorterar och lagrar ett icke-klustrat index data separat från raderna i en tabell. I huvudsak är det en kopia av kolumner med tabelldata som har länkar till den associerade tabellen. Till skillnad från klustrade index kan du ha ett eller flera icke-klustrade index.
Vad orsakar SQL Server Index Korruption?
Index kan bli kraftigt fragmenterade med tiden (på grund av massinsättning, uppdatering eller radering) och kräver regelbundet underhåll. Fragmenterade index kan orsaka dålig frågeprestanda och kan skadas. Faktorer som att uppgradera versionen av SQL Server, bugg i SQL-programmet, plötslig systemavstängning etc. kan leda till korruption av SQL Server-index. Särskilt kan köra en "komplex UPDATE-sats med NOLOCK-tips" i tabellen orsaka icke-klustrade indexkorruption.
Innan vi diskuterar metoderna för att reparera korruption i SQL Server-index, låt oss kolla in hur man identifierar skadade index.
Hur identifierar jag korruption i index för SQL Server?
Du kan avgöra om ett index är skadat med följande metoder:
- Hämta rader med andra eller borttagna värden och kör sedan ett "ROWID"-kommando för att identifiera eventuella saknade poster. Du kan också spåra de saknade posterna genom att kontrollera SQL-felloggen.
- Om du kör DBCC CHECKDB kommer följande felmeddelande att rapporteras om du har ett skadat icke-klustrat index.
Msg 2511, Level 16, State 1, Line 31
Tabellfel:Objekt-ID 613577224, index-ID 2, partitions-ID 72057594041401344,
alloc enhets-ID 72057594047037440 (skriv IN-raddata).
Nycklar ur funktion på sidan (1:264), fack 2 och 3.
- Om du har ett klustrat index kan du få följande meddelande som visar fel:
Server:Msg 1902, Level 16, State 3, Line 1
Det går inte att skapa mer än ett klustrat index i tabellen "Tabellnamn". Släpp det befintliga klustrade indexet "Clustered Index Name" innan du skapar ett annat.
Hur reparerar jag SQL Server Index Korruption?
Följ dessa kostnadsfria metoder som du kan använda för att reparera SQL Server-indexkorruption:
Metod 1 – Återställ från säkerhetskopia
Oavsett om du misstänker korruption i ett klustrat eller icke-klustrat index, använd säkerhetskopiering för att återställa de berörda data innan korruption inträffade.
Återställning från säkerhetskopia fungerar dock inte om säkerhetskopian saknar de senaste uppdateringarna. Det kan till och med leda till dataförlust. Prova i så fall nästa metod.
Metod 2 – Släpp och återskapa skadat index
Obs! Detta fungerar bara för icke-klustrade index.
Ta bort allt eller specifikt index som visar korruption genom att följa dessa steg:
- Anslut till en serverinstans i SQL Server Management Studio (SSMS) .
- På 'Objektutforskaren' expandera databasen som innehåller tabellen med skadat index.
- Högerklicka på tabellen, välj "Skripttabell som" håll muspekaren över 'SLIP och SKAPA till' och klicka på New Query Editor
Om du misslyckas med att återskapa skadade index kan du försöka reparera indexen.
Metod 3 – Reparera SQL-databasen
Som en sista utväg, kör kommandot DBCC CHECKDB med 'REPAIR_ALLOW_DATA_LOSS' för databasen som har skadat (klustrade eller icke-klustrade) index i en tabell. Men detta kan resultera i dataförlust. Som en alternativ lösning, försök att använda ett SQL-reparationsverktyg som Stellar Repair för MS SQL. Verktyget hjälper till att reparera databasfiler (.mdf och .ndf) och återställer index, vyer, lagrade procedurer och alla andra komponenter. Du kan importera de återställda indexen och andra databasobjekt direkt till en levande eller ny databas.
Ladda ner demoversionen av SQL-databasreparationsprogrammet för att förhandsgranska de återställningsbara indexen innan du sparar den reparerade filen.
Slutsats
Om du misstänker korruption i ett index, använd de faktorer som beskrivs i artikeln för att avgöra om indexet är skadat eller inte. Kolla också in de möjliga orsakerna bakom SQL Server-indexkorruption och metoder för att reparera korruption. Metoderna inkluderar att återställa databasen från säkerhetskopiering, släppa och återskapa indexen, och reparera databasen och återställa alla dess komponenter. Du kan också överväga att använda ett SQL-reparationsverktyg för att fixa de korrupta klustrade och icke-klustrade SQL-indexen och återställa otillgängliga databasobjekt.