Tempdb Tutorial

af: Eric Blinn | opdateret: 2020-07-17 | Kommentarer (2) | relateret: mere > Systemdatabaser

Problem

kvm-Server leveres som standard installeret med fire systemdatabaser. De er master, model, Msdb og TempDB. Jeg har brug for at vide, hvad systemdatabasen “TempDB”er, og hvad den bruges til. Disse tidligere tutorials covermaster, model andmsdb i detaljer.

løsning

dette tip dækker TempDB-databasen. TempDB er en database, der harmange funktioner inden for en server, men det kaldes sjældent eksplicit. Det har så mange funktioner, at det ofte er en af de travleste, hvis ikke den travleste database på de fleste instanser. Læs videre for at lære hvadmange af disse funktioner er!

TempDB oversigt

Hvad er formålet med TempDB?

en af TempDB ‘ s funktioner er at handle noget som en side eller bytte fil villepå operativsystemniveau. Hvis en SERVERHANDLING er for stor til at blive fuldført i hukommelsen, eller hvis den oprindelige hukommelsestildeling for en forespørgsel er for lille, kan operationen flyttes til disk i TempDB.

en anden funktion af TempDB er at opbevaremidlertidige tabeller. Enhver, der har oprettet en midlertidig tabel med et pund eller hash-præfiks (#) eller doublepound/hash-præfikset (##) har oprettet et objekt i TempDB, da det er her, de er gemt.

CREATE TABLE #MSSQLTips (RowID int);
dette SSMS-skærmbillede viser, at den midlertidige tabel #Msskltips er gemt i TempDB i et undertræ kaldet "midlertidige tabeller"

når atrigger udfører de indsatte og slettede virtuelle tabeller gemmes i TempDB.

alle databaser, der brugerlæs forpligtet SNAPSHOT ISOLATION (RCSI), vil have deres versioneringsoplysninger gemt i TempDB.

hver af de ovennævnte funktioner i TempDB er afsluttet uden nogensinde at nævne tempdb ved navn og kan således være overraskende anvendelser til TempDB.

TempDB kan også kaldes eksplicit på nogle få måder. Tabeller kan genereresi TempDB ved at henvise til databasen i en opret sætning. Koden ser nøjagtigt ud som en normal DDL-operation, men når den køres i TempDB, er tabellen pr.

CREATE TABLE TempDB.dbo.MSSQLTips(RowID int);
ligesom det sidste skærmbillede viser dette, at en tabel kan være

TempDB regenereres ved hver start af SERVERFOREKOMSTEN. Eventuelle objekter, der kan være oprettet i TempDB under en tidligere session, vil ikke vedvare ved en genstart af tjenesten. TempDB får sin oprindelige objektliste framodel database, som generelt vil være tom eller næsten tom.

Indeksvedligeholdelse kan eventuelt blive bedt om at gøre sorteringer i TempDB i stedet for at forsøge at gøre det ved hjælp af ledig plads i brugerdatabasen.

ALTER INDEX ON . REBUILD WITH (SORT_IN_TEMPDB = ON);

kan jeg køre en TempDB-server uden en TempDB-database?

vi kan ikke køre (undtagen i meget ekstreme gendannelsesscenarier og i meget korte perioder) uden en TempDB.

er versionen af TempDB-databasen unik for versionen, udgaven og patchlevel af ?

TempDB er en for det meste tom database, og der er ikke noget særligt unikt vedenhver udgave eller patch-niveau af server.

der har kun været 2 meningsfulde ændringer i TempDB i de senere år på versionlevel. Den første er, at tempdb ‘ s adfærd blev ændret i starten af 2016, således at aktivering af sporflag T1117 og T1118 ikke længere overvejesen bedste praksis. Det andet er, at nogle tungt brugte systemobjekter i TempDB blev opgraderet til hukommelsestabeller for at reducere indhold og forbedre den samlede serverydelse.

kan du slippe eller omdøbe TempDB-databasen, og skal du gøre det af en eller anden grund?

TempDB kan ikke tabes, løsnes, tages offline eller omdøbes. Forsøgnogen af disse operationer vil returnere en fejl. Der er ingen grund til, at dette aldrig skal forsøges, da dette er en kritisk systemdatabase.

TempDB-databasens placering

hvilke fysiske filer og navne understøtter TempDB-databasen?

de logiske standardfilnavne er tempdev for data og templog for log.De kan findes på disken som tempdb.mdf og templog.ldf henholdsvis. TempDBcommonly har mange datafiler.

hvor mange TempDB datafiler skal der være?

der skal være en TempDB-datafil for hver tråd/kerne/vCPU på instancenmed maksimalt 8.

Hvor finder jeg TempDB-databasen på disk og i SSMS?

filerne kan findes ved at forespørge sys.sysfiles dmv eller filruden i vinduet databaseproperties.

SELECT * FROM TempDB.sys.sysfiles;

gør det en forskel, hvor TempDB-databasefilerne ligger (behøver de at være på C:\, SAN osv.)?

bedste praksis dikterer, at dine TempDB-datafiler skal være på den hurtigste lagringtilgængelige på grund af deres aktivitetsniveauer. I nogle tilfælde kan dette betyde lagring af dem med brugerdatabasedatafiler, men en separat lydstyrke på separat disk foretrækkes, hvis den er tilgængelig.

der er forskellige meninger om TempDB-logfilen, men denne forfatter foretrækker at lægge denne fil sammen med de andre transaktionslogfiler.

kan TempDB-databasen flyttes?

TempDB-databasen kan flyttes. Metoden til at flytte TempDB er letat implementere. Du skal blot ændre filnavnet egenskaben for den ønskede fil(er).ingen filer skal flyttes som når andre systemdatabaser flyttes. vil oprette filen / filerne med det nye navn og / eller på den nye placering vednæste servicestart. Bare glem ikke at gå tilbage og slette de Nuubrugte TempDB-filer, der vil blive efterladt.

ALTER DATABASE MODIFY FILE ( NAME = N'tempdev', FILENAME = N'G:\DATA\tmp.mdf');GOALTER DATABASE MODIFY FILE ( NAME = N'templog', FILENAME = N'H:\LOG\tmplog.ldf');GO

TempDB-databasestørrelse og-vækst

hvordan skal vækstindstillingerne for database og transaktionslog konfigureres til TempDB-databasen?

Autogvækstindstillinger skal indstilles til specifikke antal MB, ikke en procentdel.Hver datafil skal have det samme antal MBs indstillet til vækst.

højre-dimensionering af filerne til en database er generelt en bedste praksis, men aldrig mere end for TempDB. Overvåg forekomsten – især hvis den ernyt-og afgøre, om filerne vokser under normal drift.Hvis det er tilfældet, skal du ændre startstørrelsen, så serveren ikke bliver tvunget til at vokse filerne konsekvent efter hver servicestart.

Hvad er den typiske størrelse af TempDB-databasen, og hvor stor kan den blive?

der er ikke noget godt svar på dette spørgsmål. Hvad der er typisk for en instans kanikke være typisk for en anden. Denne forfatter har set tilfælde, hvor TempDB grundlæggende ikke bruges i gennemsnit kun et par MB brugt plads til enhver tid. Endnu, andre bliver konstant forespurgt og bruger hundreder af GB plads – selv i rummet målt i TB – især under et indeksvedligeholdelsesvindue.

når man beslutter, hvor meget plads der skal afsættes til TempDB på en ny instans, er der få ting, der kan gøres. Erstatter den nye instans en ældre, eksisterendeinstans? I så fald skal du bruge en perfmon trace eller planlagt DMV-optagelse til at bestemme det anvendte rum i TempDB i løbet af flere dage. Sørg for at medtageet vedligeholdelsesvindue i den optagelse. Prøv at tildele nok plads påny instans til at tage højde for det største brugte rum, der er fanget under sporet med et ekstra vrikkerum. Så rigtige størrelse filerne til at passe ind i denne plads tildeling.

de 2 forespørgsler nedenfor kan hjælpe. Den første vil tage et øjebliksbillede af størrelsen afdata og logfiler sammen med det rum, der bruges i filerne. Dette kan køres regelmæssigt for at spore brugen over tid. Den anden forespørgsel vilreturnere antallet af gange logfilen er vokset siden sidste gang instansen blev genstartet.

hvis der ikke er en eksisterende arbejdsbyrde, der kan bruges som vejledning, og der ikke er anden vejledning, måske fra en programleverandør, så er det eneste, der kan gøres, at sikre, at der er plads i TempDB til at redegøre for de størsteforebyggende individuelle objekter, der kan sorteres i TempDB under en indeksvinduer. Derefter skal du overvåge brugen og justere i overensstemmelse hermed.

USE TempDB;GOSELECT GETUTCDATE() AS SnapshotDateTime, groupid --0 = data, 1 = log, SUM(size/128.) SizeOnDiskInMB, SUM(FILEPROPERTY(name, 'spaceused')/128.) MBUsedWithinFile FROM TempDB.sys.sysfilesGROUP BY groupid; SELECT * FROM sys.dm_os_performance_countersWHERE counter_name = 'Log Growths' AND instance_name = 'tempdb';

vedligeholdelse af server TempDB Database

kan du krympe databasen og transaktionsloggen for TempDB-databasen?

teknisk set, Ja, men dette er ikke en operation, der nogensinde skal afsluttes.Målet skal altid være at rette størrelse TempDB. Hvis en slags engangsoperation får disse filer til at vokse uforklarligt, vil de vende tilbage til det normale ved genstart af næste service.

skal du genopbygge indekser?

TempDB indgår ikke i nogen indeksrelaterede vedligeholdelsesplaner. Dette betyder ingen genopbygningsindekser, omorganisering eller opdatering af statistikker.

skal du køre integritetskontrol hvad er koden?

der er forskellige meninger om, hvorvidt tempdb bør kontrolleres for integritet.Denne forfatter vil lægge argumentetfor og imod og lade læseren beslutte.

imod: en integritetskontrol operation cannotcheck TempDB med samme totalitet som det kan alle andre databaser.De data, der findes i TempDB, er meget forbigående, så integritetskontroloperationen vil ikke finde meget at kontrollere på et givet tidspunkt.Af samme grund er alle data, der bliver korrupte, sandsynligvis aktive data, der vil forårsage en advarsel, når de læses fra disken længe før en integritetskontroloperation sandsynligvis vil blive kaldt.

for: mens en integritetskontroloperationkan ikke kontrollere alt i TempDB, som det kontrollerer i andre databaser, der ikke betyder, at det ikke har nogen værdi.TempDB er en integreret database oghvis der er korruption at vide om det er afgørende, så korrigerende handlingkan tages.

koden til at køre en integritetskontrol er nedenfor.

DBCC CHECKDB ('TempDB'); 

TempDB-databaseobjekter

hvad er de vigtigste tabeller og procedurer i TEMPDB-databasen, som er vigtige for fagfolk i tempdb-serveren at vide om?

der er ingen.Denne database bruges til midlertidig opbevaring af objects.It kommer ikke installeret med anytables eller procedurer.

kan jeg gemme mine egne objekter i TEMPDB-databasen?

objekter kan helt sikkert oprettes i TempDB, men de vil ikke fortsætte efternæste start af SERVERTJENESTEN.

TempDB Database Permissions

Hvem har adgang til TempDB databasen og er der forskellige niveauer af tilladelser?

alle har adgang og samme adgang til TempDB.

tempdb Database Backup

skal jeg sikkerhedskopiere TempDB databasen?

TempDB kan ikke sikkerhedskopieres. Det gemmer kun forbigående data og genskabeshver gang tjenesten starter, så der er intet at blive genoprettet i tilfælde af en katastrofe.

tempdb Database Recovery Model

hvilken gendannelse TempDB skal TempDB-databasen have, og kan gendannelsesmodellenændres?

TempDB er i simpel opsving, og dette kan ikke ændres.

TempDB Database Restore

er der nogensinde behov for at gendanne TempDB-databasen?

TempDB kan ikke gendannes. Der bør ikke være nogen data og ingen kode i Tempdbat blive genoprettet. Hvis TempDB bliver korrupt, skal du blot slette data og logfiler, så nye kan genereres ved næste service opstart.

næste trin
  • dette tip viser, hvordan man laver advarsler om problemer, der findes i TempDB-størrelserog diskplads
  • dette tip viser, hvordan man kan aktivere øjeblikkelig filinitialisering, en vigtig funktion for alle DB ‘ er, menisær TempDB, hvis den ikke er korrekt dimensioneret.

sidst opdateret: 2020-07-17

Hent scripts

næste tip knap

om forfatteren
forfatter Eric Blinn Eric Blinn er Sr. Dataarkitekt for Godsejer Patton Boggs. Han er også forfatter og PASS lokal gruppeleder.
se alle mine tip
relaterede ressourcer

  • flere tip til Server DBA…

You might also like

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.