SQL Server TempDB Tutorial

Av: Eric Blinn | Oppdatert: 2020-07-17 | Kommentarer (2) | Relatert: Mer > Systemdatabaser

Problem

SQL Server kommer installert med fire systemdatabaser som standard. De er master, modell, Msdb og TempDB. Jeg trenger å vite hva systemdatabasen»TempDB» er og hva den brukes til. Disse tidligere tutorials covermaster, modell ogmsdb i stor detalj.

Løsning

dette tipset vil dekke TempDB-databasen. TempDB er en database som harmange funksjoner i SQL Server, men det kalles sjelden eksplisitt. Det har så mange funksjoner at det ofte er en av de travleste, om ikke den travleste databasen på DE FLESTE SQL Server-forekomster. Les videre for å lære hvamange av disse funksjonene er!

OVERSIKT Over SQL Server TempDB

hva er FORMÅLET MED SQL Server TempDB?

En Av Funksjonene Til TempDB er å handle noe som en side eller bytte fil villepå operativsystemnivå. HVIS EN SQL Server-operasjon er for stor til å bli fullført i minnet, eller hvis den første minnetilskuddet for en spørring er for liten, kan operasjonen flyttes til disk I TempDB.

En annen funksjon Av TempDB er å lagre midlertidige tabeller. Alle som har opprettet et midlertidig bord I T-SQL ved hjelp av et pund-eller hash-prefiks (#) eller doublepound/hash-prefikset ( # # ), har opprettet et objekt i TempDB, da dette er hvor de er lagret.

CREATE TABLE #MSSQLTips (RowID int);
dette ssms-skjermbildet viser at den midlertidige tabellen #MSSQLTips er lagret I TempDB i et undertre kalt "Midlertidige Tabeller"

Når atrigger utfører de innsatte og slettede virtuelle tabellene lagres I TempDB.

alle databaser som useREAD COMMITTED SNAPSHOT ISOLATION (RCSI) vil ha deres versjonsinformasjon lagret I TempDB.

Hver Av de Ovennevnte funksjonene Til TempDB er fullført uten å faktisk nevne tempdb etter navn og kan dermed være overraskende bruksområder For TempDB.

TempDB kan også kalles eksplisitt på noen få måter. Tabeller kan generatedin TempDB ved å referere til databasen i en create-setning. Koden ser ut som en vanlig DDL-operasjon, men når den kjøres I TempDB, er tabellen per definisjon en midlertidig tabell.

CREATE TABLE TempDB.dbo.MSSQLTips(RowID int);
Mye som det siste skjermbildet viser dette at et bord kan være

TempDB regenereres ved hver start AV SQL Server-forekomsten. Anyobjects som kan ha blitt opprettet I TempDB under en tidligere økt, vil ikke fortsette ved en omstart av tjenesten. TempDB får sin opprinnelige objektliste fra themodel database som vanligvis kommer til å være tom eller nesten tom.

Indeksvedlikehold kan eventuelt bli bedt om å gjøre slags I TempDB i stedet for å forsøke å gjøre det ved hjelp av ledig plass i brukerdatabasen.

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

Kan JEG kjøre SQL Server uten En TempDB-database?

SQL Server kan ikke kjøre (unntatt i svært ekstreme gjenopprettingsscenarier og i svært korte perioder) uten En TempDB.

er Versjonen Av TempDB-databasen unik for VERSJON, utgave og patchlevel AV SQL Server?

TempDB er en stort sett tom database, og det er ikke noe spesielt unikt om noen utgave eller patch nivå AV SQL Server.

Det har bare vært 2 meningsfulle endringer I TempDB de siste årene på versionlevel. Først er at starter I SQL Server-2016 virkemåten Til TempDBwas endret slik at aktivere spor flagg T1117 Og T1118 er ikke lenger consideda beste praksis. Den andre er at starter I SQL Server 2019 noen heavilyused system objekter I TempDB ble oppgradert til in-memory tabeller for å redusere contentionand forbedre total server ytelse.

kan Du slippe Eller endre Navn På TempDB-databasen, og bør du gjøre dette av en eller annen grunn?

TempDB kan ikke slippes, løsnes, tas frakoblet eller gis nytt navn. Forsøknoen av disse operasjonene vil returnere en feil. Det er ingen grunn til at dette burde forsøkes, da dette er en kritisk systemdatabase.

TempDB-Databaseplassering FOR SQL Server

hvilke fysiske filer og navn støtter tempdb-databasen?

standard logiske filnavn er tempdev for data og templogg for logg.De kan bli funnet på disk som tempdb.mdf og templogg.ldf henholdsvis. TempDBcommonly har mange datafiler.

Hvor mange TempDB-datafiler skal Det være?

Det bør være En TempDB datafil for hver tråd / kjerne / vCPU på instancewith maksimalt 8.

Hvor finner Jeg TempDB-databasen på disk og I SSMS?

filene kan bli funnet ved å spørre sys.sysfiles dmv eller fil-ruten i vinduet databaseproperties.

SELECT * FROM TempDB.sys.sysfiles;

gjør det en forskjell hvor TempDB-databasefilene ligger (trenger de å være PÅ C:\, SAN, ETC.)?

Beste praksis tilsier At TempDB datafiler skal være på den raskeste lagringtilgjengelig på grunn av deres aktivitetsnivå. For noen tilfeller kan dette bety storingthem med brukerdatabasen datafiler, men et eget volum på egen disk er foretrukket, hvis tilgjengelig.

Det er forskjellige meninger om TempDB-loggfilen, men denne forfatteren foretrekker å legge ut denne filen med de andre transaksjonsloggfilene.

Kan TempDB-databasen flyttes?

TempDB-databasen kan flyttes. Metoden For å flytte TempDB er enkelå implementere. Bare endre FILNAVNET egenskapen til ønsket fil (er).Ingen filer må flyttes som når andre systemdatabaser flyttes. SQLServer vil opprette filen (e) med det nye navnet og / eller i det nye stedet på thenext service start. Bare ikke glem å gå tilbake og slette nowunused TempDB filer som vil bli liggende igjen.

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

SQL Server TempDB Database Størrelse Og Vekst

Hvordan skal vekstinnstillingene for database og transaksjonslogg konfigureres for TempDB-databasen?

autogrowth-innstillinger bør settes til bestemte ANTALL MB, ikke en prosentandel.Hver datafil skal ha samme Antall MBs satt for vekst.

Høyre-dimensjonering av filene for en database er generelt en beste praksis, men aldri mer enn For TempDB. Overvåk forekomsten – spesielt hvis den erny-og avgjøre om filene vokser under normal drift.Hvis ja, endre startstørrelsen slik AT SQL Server ikke vil bli tvunget til å growthe filene konsekvent etter hver service start.

hva er Den typiske størrelsen På TempDB-databasen, og hvor stor kan Den bli?

Det er ikke noe godt svar på dette spørsmålet. Det som er typisk for en forekomst kanikke være typisk for en annen. Denne forfatteren har sett tilfeller Der TempDB er basicallyunused gjennomsnitt bare NOEN FÅ MB brukt plass til enhver tid. Ennå, othersare stadig spørres og bruker hundrevis AV GB plass-selv intospace målt I TB-spesielt under en indeks vedlikehold vindu.

når du bestemmer hvor mye plass Du skal dedikere Til TempDB på en ny forekomst, er det få ting som kan gjøres. Erstatter den nye forekomsten en eldre, eksisterendeinstance? I så fall bruke en perfmon spor eller planlagt DMV fangst å determinethe brukt plass I TempDB i løpet av flere dager. Sørg for å inkludere et vedlikeholdsvindu i den fangsten. Prøv å tildele nok plass påny forekomst for å ta hensyn til den største brukte plassen fanget under sporet med ekstra wiggle room. Deretter riktig størrelse filene for å passe inn i den plassallokeringen.

de 2 spørringene nedenfor kan hjelpe. Den første vil ta et øyeblikksbilde av størrelsen pådataene og loggfilene sammen med plassen som brukes i filene. Dette canbe kjøre på en jevnlig basis for å spore bruk over tid. Den andre spørringen willreturn antall ganger loggfilen har vokst siden forrige gang instancewas startet på nytt.

hvis det ikke finnes en eksisterende arbeidsbelastning som kan brukes som veiledning og det ikke finnes annen veiledning, kanskje fra en programvareleverandør, er det eneste som kan gjøres, å sørge for at Det er plass I TempDB for å ta hensyn til de største individuelle objektene som kan sorteres I TempDB under en indeksvedlikeholdwindows. Derfra overvåker du bruken og justerer deretter.

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';

Server TempDB Database Vedlikehold

kan du krympe databasen og transaksjonsloggen For tempdb databasen?

Teknisk, Ja, Men Dette er ikke en operasjon som noen gang skal fullføres.Målet bør alltid være Å riktig Størrelse TempDB. Hvis noen form for engangsoperasjonforårsaker at disse filene vokser uforklarlig, vil de gå tilbake til normal ved omstart av nextservice.

Skal du gjenoppbygge indekser?

TempDB vil ikke være en del av noen indeksrelaterte vedlikeholdsplaner. Dette betyr ingen ombygging av indekser, omorganisering eller oppdatering av statistikk.

skal du kjøre integritetskontroller hva er koden?

det er ulike meninger om hvorvidt tempdb bør kontrolleres for integritet.Denne forfatteren vil legge ut argumentetfor og imot og la leseren bestemme seg.

Mot: en integritetskontrolloperasjon kan ikke sjekke TempDB Med samme totalitet som det kan alle andre databaser.Dataene som finnes I TempDB er svært forbigående, slik at integritetskontrollen ikke kommer til å finne muchto-kontroll til enhver tid.Av samme grunn vil alle data som blir skadet, sannsynligvis være aktive data som vil føre til et varsel når de blir lest fra disk lenge før en integritetskontrolloperasjon sannsynligvis vil bli kalt.

For: mens en integritetskontroll operationcannot sjekker alt I TempDB som det sjekker i andre databaser som ikke betyr at det ikke har noen verdi.TempDB er en integrert database oghvis det er korrupsjon å vite om det er viktig, slik at korrigerende tiltak kan tas.

koden for å kjøre en integritetskontroll er under.

DBCC CHECKDB ('TempDB'); 

SQL Server TempDB Databaseobjekter

hva er de viktigste tabellene OG prosedyrene I TEMPDB-databasen som er viktigfor SQL Server Fagfolk å vite om?

Det er ingen.Denne databasen brukes til midlertidig lagring av objects.It kommer ikke installert med anytables eller prosedyrer.

Kan jeg lagre mine egne objekter i TEMPDB-databasen?

Objekter kan sikkert opprettes I TempDB, men de vil ikke fortsette forbi neste start AV SQL Server-tjenesten.

Sql Server TempDB Databasetillatelser

hvem har tilgang Til TempDB-databasen, og finnes det ulike nivåer av tillatelser?

Alle har tilgang og samme tilgang Til TempDB.

Sikkerhetskopiering AV TempDB-Database For SQL Server

må jeg sikkerhetskopiere tempdb-databasen?

TempDB kan ikke sikkerhetskopieres. Den lagrer bare forbigående data og gjenopprettes hver gang tjenesten starter, så det er ingenting å gjenopprette i tilfelle katastrofe.

SQL Server TempDB Database Recovery Model

hvilken gjenoppretting TempDB Bør TempDB-databasen ha, og kan gjenopprettingsmodellen endres?

TempDB er I ENKEL gjenoppretting, og dette kan ikke endres.

SQL Server TempDB Database Restore

er Det noen gang behov for å gjenopprette tempdb-databasen?

TempDB kan ikke gjenopprettes. Det bør ikke være noen data og ingen kode I TempDBto gjenopprettes. Hvis TempDB blir skadet, slett du bare dataene og loggfilene slik at nye kan genereres ved neste oppstart.

Neste Trinn
  • dette tipset viser hvordan du gjør varsler om problemer som finnes i TempDB-størrelserog diskplass
  • dette tipset viser hvordan du kan aktivere øyeblikkelig filinitialisering, en viktig funksjon for Alle DBs, men Spesielt TempDB hvis Den ikke er riktig størrelse.

Sist Oppdatert: 2020-07-17

få skript

neste tips knappen

Om forfatteren
mssqltips forfatter Eric Blinn Eric Blinn er Sr. Dataarkitekt For Squire Patton Boggs. Han ER OGSÅ EN SQL forfatter OG PASSERER Lokal Gruppeleder.
Vis alle mine tips
Relaterte Ressurser

  • Flere SQL Server Dba-Tips…

You might also like

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.