piektdiena, 2012. gada 8. jūnijs

tempdb failu skaits

Uzstādot SQL Server instanci tiek izmantoti noklusētie iestatījumi- temdb datu bāze satur precīzi vienu failu. Šajā rakstā par cēloņiem, kāpēc bieži vien būtu vēlams palielināt failu skaitu un kā to izdarīt.

Cēloņi
Svarīgākais cēlonis, kāpēc tiek ieteikts palielināt failu skaitu temdb ir vietas iedalīšanas paātrināšanai. Angliski tas tomēr skan daudz labāk- "to minimize allocation bottleneck". Ko tad tas īsti nozīmē?

temdb ir specifiska ar to, ka tajā vienlaicīgi var tikt veidoti un dzēsti daudz relatīvi mazu objektu (atkarībā no tā, kas tiek darīts- kādi vaicājumi tiek izpildīti uz SQL Server). Lai nekad neiedalītu to pašu vietu vairākiem objektiem, tiek izmantota resursu slēgšana [1] PFS, GAM, SGAM lapām [2], kas rada konkurenci uz resursiem. Ja datu bāze sastāv no vairākiem failiem, tad vietas iedalīšana notiek proporcionāli pa failiem [3]. Tātad, vairāki paralēli pavedieni var vienlaicīgi iedalīt vietu vairākos failos- tā tiek samazināta konkurence uz lapām, kurās tiek veiktas atzīmes par vietas iedalīšanu [4].

[1] Šeit resursu slēgšana nav domāta kā "Locking", bet gan "Latches". "Latches" ir domāts lai vairāki pavedieni (threads) nemaina tos pašus datus (par to vairāk šeit). Piemēram, "locking" nodrošina, ka resurss netiek mainīts no citas transakcijas, ja tas mainīts pirmajā. Savukārt iedalot vietu tiek izmantoti "Latches", jo tiklīdz GAM atzīmēts, ka vieta ir aizņemta, nākamo brīvo vietu var aizņemt cits pavediens vai transakcija.
[2] Savulaik uzrakstīju rakstu par datu glabāšanu SQL Server. Gluži tie paši principi tiek izmantoti arī īslaicīgi nepieciešamu datu uzglabāšanai (tie var nonākt vai nenonākt līdz cietajam diskam- principu tas nekādi namina). tempdb datu bāze tiek izmantota īslaicīgi nepieciešamu datu uzlgabāšanai. Piemēram, lokālās un globālās temporālās tabulas, tabulas mainīgie, starptabulas (ko SQL Server izmanto kad nepieciešams), arī indeksu pārbūves laikā un citām lietām (msdn).
[3] Arī par šo tēmu savulaik esmu šo to rakstījis Faili un failu grupas SQL Server - sadaļa "failu grupas ar vairākiem failiem"
[4] Šī problēma ir iespējama pilnīgi visām datu bāzēm, bet ņemot vērā TempDB specifiku, te tā ir daudz vairāk vērā ņemama.

Otrs cēlonis, kāpēc failu skaitam ir nozīme- I/O palielināšanai (vairāk var lasīt Datu glabāšana SQL Server). Bet tas ir svarīgi tad, ja failus izvieto uz vairākiem fiziskiem diskiem un temdb rodas nepieciešamība datus glabāt diskā. Vienmēr tiek rekomendēts temdb failus izvietot uz cita diska, kā parastās datu bāzes. Te gan es pēdējā laikā īpaši nesaspringstu (bet vajadzētu), jo admini HDD tik ļoti virtualizē, ka nevar saprast kas notiek ar fiziskajiem diskiem.

Kā pievienot jaunu failu tempdb
Patiesībā šeit es neko daudz nemaz nevēlos teikt. To var izdarīt gan ar grafisko rīku palīdzību, gan ar skriptu palīdzību (SSMS, labā poga uz datu bāzes tempdb -> properties, tad Files un tad jau tālāk tik jāaizpilda lauciņi..). Šeit tikai dažas piezīmes:
  • tiek rekomendēts veidot tik failus, cik kodoli ir procesoram(iem). Piemēram, manam 4 kodolu brīnumam būtu vēlams, lai tempdb "Primary" failu grupā būtu 4 faili. Ja failu pievienošanai IO nav primārais cēlonis (skatīt sadaļu "Cēloņi"), tad svarīgs ir failu skaits, nevis to fiziskā atrašanās vieta. Ja nu kas, to var noskaidro atī šādi:
    Exec xp_msver 'processorcount';
  • tempdb tiek veidota no jauna katru reizi, kad SQL Server tiek pārstartēts. būtu labi, ja datu bāzes faili būtu izveidoti pēc iespējas tuvu reāli nepieciešamajam izmēram (un procesa paātrināšanai var paskatīt šo rakstu- SQL Server: Tūlītēja faila inicializācija). 
  • failiem vajadzētu būt ar vienādu izmēru un vienādiem soļiem, kādiem tie aug (lai dati tiek pievienoti proporcionāli).
  • pēc faila pievienošana nav nepieciešams pārstartēt sql server, tomēr tur sākās interesantumi ar to proporcionālo datu glabāšanu failu izmēram.
  • ja vēlas noņemt kādu failu no tempdb, tad tur var būt interesanti- fails var nebūt tukšs, tad tas tiks dzēsts tikai pēc SQL Server pārstartēšanas. Arī "Shrink file" nestrādā uz tempdb (sāk darboties pēc pārstartēšanas). Un tempdb izmēra apskatīšana ir ar niansēm (Kā apskatīt datu bāzes failu izmēru un atrašanās vietu).
Saites
Izmantotie avoti (par temdb un ne tikai):
Diagnosing and Resolving Latch Contention on SQL Server
What is allocation bottleneck
Managing TempDB in SQL Server: TempDB Configuration
Tempdb Configuration Best Practices in SQL Server

Nav komentāru:

Ierakstīt komentāru