SQL Server TempDB Tutorial

de: Eric Blinn | actualizat: 2020-07-17 | Comentarii (2) | Related: mai multe > baze de date de sistem

problemă

SQL Server vine instalat cu patru baze de date de sistem în mod implicit. Sunt Maestru, model, msdb și TempDB. Trebuie să știu ce este baza de date a sistemului „TempDB”și pentru ce este folosit. Aceste tutoriale anterioare covermaster, model șimsdb în detaliu.

soluție

acest sfat va acoperi baza de date TempDB. TempDB este o bază de date care aremulte funcții în SQL Server, dar este rar numit în mod explicit. Are atât de multe funcții încât este adesea una dintre cele mai aglomerate, dacă nu chiar cea mai aglomerată bază de date din majoritatea instanțelor SQL Server. Citiți mai departe pentru a afla cemulte dintre aceste funcții sunt!

SQL Server tempdb Prezentare generală

care este scopul SQL Server TempDB?

una dintre funcțiile TempDB este de a acționa ceva de genul unei pagini sau a unui fișier swap la nivelul sistemului de operare. Dacă o operațiune SQL Server este prea mare pentru a becompleted în memorie sau în cazul în care acordarea de memorie inițială pentru o interogare este prea mic, theoperation poate fi mutat pe disc în TempDB.

o altă funcție a TempDB este stocarea tabelelor temporare. Oricine a creat un tabel temporar în T-SQL folosind un prefix pound sau hash ( # ) sau prefixul doublepound/hash ( # # ) a creat un obiect în TempDB, deoarece acestea sunt stocate.

CREATE TABLE #MSSQLTips (RowID int);
această captură de ecran SSMS arată că tabelul temporar # MSSQLTips este stocat în TempDB într-un subarbor numit "tabele temporare"

când atrigger execută tabelele virtuale inserate și șterse sunt storedin TempDB.

orice baze de date care useREAD COMMITTED SNAPSHOT ISOLATION (RCSI) vor avea informațiile lor de versionare stocate în TempDB.

fiecare dintre funcțiile de mai sus ale TempDB sunt finalizate fără a menționa vreodată de fapt tempdb după nume și, prin urmare, pot fi utilizări surprinzătoare pentru TempDB.

TempDB poate fi, de asemenea, numit în mod explicit în câteva moduri. Tabelele pot fi generatedin TempDB prin corelarea bazei de date într-o declarație create. Codul arataexact ca o operație normală DDL, dar atunci când rulează în TempDB tabelul este,prin definiție, un tabel temporar.

CREATE TABLE TempDB.dbo.MSSQLTips(RowID int);
la fel ca ultima captură de ecran, Acest lucru arată că un tabel poate fi

TempDB este regenerat la fiecare pornire a instanței SQL Server. Anyobjects care poate au fost create în TempDB în timpul unei sesiuni anterioare va notpersist la o repornire de serviciu. TempDB devine lista de obiecte inițiale de la baza de date themodel, care este, în general, va fi gol sau aproape gol.

Întreținerea indexului poate fi solicitată opțional să facă sortări în TempDB, mai degrabă decât să încerce să facă acest lucru folosind spațiu liber în baza de date a utilizatorului.

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

pot rula SQL Server fără o bază de date TempDB?

SQL Server nu poate rula (cu excepția scenariilor de recuperare foarte extreme și pentru perioade foarte scurte) fără TempDB.

este versiunea bazei de date TempDB unică pentru versiunea, ediția și nivelul de patch-uri al SQL Server?

TempDB este o bază de date cea mai mare parte gol și nu este nimic deosebit de unic aboutany ediție sau nivel de patch-uri de SQL Server.

au existat doar 2 modificări semnificative ale TempDB în ultimii ani la nivelul versiunilor. Primul este că începând din SQL Server 2016 comportamentul tempdb a fost modificat astfel încât activarea semnalelor de urmărire T1117 și T1118 nu mai sunt considerate cele mai bune practici. Al doilea este că începând cu SQL Server 2019, unele obiecte de sistem utilizate în TempDB au fost actualizate la tabele în memorie pentru a reduce conținutul și pentru a îmbunătăți performanța generală a serverului.

puteți renunța sau redenumi baza de date TempDB și ar trebui să faceți acest lucru din orice motiv?

TempDB nu poate fi abandonat, detașat, deconectat sau redenumit. Încercareaorice dintre aceste operațiuni va returna o eroare. Nu există niciun motiv pentru care acest lucru ar trebuisă fie încercat vreodată, deoarece aceasta este o bază de date critică a sistemului.

SQL Server TempDB locația bazei de date

ce fișiere fizice și nume acceptă baza de date TempDB?

numele de fișiere logice implicite sunt tempdev pentru date și templog pentru jurnal.Ele pot fi găsite pe disc ca tempdb.mdf și templog.ldf respectiv. TempDBcommonly are multe fișiere de date.

câte fișiere de date TempDB ar trebui să existe?

ar trebui să existe un fișier de date TempDB pentru fiecare thread/core/vCPU pe instancewith un maxim de 8.

unde găsesc baza de date TempDB pe disc și în SSMS?

fișierele pot fi găsite prin interogarea sys.sysfiles dmv sau panoul de fișiere din fereastra databaseproperties.

SELECT * FROM TempDB.sys.sysfiles;

are o diferență în cazul în care fișierele bazei de date TempDB locuiesc (nu au nevoiepentru a fi pe C:\, SAN, etc.)?

cele mai bune practici dictează că fișierele de date TempDB ar trebui să fie pe cel mai rapid storageavailable datorită nivelurilor lor de activitate. Pentru unele cazuri, acest lucru poate însemna stocarea acestora cu fișierele de date ale bazei de date a utilizatorului, dar un volum separat pe disc separat estepreferat, dacă este disponibil.

există opinii diferite cu privire la fișierul jurnal TempDB, dar acest autor prefersputting acest fișier cu alte fișiere jurnal de tranzacții.

poate fi mutată baza de date TempDB?

baza de date TempDB poate fi mutată. Metoda de mutare a TempDB este ușoarăpentru a implementa. Nu trebuie să fie mutate fișiere ca atunci când alte baze de date de sistem sunt mutate. SQLServer va crea fișierul(E) cu noul nume și/sau în noua locație de la thenext service start. Doar nu uitați să vă întoarceți și să ștergeți fișierele TempDB nefolosite care vor fi lăsate în urmă.

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 dimensiunea și creșterea bazei de date

cum ar trebui configurate setările de creștere a bazei de date și a jurnalului de tranzacții pentru baza de date TempDB?

setările Autogrowth ar trebui să fie setat la numere specifice de MB, nu un procent.Fiecare fișier de date ar trebui să aibă același număr de MBs setat pentru creștere.

dimensionarea corectă a fișierelor pentru o bază de date este, în general, o bună practică, dar niciodată mai mult decât pentru TempDB. Monitorizați instanța – mai ales dacă estenoi-și determinați dacă fișierele cresc în timpul funcționării normale.Dacă da, modificați dimensiunea de pornire astfel încât SQL Server să nu fie forțat să crească fișierele în mod consecvent după fiecare pornire a serviciului.

care este dimensiunea tipică a bazei de date TempDB și cât de mare poate obține?

nu există un răspuns bun la această întrebare. Ceea ce este tipic pentru o instanță poatenu este tipic pentru altul. Acest autor a văzut cazuri în care TempDB este practic nefolosită în medie doar câțiva MB de spațiu folosit la un moment dat. Cu toate acestea, altele sunt interogate în mod constant și folosesc sute de GB de spațiu – chiar și în spațiu măsurat în TB – în special în timpul unei ferestre de întreținere a indexului.

când decideți cât spațiu să dedicați TempDB pe o nouă instanță, există câteva lucruri care pot fi făcute. Noua instanță înlocuiește o instanță mai veche, existentăinstanță? Dacă da, utilizați o perfmon trace sau o captură DMV programată pentru a determina spațiul utilizat în TempDB pe parcursul mai multor zile. Asigurați-vă că pentru a include o fereastră de întreținere în care captura. Încercați să alocați suficient spațiu penou instanță pentru a ține cont de cel mai mare spațiu utilizat capturat în timpul urmăririicameră suplimentară de mișcare. Apoi dimensiunea corectă a fișierelor pentru a se potrivi în acea alocare a spațiului.

cele 2 întrebări de mai jos vă pot ajuta. Primul va face un instantaneu al mărimiidatele și fișierele jurnal împreună cu spațiul utilizat în fișiere. Acest lucru canbe rula în mod regulat pentru a urmări utilizarea în timp. A doua interogare willreturn numărul de ori fișierul jurnal a crescut de la ultima dată instancewas repornit.

dacă nu există un volum de lucru existent care poate fi folosit ca ghid și nu există alte îndrumări, probabil de la un furnizor de software, atunci singurul lucru care se poate face este să vă asigurați că există spațiu în TempDB pentru a ține cont de cele mai mari obiecte individuale anticipate care pot fi sortate în TempDB în timpul unui index maintenancewindows. De acolo, monitorizați utilizarea și ajustați în consecință.

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 întreținere bază de date

puteți micșora baza de date și Jurnalul de tranzacții pentru baza de date TempDB?

tehnic, Da, dar aceasta nu este o operațiune care ar trebui finalizată vreodată.Scopul ar trebui să fie întotdeauna TempDB de dimensiuni corecte. Dacă un fel de operațiune unică determină creșterea inexplicabilă a acestor fișiere, acestea vor reveni la normal la repornirea nextservice.

ar trebui să reconstruiți indexurile?

TempDB nu va face parte din planurile de întreținere legate de index. Aceasta înseamnă că nu există indici de reconstrucție, reorganizare sau actualizare a statisticilor.

ar trebui să executați verificări de integritate care este codul?

există opinii diferite cu privire la dacătempdb ar trebui verificat pentru integritate.Acest autor va expune argumentulpentru și împotriva și va permite cititorului să decidă.

Against: o operațiune de verificare a integrității cannotcheck TempDB cu aceeași totalitate ca și toate celelalte baze de date.Datele care există în TempDB sunt foarte tranzitorii, astfel încât operațiunea de verificare a integrității nu va găsi prea multe pentru a verifica la un moment dat.Din același motiv, orice date care devin corupte este probabil să fie date active care vor provoca o alertă atunci când sunt citite de pe disc cu mult înainte ca o operațiune de verificare a integrității să fie apelată.

For: În timp ce o operațiune de verificare a integrității nu poate verifica totul în TempDB pe care îl verifică în alte baze de date care nu înseamnă că nu are valoare.TempDB este o bază de date integrală șidacă există corupție știind despre ea este imperativ, astfel încât acțiuni corective pot fi luate.

codul pentru a rula o verificare a integrității este mai jos.

DBCC CHECKDB ('TempDB'); 

SQL Server TempDB bază de date obiecte

care sunt tabelele cheie și procedurile în baza de date TEMPDB care sunt importantepentru SQL Server profesioniști să știți despre?

nu există.Această bază de date este utilizată pentru stocarea temporarădepozitarea objects.It nu vine instalat cu anytables sau proceduri.

pot stoca propriile mele obiecte în baza de date TEMPDB?

obiectele pot fi create cu siguranță în TempDB, dar ele nu vor persista trecut thenext start a serviciului SQL Server.

permisiuni de baze de date SQL Server TempDB

Cine are acces la baza de date TempDB și există diferite niveluri de permisiuni?

toată lumea are acces și același acces la TempDB.

SQL Server TempDB backup de baze de date

am nevoie de backup pentru baza de date TempDB?

TempDB nu poate fi salvat. Stochează doar date tranzitorii și este recreat de fiecare dată când serviciul începe, astfel încât nu este nimic de recuperat în caz de dezastru.

SQL Server TempDB model de recuperare a bazei de date

ce TempDB de recuperare ar trebui să aibă baza de date TempDB și poate fi modificat modelul de recuperare?

TempDB este în recuperare simplă și acest lucru nu poate fi schimbat.

SQL Server TempDB database Restore

există vreodată o nevoie de a restabili baza de date TempDB?

TempDB nu poate fi restabilită. Nu ar trebui să existe date și nici un cod în Tempdbpentru a fi recuperate. Dacă TempDB devine corupt, pur și simplu ștergeți datele și fișierele jurnal, astfel încât altele noi să poată fi generate la următoarea pornire a serviciului.

pașii următori
  • acest sfat arată cum să faceți alerte pentru problemele găsite în dimensiunile Tempdbși spațiul pe disc
  • acest sfat arată cum să activați inițializarea instantanee a fișierelor, o caracteristică importantă pentru toate dB-urile, dar mai ales TempDB dacă nu este dimensionată corect.

Ultima actualizare: 2020-07-17

obțineți scripturi

butonul Sfat următor

despre autor
MSSQLTips autor Eric Blinn Eric Blinn este Sr. Arhitect de date pentru Squire Patton Boggs. El este, de asemenea, un autor SQL și să treacă lider de grup Local.
Vizualizați toate sfaturile mele
Resurse conexe

  • mai multe sfaturi SQL Server DBA…

You might also like

Lasă un răspuns

Adresa ta de email nu va fi publicată.