tempdb

Objavljeno: 23-04-2014 | Autor: Milen Blagojević | Kategorija: Administracija, Saveti

0

Tempdb je sistemska baza dostupna svim korisnicima konektovanim na SQL Server i u njoj se čuva sledeće:

  • Privremeni objekti koji su eksplicitno kreirani, kao što su globalne i lokalne privremene tabele, privremene procedure, tejbl varijable ili kursori.
  • Interni objekti koji su kreirani od strane SQL Servera kao što su privremene tabele kreirane za čuvanje rezultata prilikom sortiranja ili join-ovanja.
  • Verzije redova iz tabela koje se generišu transakcijama u bazama koje koriste read-commited row versioning isolation ili snapshot isolation.
  • Verzije redova iz tabela koje se generišu transakcijama za: online indeks operacije, Multiple Active Result Sets (MARS) i AFTER trigere.

Operacije koje se izvršavaju u tempdb su minimalno logovane. Ovo omogućava da transakcije mogu biti rollback-ovane. Tempdb je baza koja se rekreira svakog puta kada se SQL Server startuje tako da sistem uvek kreće sa potpuno praznom tempdb bazom. Privremene tabele i procedure se automatski brišu prilikom diskonektovanja korisnika. Zbog toga ne postoje nikakvi objekti koji mogu biti sačuvani iz jedne sesije u drugu. Backup i restore operacije nisu dozvoljene nad tempdb.

Ovo su inicijalne vrednosti za tempdb fajove sa podacima i logom (ove vrednosti variraju u zavisnosti od verzije SQL Servera):

Fajl Logičko ime Fizičko ime Rast fajla
Podaci tempdev tempdb.mdf Automatski rast po 10% dok disk nije pun
Log templog templog.ldf Automatski rast po 10% do maksimuma od 2 TB

Veličina tempdb može uveliko uticati na performanse sistema. Na primer, ako je veličina tempdb premala, sistem može biti previše opterećen sa automatskim rastom umesto da izvršava zadatke. Ovo se može izbeći povećanjem veličine tempdb. Takođe, ukoliko je tempdb prevelika može ugroziti druge sisteme koji koriste isti disk, pa je preporuka uvek izdvajati tempdb na poseban disk na kome nije ni jedna druga korisnička baza, niti sistemski fajlovi.

 

Sledeće operacije se ne mogu izvršiti na tempdb:

  • Dodavanje filegroup-a
  • Backup i restore baze
  • Promena collation-a, defaultni collation je isti kao i celog SQL Servera (o ovome posebno treba voditi računa ukoliko je collation ostalih korisničkih baza drugačiji)
  • Promena owner-a baze, owner tempdb je dbo
  • Kreiranje snapshot-ova
  • Brisanje guest usera iz tempdb
  • Database mirroring
  • Preimenovanje tempdb
  • Brisanje primarne filegroup-e, data ili log fajla
  • CDC
  • DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • Postavljanje baze u OFFLINE mod
  • Postavljanje baze ili primarne filegroup-e u READ_ONLY mod

Preporuke Microsoft-a prilikom kreiranja tempdb:

  • Postavite recovery model tempdb na SIMPLE. (Pošto nije moguć backup i restore baze nema svrhe čuvati sve transakcije u logu)
  • Dozvolite bazi da raste automatski. Ovo omogućava bazi da raste dok ima prostora na disku. (Ukoliko produkciono okruženje ne može tolerisati eventualne time out-e koji se mogu desiti prilikom autogrowth operacije, dodelite unapred više prostora tempdb)
  • Postavite autogrowth parametar na odgovarajuću veličinu. Ukoliko je automatski rast baze u odnosu na veličinu podataka koji se upisuju u tempdb suviše mali, možete doći u situaciju da tempdb mora konstantno da se povećava a to će itekako uticati na performanse. Generalne preporuke za setovanje ovog parametra:
    tempdb veličina fajla FILEGROWTH parametar
    0 do 100 MB 10MB
    100MB do 200 MB 20MB
    preko 200 MB 10%
  • Ukoliko je moguće alocirajte dovoljno prostora za sve tempdb fajlove tako da se može obraditi bilo koji zahtev na produkcionom okruženju. Rast baze je potrebno postaviti na AUTOGROWTH ali baza treba rasti samo ukoliko se desi neki neplanirani workload.
  • Kreirajte koliko god tempbd fajlova je potrebno da biste maksimizovali propusni opseg diska, korišćenje većeg broja fajlova daje znatno bolju skalabilnost. Međutim, nemojte kreirati previše fajlova jer to takođe može smanjiti performanse sistema. Generalna preporuka je da se kreira jedan data fajl po svakom CPU na serveru i onda se dobijeni broj prilagođava odgovarajućim potrebama. Potrebno je napomenuti da se dual-core CPU posmatra kao dva CPU-a
  • Svaki data fajl treba biti iste veličine
  • Postaviti tempdb fajlove na brzi I/O podsistem
  • Postaviti tempdb fajlove na disk različit od onih na kojima se čuvaju korisničke baze