sql >> Database teknologi >  >> RDS >> Sqlserver

Opdater SQL Server-statistikker ved hjælp af en databasevedligeholdelsesplan

Databasesikkerhedskopiering, integritetstjek og ydeevneoptimeringer er kerneopgaver for DBA'er. Klientdataene er meget vigtige for en DBA for at administrere databasesikkerhedskopieringen og sikre integriteten af ​​sikkerhedskopierne. Så hvis noget går galt med en produktionsdatabase, kan den genoprettes med minimal nedetid. Databasens integritetstjek er også vigtigt, fordi det i tilfælde af korruption af databasen kan rettes med minimal nedetid og datatab. Håndtering af databaseydeevne er også vigtig. Håndtering af databaseydeevne er en kombination af flere opgaver.

  1. Identificer listen over ressourcekrævende forespørgsler, og hjælp udviklere med at omskrive dem.
  2. Opret og administrer indekser på bordet. Udfør også indeksdefragmentering for at sikre, at de forbliver i god stand.
  3. Til sidst, administration af statistik over tabeller.

I min tidligere artikel dækkede jeg emnet Automatisk oprettelse af statistikker og automatisk opdateringsstatistikker, og hvordan de kan hjælpe med at forbedre ydeevnen. I denne artikel vil jeg forklare, hvordan man opretter og planlægger vedligeholdelsesplanen for at opdatere statistikkerne.

Lad mig først forklare, hvad SQL Server-statistikker er, og hvordan det kan hjælpe med at øge SQL-serverens ydeevne.

SQL-serverstatistik og deres betydning

Statistik er metadata, der bruges af SQL Server query optimizer, som hjælper med at bestemme den bedste måde at hente dataene på. Optimizeren bruger statistik til at forstå dataene, deres fordeling og antallet af rækker, en given forespørgsel sandsynligvis vil returnere fra den tilgængelige statistik. Baseret på disse oplysninger beslutter den den optimale dataadgangssti. Det bestemmer også, om der skal udføres en tabelscanning eller en indekssøgning, bruge indlejret loop join eller en hash join osv.

Hvis statistikker er forældede, eller hvis de ikke er tilgængelige, kan optimeringsværktøjet vælge den dårlige eksekveringsplan, som reducerer forespørgselsydeevnen betydeligt. SQL Server kan automatisk vedligeholde statistik og opdatere dem baseret på dens sporing af dataændringer.

Statistik kan oprettes og opdateres automatisk ved at aktivere "Automatisk oprettelse af statistik" og "Automatisk opdatering af statistik." For nogle tabeller, såsom dem, der er underlagt væsentlige ændringer i datadistributionen, er det dog muligt, at SQL Servers automatiske statistikopdatering vil være utilstrækkelig til at opretholde konsekvent høje niveauer af forespørgselsydeevne.

Før jeg forklarede de forskellige tilgange til at opdatere statistikkerne, så lad mig forklare de forskellige måder at gennemgå de statistikker, der er oprettet på en hvilken som helst tabel.

Sådan gennemgår du statistikken

Vi kan se kolonnestatistikker og indeksstatistikker

  1. Brug af SQL Server Management Studio.
  2. Brug af systemlagrede procedurer og systemkataloger og dynamiske administrationsvisninger

Se statistik ved hjælp af SQL Server Management Studio

For eksempel vil jeg se statistikken oprettet på [HumanResources].[Medarbejder] tabel oprettet i AdventureWorks2017 database. For at gøre det skal du starte SQL Server Management Studio. Udvid derefter AdventureWorks2017 database, skal du udvide [HumanResources].[Employee] bord. Se følgende billede:

Brug af systemlagrede procedurer og dynamiske administrationsvisninger

Hvis du bruger en ældre version af SQL Server, kan du bruge sp_helpstats systemprocedure til gennemgang af tabellernes statistik. sp_helpstats vil vise statistikken, oprettet af SQL Server eller af en bruger. Det vil ikke vise statistik oprettet af Index. For at demonstrere det har jeg lavet en statistik med navnet User_Statistics_BirthDate[HumanResources].[Medarbejder] tabel.

Følgende er eksemplet:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Følgende er output.

Du kan gennemgå statistik ved at forespørge på sys.stats systemkatalog. Den giver information om statistikker, der er oprettet af SQL Server, oprettet af indekser og oprettet af en bruger.

Udfør følgende forespørgsel:

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ølgende er output:

Lad os nu slutte os til denne tabel med andre systemkataloger for at få detaljerede oplysninger om statistikken. For at gøre det skal du udføre følgende forespørgsel:

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

Forespørgslen ovenfor udfylder følgende detaljer

  1. Tabellen, hvorpå statistikker oprettes.
  2. Indeks-id.
  3. Statistiknavn.
  4. Kolonner inkluderet i statistikker.

Følgende er output:

I det næste afsnit vil jeg forklare forskellige måder at opdatere statistikken på.

Forskellige tilgange til statistikopdatering

Vi kan opdatere statistikken på følgende måder:

  1. Opret en SQL Server-vedligeholdelsesplan.
  2. Opret ved hjælp af det tilpassede script.
  3. Udfør opdateringsstatistikkommandoen manuelt på en individuel tabel.

Først vil jeg forklare, hvordan vi kan lave en vedligeholdelsesplan for at opdatere statistikkerne.

Opret SQL Server-vedligeholdelsesplan for at opdatere statistikkerne

Nu, i denne demo, vil vi oprette en vedligeholdelsesplan for opdatering af statistik for at opdatere statistikkerne. Vedligeholdelsesplanen udfører følgende opgaver:

Opret først en vedligeholdelsesplan. For at gøre det skal du åbne SQL Server Management Studio. Udvid SQL-serverforekomst>>Management-mappe>> Under Management, højreklik på MaintenancePplans, og vælg Ny vedligeholdelsesplan. Se følgende billede:

Den nye vedligeholdelsesplan dialogboksen åbnes. Angiv et navn på vedligeholdelsesplanen i boksen, og klik på OK. Se følgende billede:

Vedligeholdelsesplandesigner åbner. Træk og slip "Opdater statistikopgave" i designervinduet i designerens vedligeholdelsesplan. Se følgende billede:

Dobbeltklik nu på Opdater statistikopgave . Opgaven Opdater statistik dialogboksen åbnes. I dialogboksen er der muligheder, som kan bruges til at tilpasse vedligeholdelsesplanen. Se følgende billede:

Vi kan tilpasse følgende muligheder ved brug af Opdater statistik vedligeholdelsesplan.

  1. Opdater statistik for alle objekter i en specifik database. Se følgende billede:
  2. Specifikke objekter i udvalgte databaser. Du kan opdatere statistik over alle tabeller og visninger / specifikke tabeller og visninger. Se følgende billede:

    Hvis vi vælger tabeller eller visninger, vil SQL udfylde navnet på visninger eller tabeller i udvalget dialog boks. Se følgende billede:
  3. Den tredje mulighed er Opdater . Vi kan opdatere al statistik over tabeller/visninger, eller vi kan vælge kun at opdatere kolonnestatistikker (statistik oprettet på ikke-indekserede kolonner), eller vi kan vælge kun Indeksstatistik (statistikker oprettet af indekser). Se følgende billede:
  4. Vi kan også vælge scanningstypen for enhver statistik. Vi kan vælge Fuld scanning eller Sample by en specificeret procentdel eller specificerede rækker. Se følgende billede:

Nu, som jeg nævnte, vil vi oprette en vedligeholdelsesopgave, som vil opdatere statistikker for alle tabeller i AdventureWorks2017 database med fuld scanning. Så vælg muligheder i overensstemmelse hermed. Når vedligeholdelsesopgaven er konfigureret, ser den sådan ud:

Når vedligeholdelsesopgaven er konfigureret korrekt, skal du lukke dialogboksen for opdateringsstatistikker. Efter konfiguration ser vedligeholdelsesplanen sådan ud:

Når vedligeholdelsesplanen er oprettet, lad os planlægge vedligeholdelsesplanen. For at gøre det skal du klikke på kalenderikonet ud for Beskrivelse kolonne. Se følgende billede:

Når du klikker på kalenderknappen, åbnes en dialogboks til at konfigurere jobplanen. Se følgende billede:

Som jeg nævnte, vil vores vedligeholdelsesplan for opdateringsstatistik udføres hver søndag kl. 4:00. Så vi konfigurerer jobplanen i overensstemmelse hermed. Jobplanlægning er ligetil. Når du har konfigureret tidsplanen, ser dialogboksen således ud:

Når en udførelsesplan er konfigureret, ser hele vedligeholdelsesplanen ud som følgende billede. Gem vedligeholdelsesplanen og luk vinduet.

Lad os nu køre denne vedligeholdelsesplan ved at udføre det SQL-job, der er oprettet af vedligeholdelsesplanen. For at åbne SQL-job skal du udvide SQL Server Agent og udvid Jobs . Du kan se SQL-jobbet oprettet af SQL-vedligeholdelsesplanen. For at udføre jobbet skal du højreklikke på Update Statistics Weekly.Weekly.Subplan_1 og klik på Start job ved trin . Se følgende billede.

Når jobbet er fuldført, kan du se følgende dialogboks for Jobudførelse vellykket.

Oversigt

I denne artikel har jeg dækket:

  1. En detaljeret forklaring af SQL Server-statistik og dens betydning.
  2. Forskellige muligheder for at opdatere statistikkerne.
  3. Et fungerende eksempel på oprettelse af en SQL-vedligeholdelsesplan for at opdatere statistikkerne.

I min næste artikel vil jeg forklare forskellige T-SQL-kommandoer for at opdatere statistikkerne. Desuden vil jeg forklare et T-SQL script, som vil opdatere statistikkerne baseret på mængden af ​​dataændringer, der er sket efter indsættelse/opdatering/sletning fandt sted i tabellen.


  1. Sådan tilføjes 10 sekunder i current_timestamp SQL (Oracle)

  2. Hvad er det længst mulige verdensomspændende telefonnummer, jeg bør overveje i SQL varchar(længde) for telefon

  3. Søg i alle tabeller, alle kolonner for en bestemt værdi SQL Server

  4. Alfanumerisk sortering med PostgreSQL