SQL Server TempDB Tutorial

By: Eric Blinn | Updated: 2020-07-17 | Comments (2) | Related: More > System Databases

Problem

SQL Server tulee oletusarvoisesti asennettuna neljällä järjestelmätietokannalla. Ne ovat master, model, msdb ja TempDB. Minun täytyy tietää, mitä järjestelmän tietokanta ”TempDB” on ja mihin sitä käytetään. Nämä aiemmat tutorials covermaster, malli andmsdb hyvin yksityiskohtaisesti.

ratkaisu

tämä vihje kattaa TempDB-tietokannan. TempDB on tietokanta, jolla on monia toimintoja SQL Serverin sisällä, mutta sitä kutsutaan harvoin eksplisiittisesti. Se onso monia toimintoja, että se on usein yksi vilkkain, jos ei vilkkain tietokanta useimmissa SQL Server tapauksissa. Lue lisää, mitämonet näistä toiminnoista ovat!

SQL Server TempDB Overview

mikä on SQL Server TempDB: n tarkoitus?

yksi TempDB: n tehtävistä on toimia esimerkiksi sivu-tai swap-tiedoston tavoin käyttöjärjestelmän tasolla. Jos SQL Server-toiminto on liian suuri tallennettavaksi muistiin tai jos kyselyn alkuperäinen muistiavustus on liian pieni, ohjelma voidaan siirtää levylle TempDB: ssä.

TempDB: n toinen tehtävä on tallentaa väliaikaisia taulukoita. Jokainen, joka on luonut väliaikaisen taulukon T-SQL käyttäen pound tai hash etuliite ( # ) tai doublepound/hash etuliite ( # # ) on luonut objektin TempDB, koska tämä on, jos ne on tallennettu.

CREATE TABLE #MSSQLTips (RowID int);
tämä SSMS kuvakaappaus osoittaa, että väliaikainen taulukko #MSSQLTips on tallennettu TempDB subtree nimeltään "väliaikaiset taulukot"

kun atrigger suorittaa lisättyjä ja poistettuja virtuaalisia taulukoita tallennetaan TempDB: hen.

kaikissa tietokannoissa, joissa käytetään read COMMITTED SNAPSHOT ISOLATIONIA (RCSI), niiden versiointitiedot tallennetaan TempDB: hen.

jokainen edellä mainituista TempDB: n funktioista täytetään ilman, että tempdb: lle koskaan varsinaisesti mainitaan nimeä, ja näin ollen ne voivat olla yllättäviä käyttötarkoituksia TempDB: lle.

TempDB: tä voidaan kutsua myös eksplisiittisesti muutamalla tavalla. Taulukoita voidaan yleistää TempDB: ssä viittaamalla tietokantaan luo-lauseessa. Koodi näyttää tavalliselta DDL-toiminnolta, mutta TempDB: ssä ajettaessa taulukko on määritelmän mukaan väliaikainen taulukko.

CREATE TABLE TempDB.dbo.MSSQLTips(RowID int);
edellisen kuvakaappauksen tavoin tämä osoittaa, että taulukko voi olla

TempDB uudistuu jokaisen SQL Server-instanssin käynnistyksen yhteydessä. Kaikki tempdb: ssä edellisen istunnon aikana luodut objektit eivät säily palvelun uudelleenkäynnistyksen yhteydessä. TempDB saa alkuperäisen objektiluettelonsa model-tietokannasta, joka on yleensä tyhjä tai lähes tyhjä.

indeksin ylläpitoa voidaan vaihtoehtoisesti pyytää tekemään lajitteluja TempDB: ssä sen sijaan, että se yritettäisiin tehdä käyttämällä vapaata tilaa käyttäjätietokannassa.

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

Voinko ajaa SQL Serveriä ilman TempDB-tietokantaa?

SQL Server-palvelinta ei voi suorittaa (paitsi hyvin äärimmäisissä palautumisskenaarioissa ja veryshort-jaksoissa) ilman TempDB: tä.

onko TempDB-tietokannan versio ainutlaatuinen SQL Serverin versiolle, versiolle ja korjaustasolle?

TempDB on suurimmaksi osaksi tyhjä tietokanta, eikä SQL Serverin missään versiossa tai paikkatasossa ole mitään erityisen ainutlaatuista.

TempDB: hen on tehty viime vuosina vain 2 merkittävää muutosta versiotasolla. Ensimmäinen on, että SQL Server 2016 alkaen tempdb: n käyttäytyminen muuttui siten, että jäljityksen mahdollistavia lippuja T1117 ja T1118 ei enää pidetä parhaana käytäntönä. Toinen on se, että alkaen SQL Server 2019 jotkut raskaskäytetyt järjestelmän objektit TempDB: ssä päivitettiin muistitauluihin sisällön vähentämiseksi ja yleisen palvelimen suorituskyvyn parantamiseksi.

voitko pudottaa tai nimetä TempDB-tietokannan uudelleen ja pitäisikö sinun tehdä tämä jostain syystä?

TempDB: tä ei voi pudottaa, irrottaa, ottaa offline-tilaan tai uudelleennimetä. Minkä tahansa toiminnon yrittäminen palauttaa virheen. Ei ole mitään syytä, etteikö tätä pitäisi koskaan yrittää, koska tämä on kriittinen järjestelmätietokanta.

SQL Server TempDB-tietokannan sijainti

mitkä fyysiset tiedostot ja nimet tukevat TempDB-tietokantaa?

loogiset tiedostonimet ovat tempdev datalle ja templog logille.Ne löytyvät levyltä nimellä tempdb.mdf ja templog.ldf vastaavasti. TempDBcommonly on monia tiedostoja.

kuinka monta TempDB – tiedostoa pitäisi olla?

jokaista säiettä/ydintä/vCPU varten tulisi olla yksi TempDB-tiedosto, jonka enimmäismäärä on 8.

Mistä löydän TempDB-tietokannan levyltä ja SSMS: stä?

tiedostot löytyvät kyselyllä sys.sysfiles dmv tai tiedostoruutu tietokantapohjaiset ominaisuudet-Ikkunassa.

SELECT * FROM TempDB.sys.sysfiles;

onko sillä merkitystä, missä TempDB-tietokantatiedostot sijaitsevat (täytyykö niiden olla C:\, SAN jne.)?

parhaiden käytäntöjen mukaan TempDB-datatiedostojen pitäisi olla aktiivisuustasonsa vuoksi nopeimmassa varastossasaatavissa. Joissakin tapauksissa tämä voi tarkoittaa niiden tallentamista käyttäjätietokannan datatiedostoihin, mutta erilliselle levylle viitataan erillisenä taltiona, jos se on käytettävissä.

TempDB-lokitiedostosta on eriäviä mielipiteitä, mutta tämä kirjoittaja sulkee tämän tiedoston mieluummin muiden tapahtumalokitiedostojen kanssa.

voidaanko TempDB-tietokantaa siirtää?

TempDB-tietokantaa voi siirtää. Menetelmä tempdb: n siirtämiseksi on helppo toteuttaa. Muuta haluamasi tiedoston(tiedostojen) nimiominaisuutta.tiedostoja ei tarvitse siirtää kuten muita järjestelmätietokantoja siirrettäessä. SQLServer luo tiedoston(t) uudella nimellä ja/tai uudessa paikassa thenext service start. Älä vain unohda palata ja poistaa nowunused TempDB tiedostot, jotka jäävät jälkeen.

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-tietokannan koko ja kasvu

miten tietokannan ja tapahtumalokin kasvuasetukset tulisi määrittää TempDB-tietokantaa varten?

Autogrowth-asetukset tulee asettaa tiettyyn MB-lukuun, ei prosenttilukuun.Jokaisessa tiedostossa pitäisi olla sama määrä MBs: ää kasvua varten.

tiedostojen oikeanlainen mitoitus tietokantaa varten on yleensä paras käytäntö, mutta ei koskaan enemmän kuin TempDB: tä varten. Seuraa esimerkiksi-varsinkin jos se onuusi-ja onko tiedostot kasvavat normaalin käytön aikana.Jos näin on, muuta aloituskokoa siten, että SQL Server ei joudu kasvattamaan tiedostoja johdonmukaisesti jokaisen palvelun käynnistämisen jälkeen.

mikä on tempdb-tietokannan tyypillinen koko ja kuinka suureksi se voi kasvaa?

tähän kysymykseen ei ole hyvää vastausta. Se, mikä on tyypillistä yhdelle, ei ehkä ole tyypillistä toiselle. Tämä kirjoittaja on nähnyt tapauksia, joissa TempDB on perustavakäytetty keskimäärin vain muutaman MB käytettyä tilaa kulloinkin. Muita kuitenkin kysellään jatkuvasti ja käytetään satoja gigatavua tilaa-jopa TB: ssä mitattuna-erityisesti indeksin ylläpitoikkunan aikana.

kun päätetään, kuinka paljon tilaa TempDB: lle annetaan uudelle instanssille, on harvassa asioita, joita voidaan tehdä. Korvaako Uusi instanssi vanhan, olemassa olevan instanssin? Jos näin on, käytä perfmon-jäljitystä tai ajoitettua DMV-sieppausta määrittääksesi käytetty tila TempDB: ssä useiden päivien aikana. Varmista, että pidätykseen sisältyy huoltoikkuna. Yritä jakaa tarpeeksi tilaa thenew esimerkiksi huomioon suurin käytetty tila kaapattu aikana jäljittää withlisä heilua tilaa. Sitten oikea koko tiedostot mahtuvat että tilaa jakaminen.

alla olevat 2 kyselyä voivat auttaa. Ensimmäisessä otetaan tilannekuva tietojen ja lokitiedostojen koosta sekä tiedostoissa käytetystä tilasta. Tämä voidaan suorittaa säännöllisesti käytön seuraamiseksi ajan mittaan. Toinen kysely palauttaa kuinka monta kertaa lokitiedosto on kasvanut edellisen kerran instancewas uudelleenkäynnistys.

jos ei ole olemassa työmäärää, jota voidaan käyttää oppaana, eikä ole muita ohjeita, ehkä ohjelmistotoimittajalta, ainoa asia, joka voidaan tehdä, on varmistaa, että TempDB: ssä on tilaa ottaa huomioon suurimmat ennakoidut yksittäiset objektit, jotka voidaan lajitella TempDB: hen indeksin ylläpitämisen aikana. Sieltä seuraa käyttöä ja säädä sen mukaan.

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-tietokannan ylläpito

voitko pienentää TempDB-tietokannan tietokantaa ja tapahtumalokia?

teknisesti Kyllä, mutta tätä operaatiota ei pitäisi koskaan saattaa loppuun.Tavoitteena pitäisi aina olla oikean kokoinen TempDB. Jos jonkinlainen kertaluonteinen toiminta saa nämä tiedostot kasvamaan selittämättömästi, ne palaavat normaaleiksi nextservice-uudelleenkäynnistyksen yhteydessä.

pitäisikö indeksit rakentaa uudelleen?

TempDB ei ole osa indeksiin liittyviä ylläpitosuunnitelmia. Tämä ei tarkoita indeksien uudelleenrakentamista, tilastojen uudelleenorganisointia tai päivittämistä.

pitäisikö sinun suorittaa eheystarkistus mikä on koodi?

on eriäviä mielipiteitä siitä, pitäisikö eheys tarkistaa.Tämä kirjoittaja esittää argumentfor ja vastaan ja antaa lukijan päättää.

Against: an integrity check operation cannotcheck TempDB with the same totality as it can all other databases.TempDB: ssä olevat tiedot ovat erittäin ohimeneviä, joten eheyden tarkistusoperaatio ei löydä paljoa tarkistettavaksi milloin tahansa.Samasta syystä kaikki tiedot, jotka turmeltuvat, ovat todennäköisesti aktiivisia tietoja, jotka aiheuttavat hälytyksen, kun ne luetaan levyltä kauan ennen kuin eheyden tarkistusoperaatiota todennäköisesti kutsutaan.

For: while an integrity check operationcannot check everything in TempDB that it checks in other databases that doesntmean it has no value.TempDB on kiinteä tietokanta ja jos korruptiosta tiedetään, että se on välttämätöntä, jotta korjaaviin toimiin voidaan ryhtyä.

koodi eheystarkistuksen suorittamiseen on alla.

DBCC CHECKDB ('TempDB'); 

SQL Server TempDB-tietokannan objektit

mitkä ovat TEMPDB-tietokannan avaintaulukot ja menettelytavat, joista SQL Server-ammattilaisten on tärkeää tietää?

niitä ei ole.Tätä tietokantaa käytetään objects.It ei tule asennettuna mitään laitteita tai menettelyjä.

Voinko tallentaa omia esineitäni TEMPDB-tietokantaan?

objekteja voi toki luoda TempDB: ssä, mutta ne eivät säily SQL Server-palvelun alkutaipaleen jälkeen.

SQL Server TempDB-tietokannan käyttöoikeudet

kenellä on pääsy TempDB-tietokantaan ja onko käyttöoikeuksia eri tasoilla?

kaikilla on pääsy TempDB: hen ja sama pääsy.

SQL Server TempDB-tietokannan varmuuskopiointi

Tarvitseeko minun varmuuskopioida TempDB-tietokanta?

TempDB: tä ei voi varmuuskopioida. Se tallentaa vain ohimeneviä tietoja ja luodaan uudelleen joka kerta, kun palvelu käynnistyy, joten katastrofin sattuessa ei ole mitään palautettavaa.

SQL Server TempDB Database Recovery Model

What recovery TempDB should The TempDB database have and can the recovery modelbe changed?

TempDB on yksinkertaisessa palautuksessa, eikä tätä voi muuttaa.

SQL Server TempDB-tietokannan palautus

Onko koskaan tarvetta palauttaa TempDB-tietokantaa?

TempDB: tä ei voi palauttaa. Ei pitäisi olla tietoja ja ei koodia tempdb voidaan palauttaa. Jos TempDB muuttuu korruptoituneeksi, Poista tiedot ja lokitiedostot, jotta uusia voidaan luoda seuraavan palvelun käynnistyessä.

Next Steps
  • tämä vinkki näyttää, kuinka tehdä hälytyksiä TempDB-kokojen ja levytilan ongelmista
  • tämä vinkki näyttää, miten voidaan tehdä välitön tiedostojen alustus, joka on tärkeä ominaisuus kaikille DBs: lle, mutta erityisesti TempDB, jos se ei ole oikein mitoitettu.

päivitetty viimeksi: 2020-07-17

Hae skriptejä

seuraava vihjepainike

tietoa tekijästä
MSSQLTips tekijä Eric BlinnEric Blinn on vanhempi. Patruuna Patton Boggsin Data-arkkitehti. Hän on myös SQL-kirjailija ja PASS Local-ryhmänjohtaja.
Katso kaikki omat vinkkini
Aiheeseen liittyvät resurssit

  • lisää SQL Server DBA-vinkkejä…

You might also like

Vastaa

Sähköpostiosoitettasi ei julkaista.