Mondatok, amiket nem akarsz mondani a DBA interjúdon

Pár hónapja fejeztük be új DBA-nk beszerzését (welcome Andor), és az interjúk embert próbáló órái alatt napokat öregedtünk, és sok tévhittel találkoztunk. Nekem kicsit érdekes élmény volt, hogy emberek egymástól függetlenül ugyanazt gondolják rosszul. (Az is érdekes, sőt megdöbbentő élmény volt, hogy sokan dolgoznak informatikusként, tekiként úgy, hogy nem tudják, hogyan is működik a TCP/IP protokoll – subnet, gateway, router, stb.). Arra gondoltam végül, hogy megosztom élményeimet a nagyérdeművel. Hát tessék:

I. A temptáblák

Sokan gondolják, hogy a temptáblák a memóriában laknak. Ez nem igaz (sőt, a tábla típusú változókra sem igaz). Egyszerű kísérlettel igazolható: készíts egy akkora temptáblát, mint az SQL szervernek adott összes memória. Ez sikerülni fog, és az SQL szerver – lehet, hogy kicsit lassan, de – működni fog, amit memória nélkül pedig nem tudna megtenni. Még egy gondolat a temptáblákról: kétféle van belőlük: lokális és globális. A lokális így készül:

create table #a (int a)

Ezt az adott processz látja csak, senki másnak nem lesz hozzáférése, és akkor szűnik meg, amikor a készítő processz kilép. Ezzel szemben a globális temptáblaát minden processz eléri. Az állítás bizonyítása megint egyszerű: Az előző sorhoz csapjunk hozzá még egyet:

create table ##a (int a)

Majd nyissunk egy másik query window-t (aminek más lesz a spidje), és futtassuk le az alábbit:

select a from #a
select a from ##a

A különbség érezhető lesz: az első elbukik, a második nem. A globális tábla élettartama a lokálishoz hasonlóan nem nyúlhat túl az őt létrehozó session életén, legkésőbb a kapcsolat megszakításakor törlődik.