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ů.
- Určete seznam dotazů náročných na zdroje a pomozte vývojářům je přepsat.
- Vytvářejte a spravujte indexy v tabulce. Proveďte také defragmentaci indexu, abyste se ujistili, že zůstanou v dobrém stavu.
- 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ů
- Použití SQL Server Management Studio.
- 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
- Tabulka, ve které se vytvářejí statistiky.
- ID indexu.
- Název statistiky.
- 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:
- Vytvořte plán údržby serveru SQL.
- Vytvořit pomocí vlastního skriptu.
- 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.
- Aktualizujte statistiky všech objektů konkrétní databáze. Viz následující obrázek:
- 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:
- 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:
- 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:
- Podrobné vysvětlení statistiky SQL Server Statistics a její důležitosti.
- Různé možnosti aktualizace statistik.
- 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í.