sql >> Databasteknik >  >> RDS >> Sqlserver

Uppdatera SQL Server-statistik med hjälp av en databasunderhållsplan

Databassäkerhetskopior, integritetskontroller och prestandaoptimeringar är vanliga vanliga uppgifter för DBA:er. Klientdata är mycket viktigt för en DBA för att hantera databassäkerhetskopieringen och se till att säkerhetskopiorna är integritet. Så om något går fel med en produktionsdatabas kan den återställas med minsta möjliga stilleståndstid. Databasintegritetskontrollerna är också viktiga eftersom, i fallet med databaskorruption, kan den korrigeras med minsta möjliga driftstopp och dataförlust. Att hantera databasprestanda är också viktigt. Att hantera databasprestanda är en kombination av flera uppgifter.

  1. Identifiera listan med resurskrävande frågor och hjälp utvecklare att skriva om dem.
  2. Skapa och hantera index på tabellen. Utför också indexdefragmentering för att se till att de förblir i gott skick.
  3. Slutligen, hantera statistik över tabeller.

I min tidigare artikel behandlade jag ämnet Skapa automatisk statistik och statistik för automatisk uppdatering och hur de kan hjälpa till att förbättra prestandan. I den här artikeln kommer jag att förklara hur man skapar och schemalägger underhållsplanen för att uppdatera statistiken.

Låt mig först förklara vad SQL Server-statistik är och hur det kan hjälpa till att öka SQL-serverns prestanda.

SQL-serverstatistik och deras betydelse

Statistik är metadata som används av SQL Server query optimizer, som hjälper till att bestämma det bästa sättet att hämta data. Optimeraren använder statistik för att förstå data, dess fördelning och antalet rader som en viss fråga sannolikt kommer att returnera från tillgänglig statistik. Baserat på denna information bestämmer den den optimala dataåtkomstvägen. Den avgör också om man ska göra en tabellsökning eller en indexsökning, använda kapslad loop-join eller en hash-join, etc.

Om statistiken är inaktuell, eller om den inte är tillgänglig, kan optimeraren välja den dåliga exekveringsplanen, vilket minskar frågeprestandan avsevärt. SQL Server kan automatiskt underhålla statistik och uppdatera den baserat på dess spårning av dataändringar.

Statistik kan skapas och uppdateras automatiskt genom att aktivera "Skapa automatisk statistik" och "Automatisk uppdatering av statistik." För vissa tabeller, t.ex. de som är föremål för betydande förändringar i datadistributionen, är det dock möjligt att den automatiska uppdateringen av SQL Server-statistik inte kommer att vara tillräcklig för att upprätthålla konsekvent höga nivåer av frågeprestanda.

Innan jag förklarade de olika tillvägagångssätten för att uppdatera statistiken, låt mig förklara de olika sätten att granska statistiken som skapas på vilken tabell som helst.

Hur man granskar statistiken

Vi kan se kolumnstatistik och indexstatistik

  1. Använder SQL Server Management Studio.
  2. Använda systemlagrade procedurer och systemkataloger och dynamiska hanteringsvyer

Visa statistik med SQL Server Management Studio

Till exempel vill jag se statistiken som skapats på [HumanResources].[Anställd] tabell skapad i AdventureWorks2017 databas. För att göra det, starta SQL Server Management Studio. Expandera sedan AdventureWorks2017 databas expanderar du [HumanResources].[Employee] tabell. Se följande bild:

Använda systemlagrade procedurer och dynamiska hanteringsvyer

Om du använder en äldre version av SQL Server kan du använda sp_helpstats systemprocedur för att granska tabellernas statistik. sp_helpstats kommer att visa statistik, skapad av SQL Server eller av en användare. Den visar inte statistiken som skapats av Index. För att visa det har jag skapat en statistik som heter User_Statistics_BirthDate[HumanResources].[Anställd] bord.

Följande är exemplet:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Följande är resultatet.

Du kan granska statistik genom att fråga sys.stats systemkatalog. Den ger information om statistik som skapats av SQL Server, skapad av index och skapad av en användare.

Kör följande fråga:

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')

Följande är resultatet:

Låt oss nu gå med i den här tabellen med andra systemkataloger för att få detaljerad information om statistiken. För att göra det, kör följande fråga:

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

Frågan ovan fyller i följande detaljer

  1. Tabell som statistik skapas på.
  2. Index-ID.
  3. Statistikens namn.
  4. Kolumner som ingår i statistiken.

Följande är resultatet:

I nästa avsnitt kommer jag att förklara olika sätt att uppdatera statistiken.

Olika metoder för uppdatering av statistik

Vi kan uppdatera statistiken på följande sätt:

  1. Skapa en underhållsplan för SQL Server.
  2. Skapa med det anpassade skriptet.
  3. Utför kommandot uppdatera statistik manuellt på en enskild tabell.

Först kommer jag att förklara hur vi kan skapa en underhållsplan för att uppdatera statistiken.

Skapa SQL Server Maintenance Plan för att uppdatera statistiken

Nu, i den här demon, kommer vi att skapa en underhållsplan för uppdateringsstatistik för att uppdatera statistiken. Underhållsplanen kommer att utföra följande uppgifter:

Skapa först en underhållsplan. För att göra det, öppna SQL Server Management Studio. Expandera SQL-serverinstans>>Management folder>> Under Management, högerklicka på MaintenancePplans och välj New Maintenance Plan. Se följande bild:

Den nya underhållsplanen dialogrutan öppnas. Ange ett namn på underhållsplanen i rutan och klicka på OK. Se följande bild:

Design av underhållsplan öppnas. Dra och släpp "Uppdatera statistikuppgift" i designerfönstret i designverktyget för underhållsplan. Se följande bild:

Dubbelklicka nu på Uppdatera statistikuppgift . Uppgiften Uppdatera statistik dialogrutan öppnas. I dialogrutan finns alternativ som kan användas för att anpassa underhållsplanen. Se följande bild:

Vi kan anpassa följande alternativ för att använda Uppdatera statistik Underhållsplan.

  1. Uppdatera statistik för alla objekt i en specifik databas. Se följande bild:
  2. Specifika objekt i valda databaser. Du kan uppdatera statistik för alla tabeller och vyer / specifika tabeller och vyer. Se följande bild:

    Om vi ​​väljer Tabeller eller Vyer kommer SQL att fylla namnet på vyer eller tabeller i urvalet dialog ruta. Se följande bild:
  3. Det tredje alternativet är Uppdatera . Vi kan uppdatera all statistik över tabeller/vyer, eller så kan vi välja att endast uppdatera kolumnstatistik (statistik skapad på oindexerade kolumner), eller så kan vi välja endast Indexstatistik (statistik skapad av index). Se följande bild:
  4. Vi kan också välja skanningstyp för all statistik. Vi kan välja Fullständig genomsökning eller Sampla efter en angiven procentandel eller specificerade rader. Se följande bild:

Nu, som jag nämnde, kommer vi att skapa en underhållsuppgift som kommer att uppdatera statistik för alla tabeller inom AdventureWorks2017 databas med en fullständig skanning. Så välj alternativ i enlighet med detta. När underhållsuppgiften är konfigurerad ser den ut så här:

När underhållsuppgiften är korrekt konfigurerad stänger du dialogrutan för uppdateringsstatistik. Efter konfigurering ser underhållsplanen ut så här:

När underhållsplanen har skapats, låt oss schemalägga underhållsplanen. För att göra det klickar du på kalenderikonen mittemot Beskrivning kolumn. Se följande bild:

När du klickar på kalenderknappen öppnas en dialogruta för att konfigurera jobbschemat. Se följande bild:

Som jag nämnde kommer vår underhållsplan för uppdateringsstatistik att köras varje söndag klockan 04:00. Så vi kommer att konfigurera jobbschemat därefter. Arbetsschemaläggning är enkel. När du har konfigurerat schemat ser dialogrutan ut så här:

När ett exekveringsschema har konfigurerats ser hela underhållsplanen ut som på följande bild. Spara underhållsplanen och stäng fönstret.

Låt oss nu köra den här underhållsplanen genom att utföra SQL-jobbet som skapats av underhållsplanen. För att öppna SQL Jobs, expandera SQL Server Agent och utöka Jobb . Du kan se SQL-jobbet skapat av SQL-underhållsplanen. För att utföra jobbet högerklickar du på Uppdatera statistik veckovis.Veckovis.Subplan_1 och klicka på Starta jobb vid steg . Se följande bild.

När jobbet är slutfört kan du se följande dialogruta Jobbkörning lyckad.

Sammanfattning

I den här artikeln har jag täckt:

  1. En detaljerad förklaring av SQL Server-statistik och dess betydelse.
  2. Olika alternativ för att uppdatera statistiken.
  3. Ett fungerande exempel på att skapa en SQL-underhållsplan för att uppdatera statistiken.

I min nästa artikel kommer jag att förklara olika T-SQL-kommandon för att uppdatera statistiken. Dessutom kommer jag att förklara ett T-SQL-skript som kommer att uppdatera statistiken baserat på mängden dataändringar som inträffade efter att infogning/uppdatering/radering inträffade i tabellen.


  1. Postgres 9.4 jsonb-array som tabell

  2. 10 tips och knep för att hantera en effektiv databas

  3. Hur man konfigurerar Glassfish Server i Eclipse manuellt

  4. Hur snabbt är ODBC? En "laddad" jämförelse.