none
Reseni pro dotazy vytezujici SQL server

    Dotaz

  • Zdravim,

       v nasi spolecnosti pouzivame sdileny datovy sklad na MSSQL 2005, ktery slouzi reportingovemu oddeleni pro sber informaci prostrednictvim SQL dotazu. Jelikoz se v teto databazi nachazi pomerne velke mnozstvi velkych tabulek (30 mil. radku a vice), dochazi pomerne casto k soubehu a vzajemnemu blokovani dotazu. Tato situace zbusobi to, ze server je vytizen na 100% a databaze je nepristupna, vcetne dalsich informaci, kdo je kni pripojen a pod.

       Tento problem chci resit pomoci nejakeho hlidaciho skriptu ktery rozpozna, ze je server vytizen nebo dochazi deadlocku, ukonci transakce, ktere toto zpusobuji a zaznamena informaci o teto transakci (napr. jmeno uzivatele, ktery dotaz spustil, cas a pod.) do tabulky nebo nejakeho jineho logu. Mate nekdo s timto zkusenosti? Muzete mi poradit?

    Dekuji.

    S pozdravem,

    Martin Roman 
    pátek 5. března 2010 15:01

Odpovědi

  • Jedna z možností je pustit Profiler a nechat ho zaznamenávat jen Deadlocky. Dostanete pak i deadlock-graf závislostí, problémové dotazy, vše.
    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    pondělí 8. března 2010 22:39
    Moderátor

Všechny reakce

  • pokud vydychas dirty reads pridej do predavacich dotazu with (nolock)

    MP

    pátek 5. března 2010 15:44
  • Dekuji za odpoved, nolock je opravdu jedna z moznosti, nicmene ja chci spise kriticke dotazy identifikovat (jde mi hlavne o zdroj) a nasledne pak problem resit.
    pátek 5. března 2010 17:51
  • Jedna z možností je pustit Profiler a nechat ho zaznamenávat jen Deadlocky. Dostanete pak i deadlock-graf závislostí, problémové dotazy, vše.
    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    pondělí 8. března 2010 22:39
    Moderátor
  • Dobrý den,

    z mého pohledu není databáze, o níž hovoříte, datovým skladem v tom pravém slova smyslu. Tradiční datový sklad slouží pro reporting a ____ýzu a probíhají v něm pouze dotazy typu select (pochopitelně s vyjímkou plnění nových dat, které se ale běžně provádí mimo pracovní dobu). V takovém případě nemůže k blokování dotazů dojít ani při defaultní úrovni izolace transakcí. Pokud je Váš server vytížen na 100% (předpokládám vytížení procesorů), neviděl bych příčinu Vašich problémů ve vzájemném blokování procesů.
    Případné hlídací skripty server v kritickou chvíli ještě více zatíží a obávám se, že nevyřeší Váš problém. Pro zjištění skutečné příčiny bych doporučoval performance monitoring serveru (pro základní měření je vhodný Performance monitor z OS, kde mimo jiné můžete zjistit počet použitých zámků včetně deadlocků; další postup se pak odvíjí od zjištěných hodnot).
    Jestliže server nereaguje, doporučuji použít DAC připojení, které bude dostupné, pokud služba SQL Serveru poběží, a umožní Vám zjitit, co se se serverem děje. Pokud potřebujete odladit pouze deadlocky, je Profiler dobrou volbou.
    Zamyslel bych se ale také nad designem celého řešení a využitím Vaší databáze - implementace tradičního DW by mohla být tou správnou cestou...

    S pozdravem

    Miloslav Peterka
    úterý 9. března 2010 21:13