Maybaygiare.org

Blog Network

SQL Server Index Fragmentering Oversikt

Av: Brady Upton | Oppdatert: 2016-06-22 | Kommentarer (5) / Relatert: Mer > Fragmentering Og Indeks Vedlikehold

Problem

Vi har alle hørt om database / indeks fragmentering (og hvis du ikke har, continuereading), men hva er det? Er det et problem? Hvordan vet jeg om den ligger i databasen min?Hvordan fikser jeg det? Disse spørsmålene kan være et tips i seg selv, men jeg skal prøve å gi deg en ide om hver i dette tipset.

Solution

UTEN å gå inn i mye detalj, LAGRER SQL Server data PÅ 8 KB sider. Når vi setter inn data i en tabell, VIL SQL Server tildele en side for å lagre disse dataene uten at dataene som er satt inn, er mer ENN 8 KB der det vil strekke seg over flere sider.Hver side er tilordnet en tabell. Hvis vi lager 10 tabeller, har vi 10 forskjellige sider.

når du setter inn data i en tabell, går dataene først til transaksjonsloggfilen. Transaksjonsloggfilen er en sekvensiell post som betyr at når du setter inn, oppdaterer og sletter poster, vil loggen registrere disse transaksjonene fra start til slutt. Datafilen på den annen side er ikkesekvensiell. Loggfilen vil skylle dataene til datafilen opprette sider allover stedet.

Nå som vi har en ide om hvordan data lagres, hva har dette å gjøre medfragmentering?det finnes to typer fragmentering: Intern Fragmentering og Ekstern Fragmentering.

SQL Server Intern Fragmentering

SQL Server Intern Fragmentering skyldes sider som har for mye ledig plass.La oss late som i begynnelsen av dagen har vi et bord med 40 sider som er100 % full, men ved slutten av dagen har vi et bord med 50 sider som bare er80% fulle på grunn av ulike slett og sett inn setninger hele dagen.Dette fører til et problem fordi nå når vi trenger å lese fra denne tabellen har vi toscan 50 sider i stedet for 40 som bør kan føre til en reduksjon i ytelsen.La oss se et raskt og skittent eksempel.

La oss si at jeg har følgende tabell Med En Primærnøkkel og en ikke-gruppert indeks På Firstname Og Etternavn:

dbo.Persontabell med En Primærnøkkel og en ikke-gruppert indeks på Fornavn og Etternavn

jeg snakker om måter å analysere fragmentering senere i dette tipset, men for nåvi kan høyreklikke på indeksen, klikke Egenskaper og Fragmentering for å se fragmenteringog sidens fylde. Dette er en helt ny indeks, så den er på 0% fragmentering.

SQL Server Index Egenskaper og Fragmentering Før Setter

LA oss SETTE inn 1000 rader i denne tabellen:

INSERT INTO Person VALUES('Brady', 'Upton', '123 Main Street', 'TN', 55555)GO 1000 

nå, la oss sjekke vår indeks igjen:

SQL Server Index Egenskaper Og Fragmentering etter Inserts

du kan se vår indeks blir 75% fragmentert og gjennomsnittlig prosent av fullpages (side fylde) øker til 80%. Denne tabellen er fortsatt så liten at 75% fragmentationwould trolig ikke føre til noen ytelsesproblemer, men som tabellen øker i størrelse og antall sider øker du kan se ytelsen degradere. Du kan også se fraskjermbildet over at denne tabellen gikk fra 0 sider til 4.

SQL Server Ekstern Fragmentering

Ekstern Fragmentering er forårsaket av sider som er ute av drift. La osspretend på begynnelsen av dagen har vi et perfekt bestilt bord. I løpet av dagen utsteder vi hundrevis av oppdateringserklæringer som muligens gir tom plass på en side og prøver å passe plass til andre sider. Dette betyr at lagringen vår må hoppe rundt for å skaffe dataene som trengs i stedet for å lese i en retning.

Analysere SQL Server Fragmentering

så er fragmentering et problem? Jeg tror det er det. Hvis du kan lagre hele databasen i minnet, eller hvis databasen din bare leses, ville jeg ikke bekymre meg for det, men de fleste av oss har ikke den luksusen.Jeg har jobbet på tusenvis av servere og analysere fragmentering nivåer er en av de første tingene jeg ser på. Faktisk, bare ved å fikse fragmentering, har jeg sett opp til200% forbedringer i spørringsytelsen.

Når du snakker om å analysere fragmenteringsnivåer, lurer du kanskje på hvordan vi kan gjøre dette. DBCC SHOWCONTIG – denne funksjonen er gammel og vil bli fjernet i fremtidige versjonerav SQL Server, men hvis DU fortsatt bruker SQL Server 2000 eller under, vil dette hjelpe. Insteadof skrive om det, jeg vil peke youhere eller du kan sjekke Ut Chad Boyd tiphere. Begge deler er gode ressurser.

DBCC SHOWCONTIG kommando og utgang

sys. dm_db_index_physical_stats-Introdusert I SQL Server 2005, returnerer denne DYNAMISKE managementview (DMV) størrelse og fragmentering informasjon for data og indekser av den angitte tabellen eller visningen.

SELECT OBJECT_NAME(ips.OBJECT_ID) ,i.NAME ,ips.index_id ,index_type_desc ,avg_fragmentation_in_percent ,avg_page_space_used_in_percent ,page_countFROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ipsINNER JOIN sys.indexes i ON (ips.object_id = i.object_id) AND (ips.index_id = i.index_id)ORDER BY avg_fragmentation_in_percent DESC 

Spørring sys.dm_db_index_physical_stats For Gjennomsnittlig Fragmentering

dette er trolig den mest brukte metoden for å analysere fragmentering. Youcan se fra skjermbildet ovenfor at jeg har en indeks som heter IX_RPCust_1 på therpcust-tabellen som er 98.83% fragmentert. Du kan se mer informasjon om Denne DMVherefrom Arshad Ali.

tredjeparts programvare-Tredjeparts programvare vil bidra til å identifisere fragmenteringslik at du ikke må. Greg Robidoux tilbyr et godt tips på IDERA SQL Defrag Managerhere.

Fixing SQL Server Fragmentering

Nå som vi har funnet fragmentering i databasen, hvordan løser vi det? Somanalyzing indekser, er det flere måter.

SQL Server Vedlikeholdsplaner-Vedlikeholdsplaner leveres Med SQLServer og er fine for noen oppgaver. Indeks vedlikehold etter min mening er ikke en avdem. Du kan legge til en gjenoppbygge indeksoppgave eller omorganisere indeksoppgave i maintenanceplan, men problemet er at du egentlig ikke kan bruke noen logikk på planen. Uten logic vil planen gjenoppbygge / omorganisere HVER indeks. Noen indekser kan ikke være fragmentert slik at de ikke trenger å bli gjenoppbygd. Noen indekser kan ha minimum fragmentationso de ville ha det bra med a omorganisere. Det er ingen måte å spesifisere dette i et maintenanceplan. InSQL Server 2016 det er nye muligheter for å administrere fragmentering.Egendefinert Skript-Egendefinerte skript er sannsynligvis veien å gå fordi du kan bruke logikk for å sjekke indeksfragmentering og deretter bestemme om du vil hoppe over indeksen, omorganisere eller gjenoppbygge. Jeg brukerola Hallengrens skriptog de gjør akkurat det jeg trenger dem til å gjøre. MSSQLTips.com har også disseressurser-SQL Server Fragmentering Og Indeks Vedlikehold Tips.

tredjeparts programvare-Tredjeparts programvare vil hjelpe defragmentere indekserså du trenger ikke å.

Neste Trinn
  • dette tipset gir deg en ide om noen av komponentene som er involvert i indexfragmentering. MSSQLTips.com tilbyr mer omfattende tips fokusert på hverav fagene jeg nevnthere.
  • Pass på å sjekke utchad Boyds SQL Server Fragmentering tutorial som tilbyr stor insightinto mange emner om fragmentering

Sist Oppdatert: 2016-06-22

get scripts

next tip button

About the author
MSSQLTips author Brady UptonBrady Upton is a Database Administrator and SharePoint superstar in Nashville, TN.
View all my tips
Related Resources

  • More SQL Server DBA Tips…

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.