Štatistické údržby funkcie (autostats) v SQL Server

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:195565
Tento článok bol archivovaný. Je publikovaný v aktuálnej podobe a už nebude aktualizovaný.
SUHRN
Novo zavedené štatistické údržby funkčnosť, AutoStat, môžegenerovať nechcené režijné náklady na výrobu systéme vykonaním jedného znasledujúce akcie:
  • Začatie štatistické aktualizácie obdobiach ťažkých výroby.

    -alebo-
  • Začatie nadmerne vysoký počet aktualizácia štatistiky procesy v danom bode v čase.
Účelom tohto článku je podrobne uvádzať podmienky, za ktorých môžeteočakávať, že autostats generované a aktualizácia štatistiky spustený protitabuliek v databáze.

Informácie o autostats v SQL Server 2000 nájdete "Použité štatistiky o optimalizáciu dotazu v Microsoft SQL Server 2000" na nasledovnej webovej lokalite MSDN:

Poznámka: Ak používate Microsoft SQL Server 2005, pozri nasledujúci Microsoft Biela kniha informácie o ako štatistiky využívané Optimalizácia dotazu v SQL Server 2005:
DALSIE INFORMACIE

Všeobecné informácie

SQL Server využíva optimalizácia založená na nákladoch, ktoré môžu byť mimoriadnecitlivé na štatistických informácií, ktoré poskytli na tabuľkách aindexy. Bez správne a aktuálne štatistických informácií, server SQL Servermožno napadnúť určiť najlepšie vykonávania plánu za určitúdotaz.

Štatistiky uchovávané na každú tabuľku v SQL Server na pomoc pre optimalizáciuv založená na nákladoch rozhodovania zahŕňajú:
  • Počet riadkov v tabuľke.
  • Počet strán používa tabuľka.
  • Počet úprav na kľúče v tabuľke od poslednej aktualizácie štatistiky.
Dodatočné informácie je uložená pre indexy, vrátane (pre každý index):
  • Equi-výška histogramu na prvý stĺpec.
  • Hustoty vo všetkých stĺpcov predpony.
  • Priemerná dĺžka kľúča.
Štatistiky o indexy sa vytvoria automaticky vždy, keď je nový indexpostavený. Okrem toho je teraz možné vytvoriť a udržiavať štatistiky oĎalšie stĺpce rovnako.

Zachovať štatistických informácií čo najaktuálnejšie spôsobom akomožné, SQL Server zavádza AutoStat, ktoré prostredníctvom servera SQL Servermonitorovanie tabuľky modifikácií, je schopný automaticky aktualizujeŠtatistika pre tabuľku po dosiahnutí určitého zmena prahu.Okrem toho SQL Server zavádza auto-vytvoriť-štatistiky, ktoráspôsobuje server automaticky generovať všetky štatistické údaje požadované prepresné optimalizácia špecifické dotazu.

Určenie, keď je bezprostredná AutoStat generácie

Ako sa uvádza vyššie, AutoStat bude automaticky aktualizovať štatistiky prenajmä tabuľku po dosiahnutí "zmena prah". Vsysindexes.rowmodctr stĺpec tvrdí spustený súčet všetkých modifikáciído tabuľky, časom môže nepriaznivo ovplyvniť dotaz procesorrozhodovací proces. Toto počítadlo je aktualizovaný zakaždým, keď niektorý znasledujúcich udalostí nastane:
  • Jeden riadok vložiť je vyrobená.
  • Jeden riadok odstrániť je vyrobená.
  • Aktualizáciu indexed column je vyrobená.
POZNÁMKA: TRUNCATE tabuľky neaktualizuje rowmodctr.

Po tabuľke štatistiky boli aktualizované, rowmodctr hodnotu nastaviť na 0a je aktualizovaná verzia schémy štatistiky v tabuľke.

Ďalšie, v situáciách, v ktorých uloženej procedúry vykonávania plánuprijaté z cache a tento plán je citlivý na štatistiky, štatistikyverzia schémy budú v porovnaní s aktuálnou verziou. Ak existujú novéŠtatistiky sú k dispozícii, bude rekompilovaný plán uloženej procedúry.

Základné algoritmus pre auto aktualizácia štatistiky je:
  • Ak tabuľka je v databáze tempdb, mohutnosť tabuľka je menej ako šesť, auto aktualizácia každých šesť modifikácií v tabuľke.
  • Ak mohutnosť tabuľka je väčší ako 6 ale menší alebo sa rovná 500, aktualizovať stav každých 500 modifikácie.
  • Ak základ pre tabuľky je väčšia ako 500, aktualizovať štatistiku keď (500 + 20 percent z tabuľky) nastali zmeny.
  • Pre ukazovatele tabuľky mohutnosť zmeny nesmie spustiť auto aktualizácia štatistiky.
POZNÁMKA: V tejto najužšom zmysle slova, SQL Server počíta mohutnosť ako počet riadkov v tabuľke.

POZNÁMKA: Popri mohutnosť, selektivity predikáte tiež ovplyvňuje AutoStats generácie. To znamená, že štatistiky nemusia byť aktualizované afer každých 500 modifikácie ak mohutnosť boli < 500="" or="" for="" every="" 20%="" of="" changes="" if="" cardinality="" were=""> 500. Stupnici až faktor (hodnota pohybuje od 1 až 4, 1 a 4 včítane) vygenerovaný v závislosti od selektivity a výrobok tento faktor a počet zmien, ktoré sa získali z algoritmus by skutočný počet prispôsobenia potrebné pre AutoStats generácie.

Vo forme tabuľky, možno zhrnúť vyššie algoritmus:
_________________________________________________________________________________ Table Type | Empty Condition | Threshold When Empty |Threshold When Not Empty _________________________________________________________________________________ Permanent  | < 500 rows      | # of Changes >= 500  | # of Changes >= 500 + (20% of Cardinality)___________________________________________________________________________ Temporary  | < 6 rows        | # of Changes >= 6    | # of Changes >= 500 + (20% of Cardinality)___________________________________________________________________________TableVariables   | Change in cardinality does not affect AutoStats generation.___________________________________________________________________________
Dva príklady pomoci preukázať tohto konceptu sú:

Príklad 1

Zvážiť autori tabuľky v databáze krčmy, ktorý obsahuje 23 riadkov amá dva indexy. Indexovať jedinečné klastrovaný index, UPKCL_auidind,jeden stĺpec, au_id a kompozitné nonclustered index, aunmind, bolvytvoril stĺpce au_lname a au_fname. Pretože táto tabuľka obsahujemenej ako 500 riadkov, AutoStat sa začne po 500 zmeny do tabuľkyúdaje sa vyskytli. Zmeny môže byť jedným z 500 alebo viac vložky, odstráni,zmeny indexed column ako au_lname alebo ich kombinácia.

Preto môže predpovedať, keď aktualizácia štatistiky bude iniciovanémonitorovanie sysindexes.rowmodctr hodnotu, ktorá zvýši poKaždá aktualizácia. Keď dosiahne alebo presiahne 500, môžete očakávať, že aktualizáciaŠtatistika sa spustiť.

Príklad 2

Zvážiť v druhej tabuľke, t2, ktorý má mohutnosť 1000. Pre tabuľkys vyššou ako 500 riadkov, server SQL Server bude aktualizovať štatistiku keď (500+ 20 percent), boli vykonané zmeny. Robím matiku, 20 percent z 1000je 200, takže môžete očakávať, že vidieť AutoStat začať po približne 700do tabuľky boli vykonané zmeny.

Automatizácia Autostats určenie

Na automatizáciu stanovenie keď sa spustí AutoStat, môžete Anketasysindexes tabuľka a identifikovať po dosiahnutí tabuľky modifikácievýchodiskový bod. Toto je základný algoritmus na to:
   if (sysindexes.rows > 500)      if (sysindexes.rows * 0.20 >= sysindexes.rowmodctr && production      hours) //500 change leeway         begin            disable autostats            log autostats disable         end      else         begin            stats ok         end   else      if (sysindexes.rowmodctr >= 425) //75 change leeway         begin            disable autostats            log autostats disable         end				

Neskôr mohli naplánovať prácu robiť takto:
  • Spustiť aktualizácia štatistiky proti všetky tabuľky, pre ktoré boli nútení vypnite ich počas dňa.

    a
  • Re-AutoStat, pretože každá tabuľka modifikácia počítadlo sa bude resetovat 0 pri AKTUALIZÁCII štatistiky bol spustený.

Kontrolu, či aktualizácia štatistiky sú spustiť proti tabuľky

Najzrejmejšími riešením na túto otázku, pri AutoStat sa ukázala byťProblematic, je vypnutie auto štatistika generácie, čím opustenieadministrátori databázy voľný naplánovať AKTUALIZÁCIU štatistiky počas menejrušivé krát. Môžete to urobiť buď pomocou aktualizácie štatistikyvyhlásenie alebo sp_autostats uložená procedúra. Syntax pre AKTUALIZÁCIUŠtatistika vyhlásenie je:
   UPDATE STATISTICS <table>...with NORECOMPUTE				

Syntax pre sp_autostats uložené postupom je:
sp_autostats <table_name>, <stats_flag>, <index_name></index_name> </stats_flag> </table_name>
kde <stats_flag>je, buď „"alebo"vypnúť".</stats_flag>

Môžete použiť aj sp_dboption vypnúť automatické výskyt aktualizáciaŠTATISTIKY alebo vytvoriť štatistiky na úrovni databázy:
sp_dboption <dbname>, "auto aktualizácia štatistiky", <on |="" off=""><b00></b00> </on> </dbname>

-alebo-

sp_dboption <dbname>, "auto vytvorte štatistiky", <on |="" off=""></on> </dbname>

Ovládanie počet Súbežná aktualizácia štatistiky procesov

V súčasnej dobe nedosahuje vypnutie AutoStat pre špecifické tabuľky, nie jemožné nastaviť počet automatické aktualizácie štatistiky výkazyktoré sú prevádzkované súbežne (DCR 51539 bola podaná pre toto). Vservera však obmedziť počet Súbežná aktualizácia štatistikyprocesy štyri na procesor.

Určenie, keď sú prevádzkované Autostats

Stopové vlajkou 205 môžete použiť na správu skladovaná štatistiky závislépostup je pričom prekompilovali z AutoStat. Táto vlajka stopovýchzapíše nasledujúce hlásenia do denníka chýb:
1998-10-15 11:10:51.98 spid9 vydané Recompile: názovprocedúry: sp_helpindex
LineNo: 75 StmtNo: 29
Ak je zapnuté stopových vlajkou 205, nasledujúce hlásenie bude tiež približujúAutoStat správy 8721 ak aktualizujú štatistiky. Otvoreniespráva skupiny môžu byť rozlíšené RowModCnt hodnotu, ktorábude väčšia ako 0. Zatvárajúca zátvorka po AKTUALIZÁCII štatistiky,bude mať RowModCnt hodnotu 0:
1998-10-15 11:38:43.68 spid8 schéme zmeniť: Tbl Dbid: 7 Objid:
133575514 RowModCnt: 60500 RowModLimit: 60499
Pre túto správu, "RowModCnt" je celkový počet modifikácieTabuľka. "RowModLimit" je prah, ak prekročia, vedie kAktualizácia štatistiky vyhlásenie vykonanie pre tabuľku.

Je tiež možné umožniť stopových príznak 8721, ktorý bude vyčítat, informáciedo denníka chýb pri AutoStat bol spustený. Toto jePríklad typu správy, ktoré môžete očakávať, že vidieť:
1998-10-14 16:22:13.21 spid13 AUTOSTATS: aktualizované Tbl: [autori]
Riadky: 23 Mody: 501 viazané: 500 trvanie: 47ms UpdCount: 2
Pre túto správu "Mods" je celkový počet zmien v tabuľke."Viazaný" je modifikácia prah, "Dĺžka" je množstvo časuže aktualizácia štatistiky výkaz povinní vyplniť a "UpdCount"je počítať aktualizované štatistiky.

Môžete použiť aj SQL Server Profiler identifikovať pri AKTUALIZÁCII štatistikyvýkazy sú prevádzkované. Chcete urobiť, postupujte podľa nasledujúcich krokov:
  1. Na Profiler ponuky, kliknite na tlačidlo Nástroje, a potom kliknite na tlačidlo Možnosti.
  2. Na Všeobecné kartu, prejdite na Udalosti, a potom vyberte Všetky triedy udalostí.
  3. Definovať nová trace, a podľa Udalosti, vyberte Misc, vyberte Auto aktualizácia štatistiky sub-Event.
Poznámka: Ak mnohé štatistiky sa aktualizujú podľa AutoStat, veľký početsprávy možno zapísať do denníka chýb. Dôkladne experimentovať s týmitostopové vlajky pred ich použitím, na akúkoľvek výrobu alebo inak kritickéServer.

Schéma zámky

SQL Server zamestnáva dva typy schémy zámky, ktoré sa prijalikeď sa aktualizuje štatistiky pre tabuľku:
   Sch-S: Schema Stability Lock   ----------------------------   This lock ensures that a schema element, such as a table or index, will   not be dropped while any session holds a schema stability lock on the   schema element.   Sch-M-UPD-STATS: Schema Modification Lock   -----------------------------------------   This is a non-blocking lock that is used by the system to ensure that   only one automatic UPDATE STATISTICS process is run against a table at   any given point in time. The sp_lock stored procedure will report this   lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M.				
Môžete zobraziť tieto zámky spustením sp_lock alebo výberom zsyslockinfo tabuľka.
prodsql indexy-klastrované stat výkop errorlog SQL Server Profiler

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 195565 – Posledná kontrola: 12/05/2015 09:38:59 – Revízia: 2.0

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition

  • kbnosurvey kbarchive kbinfo kbmt KB195565 KbMtsk
Pripomienky