Hvordan man opdager og forhindrer uventet vækst af TempDB-databasen

i denne artikel vil vi diskutere de bedste fremgangsmåder, der skal følges for at holde TempDB-databasen i en sund tilstand og forhindre enhver uventet vækst i databasen ud over den procedure, der kan følges for at opdage denne uventede vækst, når den først er sket.

TempDB-oversigt

TempDB-databasen er en af de vigtigste databaser over tempdb-serversystemer, der bruges til at gemme midlertidige brugerobjekter, f.eks. de midlertidige tabeller, der er defineret af brugeren eller returneret fra funktionsudførelse af tabelværdi, midlertidige lagrede procedurer, tabelvariabler eller indekser.

ud over brugerobjekterne vil TempDB blive brugt til at gemme interne objekter, der oprettes af Serverdatabasemotoren under de forskellige interne operationer, såsom mellemliggende sortering, spoling, aggregering eller markøroperationer.

TempDB-systemdatabasen bruges også til at gemme rækkeversionerne for at understøtte de funktioner, der kræver sporing af de ændringer, der udføres på tabelrækkerne, f.eks.

TempDB-databasen vil blive droppet og genskabt igen, hver gang SERVERTJENESTEN genstartes, begyndende med en ny ren kopi af databasen. Baseret på dette faktum, alle brugeren og intern database indsigelse, der er gemt på denne database vil blive droppet automatisk, når tjenesten er genstartet, eller når sessionen, hvor disse objekter oprettet er afbrudt. Derfor er sikkerhedskopierings-og gendannelsesoperationerne ikke tilgængelige for TempDB.

hvorfor TempDB

TempDB-systemdatabasen spiller en vigtig rolle i tuning af serverens ydeevne. Fordi det bruges som cachelagring til at gemme forskellige typer brugerdatabaseobjekter og til at gemme systemets interne objekter for at fremskynde serverdatabasemotorrelaterede processer.

på grund af denne vigtige rolle, som TempDB-systemdatabasen spiller for at forbedre den samlede ydeevne, er det meget vigtigt at anvende den oprindelige størrelse, auto-vækst og placering bedste praksis på TempDB-databasedata og logfiler. Anvendelse af disse bedste fremgangsmåder på en måde, der passer til din TempDB-serverforekomst arbejdsbyrde, forhindrer udvidelse af TempDB-databasedata og logfiler meget ofte, idet der tages højde for, at filen udvider processen, er en dyr proces, hvor Microsoft Server Engine vil anmode om ekstra plads fra operativsystemet, der vil udføre nulstilling på det rum, før det tildeles Microsoft Server Engine. Du kan forestille dig den tid og ressourcer, der kræves til denne tildelingsproces.

hvis du allerede anvender alle bedste fremgangsmåder, og der opstod en uventet vækstoperation, kan du fremskynde tildelingsprocessen ved hjælp af indstillingen database instant file initialisering, hvor operativsystemet vil stole på SERVERTJENESTEN og tildele den nødvendige plads uden at udføre den tid og ressourcer, der spilder drift på den tildelte plads.

Best practices

der er en række TempDB-systemdatabasekonfigurationer, der anbefales for at få den bedste ydelse fra den delte ressource og beskytte din SERVERFOREKOMST mod enhver uventet vækst i TempDB-databasedataene eller logfilerne, der kan fylde den underliggende diskplads.

disse konfigurationer omfatter:

  • antallet af TempDB-datafiler skal svare til antallet af logiske processorer, op til otte filer, på den maskine, hvor SERVERFOREKOMSTEN er installeret. Hvis antallet af logiske processorer på denne maskine er større end otte, skal du indstille antallet af datafiler til otte med muligheden for at udvide det med flere af 4, hvis du har et TempDB-stridsproblem
  • sørg for, at TempDB-filerne har samme størrelse inden for den samme filgruppe for at give den højest mulige grad af parallel operationseffektivitet på grund af den proportionale Fyldskrivningsmekanisme, der bruges til at skrive dataene inde i datafilerne. For at få flere oplysninger, skal du kontrollere, at du forstår den proportionelle udfyldningsalgoritme
  • Konfigurer TempDB-databasedataene og logfilerne med en rimelig initialstørrelse og automatisk vækstbeløb, der passer til den forventede mængde data, der vil blive skrevet på disse filer, og de forskellige typer arbejdsbelastninger, der udføres i din instance-serverinstans, herunder brugeraktiviteter og indeksvedligeholdelsesoperationer, for at undgå de hyppige små forøgelsesbeløb, der påvirker den samlede instansydelse
  • find TempDB-filerne på en hurtig I/O-serverinstans delsystem for at undgå enhver I / O flaskehalse
  • find TempDB på et separat diskdrev, væk fra brugerdatabaser og andre systemdatabaser. På denne måde vil de tunge læse-og skrivehandlinger, der udføres på TempDB, ikke påvirke eller blive påvirket af arbejdsbyrden i brugerdatabaserne, hvilket forbedrer den samlede ydeevne for SERVERINSTANS

for mere information om de nye forbedringer i TempDB-ydeevnen, se TempDB-Databasedokumentet.

hvor skal man anvende

forud for Version 2016-versionen kan TempDB-størrelsesallokeringen udføres efter installation af serverinstansen fra siden Databaseegenskaber. Hvor du kan styre antallet af databasedatafiler, der passer til den aktuelle serverforekomst, den oprindelige størrelse for hver databasedata og logfil, den korrekte værdi for indstillingen Automatisk vækst og placeringen af databasedata og logfiler.

for at udføre disse ændringer skal du udvide Databaseknudepunktet i Server Management Studio, udvide systemdatabaseknudepunktet og derefter højreklikke på tempdb-databasen og vælge indstillingen Egenskaber som nedenfor:

TempDB system Database

TempDB Systemdatabase

fra vinduet åbne Databaseegenskaber skal du gennemse siden filer og kontrollere eller ændre indstillingerne for forskellige databasedata og logfiler vist nedenfor:

TempDB Database Properties

alle disse ændringer, med de bedste fremgangsmåder, der passer til de aktuelle serverressourcer, der allerede er foreslået af installationsguiden, kan kontrolleres og udføres under installationsprocessen ved hjælp af installationsguiden til installation af tempdb-Server under Databasemotorkonfigurationer | TempDB, som vist nedenfor:

 Installationsvejledning til server-TempDB

TempDB

spor TempDB-vækst

sporing af væksten i TemDB-databasefilerne og de forespørgsler, der bruger TempDB-ressourcerne, kan udføres ved hjælp af de Ydelsesmonitortællere, der er knyttet til TempDB-filerne, og værktøjet profile, der lytter til en bestemt databasebelastningstype.

en mere databaseadministrators venlige måde at spore væksten af TempDB-databasefilerne spørger følgende dynamiske Ledelsesvisninger:

  • sys.dm_db_file_space_usage, der returnerer oplysninger om pladsforbrug for hver fil i databasen uden at vise, hvilken session eller opgave der forbruges det mellemrum
  • sys.dm_db_session_space_usage, der returnerer antallet af tildelte og deallokerede sider pr.hver session
  • sys.dm_db_task_space_usage, der returnerer antallet af tildelte og deallokerede sider pr.opgave

bemærk, at resultatet returneret af sys. dm_db_session_space_usage DMV opsummerede resultatet returneret fra sys.dm_db_task_space_usage DMV når alle opgaver er fuldført, på grund af det faktum, at flere opgaver relateret til den samme forespørgsel vil blive udført under den samme session. En anden fordel ved disse DMV ‘ er er, at den viser den type objekt, der bruger TempDB-ressourcerne, og hvis dette objekt er et brugerobjekt, såsom en midlertidig eller variabel tabel eller et internt objekt, såsom indeksvedligeholdelse eller sorteringsoperation. Så baseret på antallet af sider, der forbruges af hvert objekt, kan du angive, om TempDB forbruges af et internt eller brugerobjekt og optimere den pågældende forbruger.

sys.dm_db_file_space_usage

sys.dm_db_file_space_usage DMV kan bruges til at overvåge den diskplads, der bruges i TempDB-databasefilerne. Forespørgslerne nedenfor viser det ikke-tildelte rum, det rum, der bruges til at gemme rækkeversioner, den plads, der forbruges af de interne objekter og til sidst den plads, der forbruges af brugerobjekterne, som følger:

1
2
3
4
5
6
7
8
9
10
11

vælg (SUM(ikke allokeret_ekstent_page_count)*1.0/128) som TempDB_FreeSpaceAmount_InMB
fra sys.dm_db_file_space_usage;
vælg (SUM(version_store_reserved_page_count)*1.0/128) AS TEMPDB_VERSIONSTORESPACEAMOUNT_INMB
fra sys.Dm_db_file_space_usage;
vælg (sum(internal_object_reserved_page_count)*1.0/128) som TempDB_InternalObjSpaceAmount_Inmb
fra sys.dm_db_file_space_usage;
vælg (SUM(USER_OBJECT_RESERVED_PAGE_COUNT)*1.0/128) som TempDB_UserObjSpaceAmount_InMB
fra sys.Dm_db_file_space_usage;

fra resultatet, som returneres fra min lokale SERVERINSTANS, kan du se, at der er 60 MB ubrugt i TempDB-filerne, med kun 0,5 MB brugt til interne objekter og 1,5 MB brugt til brugerobjekterne, som vist nedenfor:

sys. dm_db_file_space_usage resultat

sys.Dm_db_file_space_usage resultat

sys.dm_db_task_space_usage og sys.dm_db_session_space_usage

sys.dm_db_task_space_usage og sys.dm_db_session_space DMV ‘ er bruges til at kontrollere antallet af tildelte sider og deallokeret af hver opgave eller session i tempdb-databasen. På denne måde vil du være i stand til at se, hvilken bruger eller et internt objekt, der bruger TempDB-rummet.

for eksempel returneres nedenstående resultat fra at forespørge sys.dm_db_task_space_usage DMV under TempDB database, hvor det vil returnere antallet af sider tildelt og deallokeret for hver bruger eller intern opgave, som følger:

sys.dm_db_task_space_usage resultat

men DBA kræver ikke, at mange detaljer for at begynde at spore forespørgslen, der bruger TempDB-ressourcerne. Så vi skal opsummere det forrige resultat for hver session ved hjælp af nedenstående forespørgsel:

1
2
3
4
5
6
7
8

vælg session_id,
SUM(internal_objects_alloc_page_count) som NumOfPagesAllocatedInTempDBforInternaltask,
SUM(internal_objects_dealloc_page_count) som Numofpagesdelocatedintempdbforinternaltask,
SUM(user_objects_alloc_page_count) som numofpagesallocatedintempdbforusertask,
sum(User_objects_dealloc_page_count) som NUMOFPAGESDELOCATEDINTEMPDBFORUSERTASK
fra sys. dm_db_task_space_usage
gruppe af session_id
Bestil af NumOfPagesAllocatedInTempDBforInternaltask DESC, NumOfPagesAllocatedInTempDBforUsertask DESC

og de opsummerede sider forbrug resultat pr hver session vil være som nedenfor:

sys.dm_db_task_space_usage per hver session

det samme resultat kan returneres ved at forespørge sys.dm_db_session_space_usage, som opsummerer sidetildelingen og deallokeringen for alle opgaver, der kører under den samme session, som vist nedenfor:

sys. dm_db_session_space_usage resultat

lad os udføre nogle handlinger på TempDB-databasen ved hjælp af både interne og brugerobjekter som nedenfor:

TempDB-operationer

udfør derefter den konsoliderede forespørgsel nedenfor, der returnerer antallet af tildelte og deallokerede sider af interne og brugerobjekter, og viser begge de afsluttede operationer (ved hjælp af sys.dm_db_session_space_usage DMV) og de uafsluttede operationer (ved hjælp sys. dm_db_task_space_usage DMV):

1
2
3
4
5
6
7
8
9
10
11
12
13
14

vælg SpacePerTask.session_id,
SpacePerSession.internal_objects_alloc_page_count
+ SUM (SpacePerTask.internal_objects_alloc_page_count) som NumOfPagesAllocatedInTempDBforInternaltask,
SpacePerSession.internal_objects_dealloc_page_count
+ SUM (SpacePerTask.internal_objects_dealloc_page_count) som Numofpagesdelocatedintempdbforinternaltask,
SpacePerSession.User_objects_alloc_page_count
+ SUM (SpacePerTask.User_objects_alloc_page_count) som NumOfPagesAllocatedInTempDBforUsertask,
SpacePerSession.User_objects_dealloc_page_count
+ SUM (SpacePerTask.User_objects_dealloc_page_count) som Numofpagesdelocatedintempdbforusertask
fra sys.dm_db_session_space_usage som SpacePerSession
indre JOIN sys.dm_db_task_space_usage som SpacePerTask på SpacePerSession.session_id = SpacePerTask.session_id
gruppe af SpacePerTask.session_id, SpacePerSession.internal_objects_alloc_page_count, SpacePerSession.internal_objects_dealloc_page_count, SpacePerSession.User_objects_alloc_page_count, SpacePerSession.User_objects_dealloc_page_count
Bestil efter NumOfPagesAllocatedInTempDBforInternaltask DESC, NumOfPagesAllocatedInTempDBforUsertask DESC

og det tidligere operationsresultat afspejler forespørgselsoutputtet, der viser antallet af sider, der er tildelt og deallokeret ved at oprette den midlertidige brugertabel og sortere dataene under indeksgenopbygningsprocessen, som vist nedenfor:

antal tildelte og deallokerede sider efter interne og brugerobjekter_ afsluttet og ufuldstændigt

for at få teksten til forespørgslen, der bruger TempDB-ressourcerne, kan du bruge dine UDVIKLINGSEVNER ved at slutte dig til resultatet af ys.dm_db_task_space_usage DMV med andre DMV ‘ er som sys.dm_eksec_anmodninger og sys.dynamisk styringsfunktion, hvor den viser de forespørgsler, der bruger tempdb-rummet nu, som i denne forespørgsel.

resultatet vil svare til nedenstående:

 resultat med forespørgselstekst

  • forfatter
  • Seneste indlæg
Ahmad Yaseen
Ahmad Yaseen er en Microsoft Big Data ingeniør med dyb viden og erfaring inden for administration og udvikling af Serverdatabaser.
han er Microsoft Certified Solution ekspert i Data Management og Analytics, Microsoft Certified Solution Associate i databaseadministration og-udvikling, Microsoft Certified Trainer og Microsoft Certified Trainer.
han bidrager også med sine tips i mange blogs.
Vis alle indlæg af Ahmad Yaseen

Ahmad Yaseen
Seneste indlæg af Ahmad Yaseen (se alle)
  • spørgsmål og svar – Februar 11, 2021
  • sådan overvåges blå Datafabrik-januar 15, 2021
  • brug af kildekontrol i blå Datafabrik – januar 12, 2021

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

More: