sql >> Database >  >> RDS >> Sqlserver

Update SQL Server-statistieken met behulp van een database-onderhoudsplan

Databaseback-ups, integriteitscontroles en prestatie-optimalisaties zijn vaste kerntaken van DBA's. De klantgegevens zijn erg belangrijk voor een DBA om de databaseback-up te beheren en de integriteit van de back-ups te waarborgen. Dus als er iets misgaat met een productiedatabase, kan deze worden hersteld met minimale downtime. De integriteitscontroles van de database zijn ook belangrijk omdat, in het geval van databasecorruptie, deze kan worden gecorrigeerd met minimale downtime en gegevensverlies. Het beheren van databaseprestaties is ook belangrijk. Het beheren van databaseprestaties is een combinatie van meerdere taken.

  1. Identificeer de lijst met resource-intensieve zoekopdrachten en help ontwikkelaars deze opnieuw te schrijven.
  2. Maak en beheer indexen op de tafel. Voer ook indexdefragmentatie uit om ervoor te zorgen dat ze in goede staat blijven.
  3. Tot slot, het beheren van statistieken van tabellen.

In mijn vorige artikel heb ik het onderwerp Automatisch statistieken maken en Statistieken automatisch bijwerken behandeld en hoe deze kunnen helpen om de prestaties te verbeteren. In dit artikel ga ik uitleggen hoe je het onderhoudsplan maakt en plant om de statistieken bij te werken.

Laat me eerst uitleggen wat SQL Server-statistieken zijn en hoe het kan helpen om de prestaties van de SQL-server te verbeteren.

SQL Server-statistieken en hun belang

Statistieken zijn metagegevens die worden gebruikt door SQL Server-queryoptimalisatie, die helpt bij het bepalen van de beste manier om de gegevens op te halen. Het optimalisatieprogramma gebruikt statistieken om inzicht te krijgen in de gegevens, de distributie ervan en het aantal rijen dat een bepaalde zoekopdracht waarschijnlijk zal opleveren uit de beschikbare statistieken. Op basis van deze informatie bepaalt het het optimale datatoegangspad. Het bepaalt ook of een tabelscan of indexzoekopdracht moet worden uitgevoerd, of een geneste loop-join of een hash-join moet worden gebruikt, enz.

Als de statistieken verouderd zijn of niet beschikbaar zijn, kan de optimizer het slechte uitvoeringsplan kiezen, wat de queryprestaties aanzienlijk vermindert. SQL Server kan automatisch statistieken bijhouden en vernieuwen op basis van het bijhouden van gegevenswijzigingen.

Statistieken kunnen automatisch worden gemaakt en bijgewerkt door "Statistieken automatisch maken" en "Statistieken automatisch bijwerken" in te schakelen. Voor sommige tabellen, zoals de tabellen die onderhevig zijn aan significante veranderingen in de gegevensdistributie, is het echter mogelijk dat de automatische update van de SQL Server-statistieken onvoldoende is om consistent hoge queryprestaties te behouden.

Voordat ik de verschillende benaderingen voor het bijwerken van de statistieken heb uitgelegd, wil ik eerst de verschillende manieren uitleggen om de statistieken die op een tafel zijn gemaakt, te bekijken.

Hoe de statistieken te bekijken

We kunnen kolomstatistieken en indexstatistieken bekijken

  1. SQL Server Management Studio gebruiken.
  2. Opgeslagen systeemprocedures en systeemcatalogi en dynamische beheerweergaven gebruiken

Statistieken bekijken met SQL Server Management Studio

Ik wil bijvoorbeeld de statistieken zien die zijn gemaakt op de [HumanResources].[Medewerker] tabel gemaakt in de AdventureWorks2017 databank. Om dat te doen, start u SQL Server Management Studio. Vouw vervolgens de AdventureWorks2017 . uit database, vouw de [HumanResources].[Employee] tafel. Zie de volgende afbeelding:

Opgeslagen systeemprocedures en dynamische beheerweergaven gebruiken

Als u een oudere versie van SQL Server gebruikt, kunt u de sp_helpstats . gebruiken systeemprocedure om de statistieken van de tabellen te bekijken. sp_helpstats toont de statistieken, gemaakt door SQL Server of door een gebruiker. De statistieken die door Index zijn gemaakt, worden niet weergegeven. Om dat aan te tonen, heb ik een statistiek gemaakt met de naam User_Statistics_BirthDate op de [HumanResources].[Medewerker] tafel.

Hieronder volgt het voorbeeld:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Hieronder volgt de uitvoer.

U kunt statistieken bekijken door de sys.stats . op te vragen systeem catalogus. Het geeft informatie over de statistieken die zijn gemaakt door SQL Server, gemaakt door indexen en gemaakt door een gebruiker.

Voer de volgende vraag uit:

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

Hieronder volgt de uitvoer:

Laten we deze tabel nu samenvoegen met andere systeemcatalogi om gedetailleerde informatie over de statistieken te krijgen. Voer hiervoor de volgende query uit:

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

De bovenstaande zoekopdracht bevat de volgende details

  1. De tabel waarop statistieken worden gemaakt.
  2. Index-ID.
  3. Naam van statistieken.
  4. Kolommen opgenomen in statistieken.

Hieronder volgt de uitvoer:

In het volgende gedeelte zal ik verschillende manieren uitleggen om de statistieken bij te werken.

Verschillende benaderingen voor het bijwerken van statistieken

We kunnen de statistieken op de volgende manieren bijwerken:

  1. Maak een onderhoudsplan voor SQL Server.
  2. Maken met het aangepaste script.
  3. Voer de opdracht voor het bijwerken van statistieken handmatig uit op een afzonderlijke tabel.

Allereerst zal ik uitleggen hoe we een onderhoudsplan kunnen maken om de statistieken bij te werken.

Maak SQL Server-onderhoudsplan om de statistieken bij te werken

Nu, in deze demo, zullen we een onderhoudsplan voor updatestatistieken maken om de statistieken bij te werken. Het onderhoudsplan voert de volgende taken uit:

Maak eerst een onderhoudsplan. Open hiervoor SQL Server Management Studio. Vouw SQL-serverexemplaar>>Managementmap> > Klik onder Beheer met de rechtermuisknop op MaintenancePplans en selecteer Nieuw onderhoudsplan. Zie de volgende afbeelding:

Het Nieuwe Onderhoudsplan dialoogvenster wordt geopend. Geef in het vak een naam op voor het onderhoudsplan en klik op OK. Zie de volgende afbeelding:

De ontwerper van het onderhoudsplan wordt geopend. Sleep in de toolbox van de onderhoudsplanontwerper "Taak statistieken bijwerken" in het ontwerpervenster. Zie de volgende afbeelding:

Dubbelklik nu op Taak statistieken bijwerken . De taak Statistieken bijwerken dialoogvenster wordt geopend. In het dialoogvenster zijn er opties die kunnen worden gebruikt om het onderhoudsplan aan te passen. Zie de volgende afbeelding:

We kunnen de volgende opties aanpassen bij het gebruik van Statistieken bijwerken Onderhoudsplan.

  1. Update statistieken van alle objecten van een specifieke database. Zie de volgende afbeelding:
  2. Specifieke objecten van geselecteerde databases. U kunt de statistieken van Alle tabellen en weergaven / specifieke tabellen en weergaven bijwerken. Zie de volgende afbeelding:

    Als we Tabellen of Weergaven kiezen, dan zal SQL de naam van weergaven of tabellen in de selectie vullen dialoog venster. Zie de volgende afbeelding:
  3. De derde optie is Bijwerken . We kunnen alle statistieken van tabellen/weergaven bijwerken, of we kunnen ervoor kiezen om alleen kolomstatistieken bij te werken (statistieken gemaakt op niet-geïndexeerde kolommen), of we kunnen alleen indexstatistieken kiezen (statistieken gemaakt door indexen). Zie de volgende afbeelding:
  4. We kunnen ook het scantype van statistieken selecteren. We kunnen kiezen voor Volledige scan of Sample door een bepaald percentage of gespecificeerde rijen. Zie de volgende afbeelding:

Zoals ik al zei, zullen we nu een onderhoudstaak maken die de statistieken van alle tabellen in de AdventureWorks2017 bijwerkt. database met een volledige scan. Kies daarom de opties dienovereenkomstig. Nadat de onderhoudstaak is geconfigureerd, ziet deze er als volgt uit:

Zodra de onderhoudstaak correct is geconfigureerd, sluit u het dialoogvenster met updatestatistieken. Na configuratie ziet het onderhoudsplan er als volgt uit:

Nadat het onderhoudsplan is gemaakt, kunnen we het onderhoudsplan plannen. Klik hiervoor op het kalenderpictogram naast de Beschrijving kolom. Zie de volgende afbeelding:

Zodra u op de kalenderknop klikt, wordt een dialoogvenster geopend om het taakschema te configureren. Zie de volgende afbeelding:

Zoals ik al zei, wordt ons onderhoudsplan voor updatestatistieken elke zondag om 04:00 uur uitgevoerd. Dus we zullen het werkschema dienovereenkomstig configureren. Het plannen van taken is eenvoudig. Nadat u het schema hebt geconfigureerd, ziet het dialoogvenster er als volgt uit:

Nadat een uitvoeringsschema is geconfigureerd, ziet het volledige onderhoudsplan eruit als de volgende afbeelding. Sla het onderhoudsplan op en sluit het venster.

Laten we nu dit onderhoudsplan uitvoeren door de SQL-taak uit te voeren die door het onderhoudsplan is gemaakt. Vouw SQL Server Agent . uit om SQL Jobs te openen en vouw Vacatures uit . U kunt de SQL-taak zien die is gemaakt door het SQL-onderhoudsplan. Om de taak uit te voeren, klikt u met de rechtermuisknop op Statistieken bijwerken Weekly.Weekly.Subplan_1 en klik op Vacature starten bij stap . Zie de volgende afbeelding.

Zodra de taak is voltooid, kunt u het volgende dialoogvenster Taakuitvoering succesvol zien.

Samenvatting

In dit artikel heb ik het volgende behandeld:

  1. Een gedetailleerde uitleg van SQL Server-statistieken en het belang ervan.
  2. Verschillende opties om de statistieken bij te werken.
  3. Een werkend voorbeeld van het maken van een SQL-onderhoudsplan om de statistieken bij te werken.

In mijn volgende artikel zal ik verschillende T-SQL-commando's uitleggen om de statistieken bij te werken. Bovendien zal ik een T-SQL-script uitleggen dat de statistieken bijwerkt op basis van de hoeveelheid gegevenswijzigingen die plaatsvonden nadat het invoegen/bijwerken/verwijderen op de tafel plaatsvond.


  1. Een MySQL-queryresultaat opslaan in een .CSV-bestand

  2. Wat betekent het om aan een string te ontsnappen?

  3. Afdrukken naar scherm in .sql-bestand postgres

  4. hoe kan ik mijn SQL-resultaten dupliceren?