Zobrazujú sa príspevky s označením SQL Server 2008. Zobraziť všetky príspevky
Zobrazujú sa príspevky s označením SQL Server 2008. Zobraziť všetky príspevky

Microsoft SQL Server 2008 – Nové vlastnosti T-SQL.

Po základnom prehľade noviniek SQL Server 2008, ktoré boli viacmenej určené pre databázových administrátorov, prichádzajú na rad novinky pre programátorov. Niektoré novinky boli už na stránkach tohto časopisu predstavené (LINQ, ...), my sa budeme v tejto časti venovať novinkám v oblasti jazyka Transact SQL.

Dátumové dátové typy
Pravdepodobne najžiadanejšou zmenou pred uvedením SQL Server 2008 bolo zlepšenie dátumových dátových typov – špeciálne zavedenie oddeleného dátumového a časového dátového typu. SQL Server 2008 uvádza úplne nové dátové typy DATE, TIME a DATETIMEOFFSET a vylepšuje existujúci dátový typ DATETIME zavedením dátového typu DATETIME2. V nasledovnej tabuľke sú zhrnuté ich charakteristiky:

































Dátový typ
Rozsah
Presnosť
Použitie
DATE
1.1. 0001-31.12.9999
1 deň
2009-10-05
TIME
-
100 ns
12:15:55.1234567
DATETIME2
1.1. 0001-31.12.9999
100 ns
2009-10-05 12:15:55.1234567
DATETIMEOFFSET
1.1. 0001-31.12.9999
100 ns
2009-10-05 12:15:55.1234567 + 03:00

Pozn.
Dátový typ DATETIMEOFFSET rozširuje existujúci dátový typ DATETIME2 o podporu časovej zóny.

HIERARCHYID
Ďalším novým dátovým typom je HierarchyID, ktorý je určený pre manipuláciu s hierarchickými údajmi. Interne je tento dátový typ implementovaný ako VARBINARY hodnota určujúca aktuálnu pozíciu uzla v hierarchii. Pre manipuláciu s hierachickými dátami môžeme použiť definované metódy HIERARCHYID:GetRoot(), GetLevel(), GetDescendant(), GetAncestor(), Parse(), GetReparentedValue(), Read(), Write(), ktoré sú prístupné prostredníctvom T-SQL alebo klientskeho API.

Large UDT
V predchádzajúcej verzii SQL Server 2005 bola maximálna veľkost user-defined types (UDT) v CLR stanovená na 8000 bytov. SQL Server 2008 rozširuje maximálnu veľkosť UDT na 2 GB. Ak hodnota UDT je menšia ako 8000 bytov, SQL Server s ňou zaobchádza ako v predchádzajúcej verzii SQL Server 2005. Ak hodnota prekročí 8000 bytov, databázový engine ju interpretuje ako large object s unlimited veľkosťou. Jeden zo spôsobov uplatnenia large UDT je implementácia priestorových dátových typov - SQL Server 2008 podporuje dátové typy GEOMETRY a GEOGRAPHY, ktoré sú implemetované práve ako CLR UDT.

Row Constructor
V najnovšej verzii SQL Server 2008 je podporovaná aj vlastnosť row constructor, pomocou ktorej môžeme napríklad vložiť viacero záznamov jedným príkazom INSERT:

INSERT INTO dbo.Customers(custid, companyname, phone, address)
VALUES
  (1, 'cust 1', '(111) 111-1111', 'address 1'),
  (2, 'cust 2', '(222) 222-2222', 'address 2'),
  (3, 'cust 3', '(333) 333-3333', 'address 3'),
  (4, 'cust 4', '(444) 444-4444', 'address 4'),
  (5, 'cust 5', '(555) 555-5555', 'address 5');

Rovnako môžeme túto vlastnosť využiť aj pri definovaní vnútornej query CTE.

Table-valued parameter
SQL Server 2008 podporuje aj zadávanie parametrov vo forme tabuľky – táto vlastnosť je nazývaná table–valued parameters. O čo v skratke ide – vývojári majú teraz možnosť vytvoriť uloženú procedúru alebo funkciu, ktorá akceptuje parameter typu table. Pred volaním danej procedúry alebo funkcie sa parameter naplní údajmi, ktoré chceme spracovať v procedúre, a následne sa zavolá procedúra s naplneným parametrom typu table. Parameter musí byť definovaný ako READONLY. Jedno z možných použití je náhrada temporary tabuliek, nakoľko table typ nevytvára štatistiky a nie je potrebná rekompilácia procedúry. Na druhej strane neexistencia štatistík prináša j nevýhodu – je potrebné zvážiť aj výkonnosť procedúry pri väčšom množstve záznamov.

MERGE
Príkaz MERGE je štandardný príkaz, ktorým môžeme súčasne vykonať príkazy INSERT, UPDATE a DELETE podľa definovaných podmienok. Výhoda používania MERGE príkazu je v tom, že okrem toho, že je tento príkaz atomický, tak jeho výkonnosť je lepšia ako v prípade vykonania individuálnych príkazov INSERT, UPDATE, DELETE. MERGE môžeme využíva pri porovnávaní obsahu 2 tabuliek – jedna je definovaná ako zdrojová príkazom USING a druhá ako cieľová príkazom MERGE INTO. Definovanie podmienky je podobné ako pri JOIN – špecifikovaním predikátu ON príkazom, ktorým definujeme ktoré záznamy zo zdrojovej tabuľky sa zhodujú so záznamami v cieľovej tabuľke, ktoré záznamy sa nachádzajú len v zdrojovej tabuľke a ktoré sa nachádzajú len v zdrojovej tabuľke. Na základe takto definovanej podmienky môžeme určiť, ktoré záznamy sa majú vložiť do cieľovej tabuľky, ktoré sa majú aktualizovať a ktoré prípadne zmazať:

MERGE INTO dbo.Customers AS TGT
USING dbo.CustomersStage AS SRC
 
ON TGT.custid = SRC.custid
WHEN MATCHED THEN
  UPDATE SET
    TGT.companyname = SRC.companyname,
    TGT.phone = SRC.phone,
    TGT.address = SRC.address
WHEN NOT MATCHED THEN
  INSERT (custid, companyname, phone, address)
 
VALUES (SRC.custid, SRC.companyname, SRC.phone, SRC.address)
WHEN NOT MATCHED BY SOURCE THEN
  DELETE


Grouping sets
Vďaka rozšíreniu príkazu GROUP BY o tzv. GROUPING SETS majú vývojári možnosť definovať viacnásobné zoskupovanie výsledného resultset-u v query. Logicky rovnaký výsledok je možné dosiahnuť aj viacnásobným spustením tej istej query s rôznym triedením a výsledok spojiť pomocou UNION ALL. Výhoda GROUPING SETS je v tom, že výsledný kód je prehľadnejší a vďaka optimalizácii prístupu k dátam a prípadnom počítaní agregácií aj rýchlejší.

SELECT custid, empid, YEAR(orderdate) AS orderyear, SUM(qty) AS qty
FROM dbo.Orders
GROUP BY GROUPING SETS (
  ( custid, empid, YEAR(orderdate) ),
  ( custid, YEAR(orderdate)        ),
  ( empid, YEAR(orderdate)         ),
  () );

Samostaný článok by si zasluhovali aj ďalšie nové vlastnosti, ako napr. Sparse columns, filtrované indexy a štatistiky, rozšírenia DDL triggrov a pod., alebo aj podrobnejšie predstavenie a použitie nového dátového typu HIERARCHYID. Vzhľadom na rozsah článku sa budeme tejto problematike venovať podrobnejšie v niektorom z ďalších článkov.

Resource Governor – riadenie zdrojov SQL Server 2008

Možnosť spravovania zdrojov databázového servera je vlastnosť, ktorú by mal mať každý databázový systém s ambíciou uplatniť sa v tom najnáročnejšom – podnikovom – prostredí. Spoločnosť Microsoft takúto ambíciu pre SQL Server deklaruje už dávnejšie a postupne tento jeden zo svojich vlajkových serverovských produktov dopĺňa o vlastnosti potrebné na uplatnenie sa v tomto segmente. Tak je to aj v prípade najnovšej verzie SQL Server 2008, ktorý prvý krát obsahuje aj nástroj na riadenie zdrojov servera.
Resource Governor – tak sa tento nástroj v terminológii Microsoft nazýva – je novou technológiou na spravovanie zdrojov SQL Server 2008. V súčasnej verzii je možné riadiť CPU a pamäť a pozrime sa teda bližšie na to, čo vlastne riadenie zdrojov predstavuje. V prípade SQL 2008 Resource Governor prideľuje podľa vopred nastavených pravidiel zdroje (ako sme spomínali množstvo CPU a pamäte) prichádzajúcim požiadavkám (dotazom). Ak teda vieme našich užívateľov rozdeliť (klasifikovať) do logických skupín (napr. analytici, bežní užívatelia, management a pod.), tak potom môžeme týmto skupinám prideliť podľa priorít príslušné zdroje – tak napr. bežným užívateľom pridelíme 40% CPU, analytikom 30% CPU a managementu 20% CPU. V prípade, že tieto skupiny užívateľov budú v rovnakom čase súťažiť o zdroje servera, Resource Governor uplatní nadefinovanú politiku rozdelenia zdrojov a tak zabezpečí, že nenastane preťaženie servera a server bude vykazovať konzistentný čas odozvy v danom čase.
Ako sa teda dopracujeme k danému stavu ? Resource Governor sa skladá z nasledovných komponentov:

Klasifikačná funkcia
Pomocou tejto funkcie zabezpečíme klasifikáciu našich užívateľov pri prihlasovaní sa na server do skupín, ktorým budeme neskôr prideľovať zdroje nášho servera. Túto funkciu si musíme napísať sami, v danom čase môžeme využívať len jednu funkciu a táto funkcia musí byť skalárna. Užívateľov môžeme klasifikovať podľa nasledovných systémových funkcií:

        •        HOST_NAME()
        •        APP_NAME()
        •        SUSER_NAME()
        •        SUSER_SNAME()
        •        IS_SRVROLEMEMBER()
        •        IS_MEMBER()

Okrem týchto funkcií môžeme využívať aj funkcie LOGINPROPERTY a CONNECTIONPROPERTY.

Resource Pool
Resource Pool reprezentuje fyzické zdroje servera (ako sme spomínali CPU a pamäť). Defaultne server využíva 2 resource pooly – default a internal. Okrem týchto 2 default-ných poolov si môžeme vytvoriť aj vlastné resource pooly. V zásade má resource pool 2 časti pre každý zdroj servera:

        •        MIN a MAX pre CPU
        •        MIN a MAX pre pamäť

Workload Group
Všetky požiadavky (sessions) prichádzajúce na server sú klasifikované funkciou a zoskupené do skupín – tzv. Workload Groups. Na všetky sessions zo skupiny je potom aplikovaná príslušná politika riadenia zdrojov.
Najlepšie si koncept fungovania Resource Governor ozrejmíme podľa nasledovného obrázku:
1.        Užívateľ alebo aplikácia vytvorí session na SQL Server 2008
2.        Táto session je klasifikovaná klasifikačnou funkciou
3.        Klasifikovaná session je priradená do príslušnej skupiny (Workload Group)
4.        Príslušná skupina využíva pridelený Resource Pool, ktorý limituje využívanie pridelených zdrojov danými užívateľmi alebo aplikáciou
ResourceGovernor.EOvdB2sXR6Wm.BQBthbkfaTiP.jpg
Obr. Architektúra Resource Governor

Administrácia zdrojov SQL Servera v praxi
Prideľovanie zdrojov SQL Servera sa nám osvedčí v prípade, ak potrebujeme navzájom od seba oddeliť definované typy záťaže – napr. v prípade, že náš OLTP systém využívajú užívatelia počas dňa na zadávanie dát a súčasne vedúci pracovníci alebo analytici využívajú ten istý db server na analytický reporting, čím môžu nepriaznivo ovplyvňovať odozvy prvej skupiny užívateľov.
Ďalším príkladom môže byť nasadenie a využívanie jednej z noviniek SQL Server 2008, a to Backup Compression – pri využívaní tejto vlastnosti môžeme očakávať mierny nárast záťaže CPU (v porovnaní so zálohovaním bez kompresie), ale s pomocou Resource Governora je možné nastaviť limit využívania CPU pre zálohovanie s kompresiou a zabezpečiť tak ponechanie pôvodných zdrojov na prevádzku.
Resource Governor je možné využívať aj na monitorovanie behu jednotlivých dotazov/procedúr – ak niekorá query presiahne nastavený časový limit – dajme tomu 60 sekúnd – tak máme možnosť odchytiť alert vygenerovaný Resource Governorom, identifikovať danú query a online upraviť konfiguráciu Resource Governora tak, aby daná query mohla využívať len obmedzené zdroje servera.
Čo dodať na záver ? Snáď ešte zopár odporúčaní pre nasadzovanie do prevádzky – Resource Governor je úplne nová technológia a preto je vhodné dodržať istú ostražitosť pri jej implementácii. Ako prvý krok je vhodné použiť Resource Governor len na monitorovanie existujúcej záťaže a podľa týchto výsledkov potom pripraviť politiku rozdeľovania záťaže. A zároveň je vhodné pre administrátorov využívanie DAC – Dedicated Administrator Connection – nakoľko táto connection nespadá do správy Resource Governor-a a v prípade potreby je možné použiť ju na prípadné riešenie problémov s nesprávne nastavenými politikami.

SQL Server 2008 - Performance Monitoring

Zbieranie diagnostických informácií o prevádzke a výkonnosti SQL Server-a patrí medzi kľúčové činnosti databázových administrátorov. Nepretržité zbieranie a analýza nazbieraných diagnostických informácií je predpokladom k udržaniu optimálnej výkonnosti databázovej aplikácie na platforme Microsoft SQL Server a verzia SQL Server 2005 priniesla v porovnaní s predchádzajúcou verziou významné vylepšenia v oblasti sprístupnenia množstva informácii o stave takmer všetkých komponentov SQL Server-a. Väčšina týchto informácií je sprístupnená prostredníctvom tzv. Dynamic Management Views (DMV) a pokiaľ používate SQL Server 2005 SP2, tak je možné tieto informácie vizualizovať sadou reportov, nazvaných SQL Server Performance Dashboard.
Tak ako názov DMV naznačuje, tieto pohľady sprostredkovávajú množstvo dynamických informácií, ktoré sú dostupné počas prevádzky SQL Server-a. Hodnoty v týchto pohľadoch sú inicializované pri štarte servera, a teda sú určené hlavne pre online diagnostiku stavu servera. Tento menší nedostatok mnoho administrátorov vyriešilo vlastnými skriptami, ktoré sú spúšťané v pravidelných intervaloch a ukladajú diagnostické informácie do databáz, ktoré je potom možné analyzovať aj v dlhodobejšom časovom horizonte.
Pre tých administrátorov, ktorým takýto spôsob monitorovania nevyhovuje, prináša SQL Server 2008 riešenie nazvané ako Performance Datawarehouse alebo Performance Studio. Toto riešenie poskytuje centralizované ukladanie diagnostických informácií o stave servera, pričom nezaťažuje monitorovaný systém a zároveň umožňuje analýzu nazbieraných údajov pomocou reportov v SQL Server Management Studiu alebo prostredníctvom uložených procedúr a programátorského rozhrania API Performance Studia.
Kľúčovým komponentom je flexibilná infraštruktúra Performance Data Collection, ktorá pozostáva z tzv. data collectora každej monitorovanej inštancie SQL Servera 2008. Pomocou data collectora je možné zbierať všeobecné diagnostické informácie a výkonové ukazovatele monitorovaného servera. Data collector pozostáva z nasledovných komponentov:
Data Provider
Zdroj diagnostických alebo výkonových informácií – typicky SQL Trace, Performance Monitor, T-SQL query)
Collector Type
Wrapper zabezujúci mechanizmus zbierania diagnostických informácií z data providera.
Collection Item
Inštancia Collector Type. Jedným z atribútov je napr. frekvencia zbierania informácií.
Collection Set
Základná jednotka Performance Data Collection. Je to skupina Collection Items definovaných v rámci SQL Server inštancie.
Collection Mode
Spôsob, akým sú diagnostické informácie zbierané a ukladané. Collection Mode môže byť cached alebo non-cached.
Obr.c.1.95dAA7DDGkLd.jpg
Obr. č.1                Architektúra Data Collector

Po nakonfigurovaní Data Collector-a je potrebné definovať databázu (tzv. Management DataWarehouse DB), do ktorej budú diagnostické informácie zo servera ukladané. Táto databáza je štandardnou relačnou databázou, ktorá obsahuje samotné monitorované hodnoty a niektoré agregované dáta, slúžiace na analýzu historických dát a trendov. Databáza môže byť umiestnená na lokálnom alebo vzdialenom servri – odporúčané je umiestniť databázu na iný server ako produkčný, nakoľko nazbierané diagnostické informácie nebudú skreslené samotným monitorovaním. V závislosti od konfigurácie monitorovania môže množstvo nazbieraných dát dosiahnuť 250-350 MB a pridať zhruba 5%-nú záťaž na CPU.
Ako si môžeme teda nakonfigurovať monitorovanie SQL 2008 ? V zásade na to potrebujeme nasledovné kroky:
1.        Vytvorenie databázy Management Datawarehouse
V záložke Management klikneme pravým tlačítkom myši na položku Data Collection a zvolíme Configure Management Datawarehouse. Spustí sa sprievodca, pomocou ktorého vytvoríme alebo nakonfigurujeme databázu na lokálnom alebo vzdialenom SQL Servri (Obr. č.2).
Obr.c.2.X63lvN9k8EBm.jpg
2.        Konfiguráciu zbierania diagnostických informácií – System Data Collection
Pod záložkou Data Collection nám pribudol folder System Data Collection a pod ním 3 položky - Disk Usage, Query Statistics a Server Activity. Kliknutím pravým tlačítkom myši na niektorú z týchto položiek a zvolením Properties sa dostaneme ku konfigurácii samotného zbierania príslušných údajov – frekvencie, režimu zbierania, vstupných parametrov, dĺžku obdobia uchovávania diagnostických informácií v Management Datawarehouse databáze a pod. (Obr. č. 3, 4).
Obr.c.3.hEtcyJt5DKJ9.jpg
Obr.c.4.OytEOi414sVu.jpg
3.        Analyzovanie nazbieraných údajov
Pomocou preddefinovaných reportov si môžeme zobraziť požadované údaje, napr.
  • informácie o využívaní diskov po kliknutí pravým tlačítkom myši na Disk Usage a zvolením Reports -> Historical -> Disk Usage Summary (obr. č. 5)
Obr.c.5.GvrwH8T6Ulw8.jpg​

  • štatistiku dotazov kliknutím pravým tlačítkom myši na Query Statistics a zvolením Reports -> Historical -> Query Statistics History (obr. č. 6)
Obr.c.6.VFYiYnB45vnY.jpg
  • prehľad o aktivite servera kliknutím pravým tlačítkom myši na Server Activity a zvolením Reports -> Historical -> Server Activity History (obr. č. 7)
Obr.c.7.XARCPRCIoydh.jpg

Čo dodať na záver ? SQL Server 2008 Performance Studio umožní databázovým administrátorom jednoduchým a rýchlym spôsobom zbierať a analyzovať diagnostické a výkonové informácie a pomocou týchto dát zabezpečiť optimálnu prevádzku SQL Server aplikácií. Je to opäť výrazný krok vpred v snahe uľahčiť administrátorom život a odbremeniť ich od činností, ktorých plnenie im bráni sústrediť sa na činnosti, ktoré od nich vyžaduje zamestnávateľ.