sql >> Databáze >  >> RDS >> Sqlserver

Aktualizujte statistiky SQL Server pomocí plánu údržby databáze

Zálohování databází, kontroly integrity a optimalizace výkonu jsou základními pravidelnými úkoly správců databází. Klientská data jsou pro správce databází velmi důležitá pro správu zálohy databáze a zajištění integrity záloh. Pokud se tedy s produkční databází něco pokazí, lze ji obnovit s minimálním prostojem. Kontrola integrity databáze je také důležitá, protože v případě poškození databáze může být opraveno s minimálním prostojem a ztrátou dat. Důležitá je také správa výkonu databáze. Správa výkonu databáze je kombinací více úkolů.

  1. Určete seznam dotazů náročných na zdroje a pomozte vývojářům je přepsat.
  2. Vytvářejte a spravujte indexy v tabulce. Proveďte také defragmentaci indexu, abyste se ujistili, že zůstanou v dobrém stavu.
  3. Nakonec správa statistik tabulek.

Ve svém předchozím článku jsem se zabýval tématem Automatické vytváření statistik a Statistik automatických aktualizací a jak mohou pomoci zlepšit výkon. V tomto článku vysvětlím, jak vytvořit a naplánovat plán údržby pro aktualizaci statistik.

Nejprve mi dovolte vysvětlit, co jsou statistiky SQL Server a jak mohou pomoci zvýšit výkon SQL serveru.

Statistiky serveru SQL a jejich význam

Statistiky jsou metadata používaná optimalizátorem dotazů SQL Server, který pomáhá určit nejlepší způsob, jak data načíst. Optimalizátor používá statistiky k pochopení dat, jejich distribuce a počtu řádků, které daný dotaz pravděpodobně vrátí z dostupných statistik. Na základě těchto informací rozhodne o optimální cestě přístupu k datům. Také určuje, zda se má provést skenování tabulky nebo hledání indexu, použít spojení vnořené smyčky nebo spojení hash atd.

Pokud jsou statistiky zastaralé nebo nejsou k dispozici, může optimalizátor zvolit špatný plán provádění, což výrazně snižuje výkon dotazu. SQL Server může automaticky udržovat statistiky a obnovovat je na základě sledování změn dat.

Statistiky lze vytvářet a aktualizovat automaticky povolením „Automaticky vytvářet statistiky“ a „Automaticky aktualizovat statistiky“. U některých tabulek, jako jsou ty, které podléhají významným změnám v distribuci dat, je však možné, že automatická aktualizace statistik SQL Serveru nebude k udržení trvale vysoké úrovně výkonu dotazů stačit.

Než vysvětlím různé přístupy k aktualizaci statistik, dovolte mi vysvětlit různé způsoby kontroly statistik vytvořených na libovolné tabulce.

Jak zkontrolovat statistiky

Můžeme zobrazit statistiky sloupců a statistiky indexů

  1. Použití SQL Server Management Studio.
  2. Používání systémových uložených procedur a systémových katalogů a dynamických pohledů správy

Zobrazení statistik pomocí SQL Server Management Studio

Chci například vidět statistiky vytvořené v[Lidské zdroje].[Zaměstnanec] tabulka vytvořená v AdventureWorks2017 databáze. Chcete-li to provést, spusťte SQL Server Management Studio. Poté rozbalte AdventureWorks2017 databázi, rozbalte [Lidské zdroje].[Zaměstnanec] stůl. Viz následující obrázek:

Používání systémových uložených procedur a dynamických pohledů správy

Pokud používáte starší verzi SQL Server, můžete použít sp_helpstats systémový postup pro kontrolu statistik tabulek. sp_helpstats zobrazí statistiky vytvořené SQL Serverem nebo uživatelem. Nezobrazí statistiky vytvořené Indexem. Abych to dokázal, vytvořil jsem statistiku s názvem User_Statistics_BirthDate na [Lidské zdroje].[Zaměstnanec] tabulka.

Následuje příklad:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Následuje výstup.

Statistiky můžete zkontrolovat dotazem na sys.stats systémový katalog. Poskytuje informace o statistikách vytvořených SQL Serverem, Created by Indexes a vytvořených uživatelem.

Proveďte následující dotaz:

SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

Následuje výstup:

Nyní propojme tuto tabulku s dalšími systémovými katalogy, abychom získali podrobné informace o statistikách. Chcete-li to provést, proveďte následující dotaz:

SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

Výše uvedený dotaz vyplní následující podrobnosti

  1. Tabulka, ve které se vytvářejí statistiky.
  2. ID indexu.
  3. Název statistiky.
  4. Sloupce zahrnuté ve statistikách.

Následuje výstup:

V další části vysvětlím různé způsoby aktualizace statistik.

Různé přístupy k aktualizaci statistik

Statistiky můžeme aktualizovat následujícími způsoby:

  1. Vytvořte plán údržby serveru SQL.
  2. Vytvořit pomocí vlastního skriptu.
  3. Ručně spusťte příkaz aktualizace statistiky pro jednotlivé tabulky.

Nejprve vysvětlím, jak můžeme vytvořit plán údržby pro aktualizaci statistik.

Vytvořte plán údržby serveru SQL pro aktualizaci statistik

Nyní v této ukázce vytvoříme plán údržby statistik aktualizace pro aktualizaci statistik. Plán údržby bude provádět následující úkoly:

Nejprve vytvořte plán údržby. Chcete-li to provést, otevřete SQL Server Management Studio. Rozbalte instanci serveru SQL>>složka Správa>> V části Správa klepněte pravým tlačítkem myši na MaintenancePplans a vyberte Nový plán údržby. Viz následující obrázek:

Nový plán údržby otevře se dialogové okno. V poli zadejte název plánu údržby a klepněte na OK. Viz následující obrázek:

Otevře se návrhář plánu údržby. V panelu nástrojů návrháře plánu údržby přetáhněte „Úloha aktualizace statistiky“ v okně návrháře. Viz následující obrázek:

Nyní dvakrát klikněte na Aktualizovat statistiku . Úloha aktualizace statistik otevře se dialogové okno. V dialogovém okně jsou možnosti, které lze použít k přizpůsobení plánu údržby. Viz následující obrázek:

Můžeme přizpůsobit následující možnosti používání Aktualizace statistik Plán údržby.

  1. Aktualizujte statistiky všech objektů konkrétní databáze. Viz následující obrázek:
  2. Konkrétní objekty vybraných databází. Můžete aktualizovat statistiky všech tabulek a pohledů / konkrétních tabulek a pohledů. Viz následující obrázek:

    Pokud zvolíme Tabulky nebo Pohledy, SQL vyplní název pohledů nebo tabulek ve výběru dialogové okno. Viz následující obrázek:
  3. Třetí možností je Aktualizovat . Můžeme aktualizovat všechny statistiky tabulek/pohledů, nebo si můžeme vybrat aktualizaci pouze statistik sloupců (statistiky vytvořené na neindexovaných sloupcích), nebo můžeme zvolit Pouze statistiky indexu (statistiky vytvořené pomocí indexů). Viz následující obrázek:
  4. Můžeme také vybrat typ kontroly jakékoli statistiky. Můžeme zvolit Úplné skenování nebo Sample by zadané procento nebo zadané řádky. Viz následující obrázek:

Nyní, jak jsem již zmínil, vytvoříme úlohu údržby, která aktualizuje statistiky všech tabulek v rámci AdventureWorks2017 databáze s úplným skenováním. Podle toho tedy vybírejte možnosti. Jakmile je úloha údržby nakonfigurována, vypadá takto:

Jakmile je úloha údržby správně nakonfigurována, zavřete dialog statistik aktualizace. Po konfiguraci vypadá plán údržby takto:

Jakmile je plán údržby vytvořen, dovolte nám naplánovat plán údržby. Chcete-li to provést, klikněte na ikonu kalendáře naproti Popisu sloupec. Viz následující obrázek:

Po kliknutí na tlačítko kalendáře se otevře dialogové okno pro konfiguraci plánu úloh. Viz následující obrázek:

Jak jsem již zmínil, náš plán údržby aktualizací statistik se bude provádět každou neděli ve 4:00. Podle toho tedy nastavíme pracovní plán. Plánování práce je jednoduché. Jakmile nakonfigurujete plán, dialogové okno vypadá takto:

Jakmile je nakonfigurován plán provádění, celý plán údržby vypadá jako na následujícím obrázku. Uložte plán údržby a zavřete okno.

Nyní spusťte tento plán údržby provedením úlohy SQL vytvořené plánem údržby. Chcete-li otevřít úlohy SQL, rozbalte SQL Server Agent a rozbalte Úlohy . Můžete vidět úlohu SQL vytvořenou plánem údržby SQL. Nyní pro provedení úlohy klikněte pravým tlačítkem na Aktualizovat statistiky Weekly.Weekly.Subplan_1 a klikněte na Spustit úlohu v kroku . Viz následující obrázek.

Po dokončení úlohy se zobrazí následující dialogové okno Úspěšné provedení úlohy.

Shrnutí

V tomto článku jsem se zabýval:

  1. Podrobné vysvětlení statistiky SQL Server Statistics a její důležitosti.
  2. Různé možnosti aktualizace statistik.
  3. Funkční příklad vytvoření plánu údržby SQL pro aktualizaci statistik.

V mém příštím článku vysvětlím různé příkazy T-SQL pro aktualizaci statistik. Kromě toho vysvětlím skript T-SQL, který aktualizuje statistiky na základě objemu změn dat, ke kterým došlo poté, co v tabulce došlo k vložení/aktualizaci/vymazání.


  1. pg_dump postgres databáze ze vzdáleného serveru, když je blokován port 5432

  2. Nalezení výkonnostních výhod s dělením

  3. Vnitřní části sedmi druhů SQL Server – Část 1

  4. SQL dotaz pro získání nejnovějšího řádku pro každou instanci daného klíče