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

Aggiorna le statistiche di SQL Server utilizzando un piano di manutenzione del database

I backup del database, i controlli di integrità e l'ottimizzazione delle prestazioni sono attività regolari di base dei DBA. I dati del client sono molto importanti per un DBA per gestire il backup del database e garantire l'integrità dei backup. Quindi, se qualcosa va storto con un database di produzione, può essere ripristinato con tempi di inattività minimi. I controlli di integrità del database sono importanti anche perché, in caso di danneggiamento del database, è possibile correggerlo con tempi di fermo e perdita di dati minimi. Anche la gestione delle prestazioni del database è importante. La gestione delle prestazioni del database è una combinazione di più attività.

  1. Identifica l'elenco delle query ad alta intensità di risorse e aiuta gli sviluppatori a riscriverle.
  2. Crea e gestisci indici sulla tabella. Inoltre, esegui la deframmentazione dell'indice per assicurarti che rimangano in buone condizioni.
  3. Infine, la gestione delle statistiche delle tabelle.

Nel mio articolo precedente, ho trattato l'argomento della creazione automatica delle statistiche e dell'aggiornamento automatico delle statistiche e di come possono aiutare a migliorare le prestazioni. In questo articolo spiegherò come creare e programmare il piano di manutenzione per aggiornare le statistiche.

Per prima cosa, lascia che ti spieghi cosa sono le statistiche di SQL Server e come possono aiutare ad aumentare le prestazioni di SQL Server.

Statistiche di SQL Server e loro importanza

Le statistiche sono metadati utilizzati da Query Optimizer di SQL Server, che aiuta a determinare il modo migliore per recuperare i dati. L'ottimizzatore utilizza le statistiche per comprendere i dati, la loro distribuzione e il numero di righe che è probabile che una determinata query restituisca dalle statistiche disponibili. Sulla base di queste informazioni, decide il percorso di accesso ai dati ottimale. Determina anche se eseguire una scansione della tabella o una ricerca di un indice, utilizzare un join di loop nidificato o un join hash, ecc.

Se le statistiche non sono aggiornate o se non sono disponibili, l'ottimizzatore può scegliere il piano di esecuzione scadente, che riduce significativamente le prestazioni della query. SQL Server può mantenere automaticamente le statistiche e aggiornarle in base al rilevamento delle modifiche ai dati.

Le statistiche possono essere create e aggiornate automaticamente abilitando "Crea statistiche automatiche" e "Aggiorna statistiche automatiche". Tuttavia, per alcune tabelle, come quelle soggette a modifiche significative nella distribuzione dei dati, è possibile che l'aggiornamento automatico delle statistiche di SQL Server non sia sufficiente per mantenere costantemente elevati livelli di prestazioni delle query.

Prima di spiegare i diversi approcci per aggiornare le statistiche, lascia che ti spieghi i diversi modi per rivedere le statistiche create su qualsiasi tabella.

Come rivedere le statistiche

Possiamo visualizzare le statistiche delle colonne e degli indici

  1. Utilizzo di SQL Server Management Studio.
  2. Utilizzo delle stored procedure di sistema, dei cataloghi di sistema e delle viste a gestione dinamica

Visualizza statistiche utilizzando SQL Server Management Studio

Ad esempio, voglio vedere le statistiche create su [HumanResources].[Employee] tabella creata in AdventureWorks2017 Banca dati. Per farlo, avvia SQL Server Management Studio. Quindi espandi AdventureWorks2017 database, espandi [Risorse umane].[Dipendente] tavolo. Vedi l'immagine seguente:

Utilizzo delle stored procedure di sistema e delle viste a gestione dinamica

Se stai utilizzando una versione precedente di SQL Server, puoi utilizzare sp_helpstats procedura di sistema per rivedere le statistiche delle tabelle. sp_helpstats mostrerà le statistiche, create da SQL Server o da un utente. Non mostrerà le statistiche create da Index. Per dimostrarlo, ho creato una statistica denominata User_Statistics_BirthDate su [Risorse umane].[Dipendente] tabella.

Di seguito è riportato l'esempio:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Di seguito è riportato l'output.

Puoi rivedere le statistiche eseguendo una query su sys.stats catalogo di sistema. Fornisce informazioni sulle statistiche create da SQL Server, Created by Indexes e create da un utente.

Esegui la seguente query:

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

Di seguito è riportato l'output:

Ora uniamo questa tabella con altri cataloghi di sistema per ottenere informazioni dettagliate sulle statistiche. Per farlo, esegui la seguente query:

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

La query sopra popola i seguenti dettagli

  1. La tabella su cui vengono create le statistiche.
  2. ID indice.
  3. Nome delle statistiche.
  4. Colonne incluse nelle statistiche.

Di seguito è riportato l'output:

Nella prossima sezione spiegherò diversi modi per aggiornare le statistiche.

Diversi approcci all'aggiornamento delle statistiche

Possiamo aggiornare le statistiche nei seguenti modi:

  1. Crea un piano di manutenzione di SQL Server.
  2. Crea utilizzando lo script personalizzato.
  3. Esegui manualmente il comando di aggiornamento delle statistiche su una singola tabella.

In primo luogo, spiegherò come possiamo creare un piano di manutenzione per aggiornare le statistiche.

Crea un piano di manutenzione di SQL Server per aggiornare le statistiche

Ora, in questa demo, creeremo un piano di manutenzione delle statistiche di aggiornamento per aggiornare le statistiche. Il piano di manutenzione eseguirà le seguenti attività:

Innanzitutto crea un piano di manutenzione. Per farlo, apri SQL Server Management Studio. Espandi Istanza del server SQL>>Cartella di gestione>> In Gestione, fai clic con il pulsante destro del mouse su MaintenancePplans e seleziona Nuovo piano di manutenzione. Vedi l'immagine seguente:

Il Nuovo Piano di Manutenzione si apre la finestra di dialogo. Nella casella, fornire un nome del piano di manutenzione e fare clic su OK. Vedi l'immagine seguente:

Si apre il progettista del piano di manutenzione. Nella casella degli strumenti del progettista del piano di manutenzione, trascina e rilascia "Attività di aggiornamento delle statistiche" nella finestra del progettista. Vedi l'immagine seguente:

Ora fai doppio clic su Aggiorna attività statistiche . L'attività di aggiornamento delle statistiche si apre la finestra di dialogo. Nella finestra di dialogo sono disponibili opzioni che possono essere utilizzate per personalizzare il piano di manutenzione. Vedi l'immagine seguente:

Possiamo personalizzare le seguenti opzioni sull'utilizzo del piano di manutenzione delle statistiche di aggiornamento.

  1. Aggiorna le statistiche di tutti gli oggetti di un database specifico. Vedi l'immagine seguente:
  2. Oggetti specifici dei database selezionati. È possibile aggiornare le statistiche di tutte le tabelle e viste/tabelle e viste specifiche. Vedi l'immagine seguente:

    Se scegliamo Tabelle o Viste, SQL riempirà il nome delle viste o delle tabelle nella selezione la finestra di dialogo. Vedi l'immagine seguente:
  3. La terza opzione è Aggiorna . Possiamo aggiornare tutte le statistiche di tabelle/viste, oppure possiamo scegliere di aggiornare solo le statistiche delle colonne (statistiche create su colonne non indicizzate), oppure possiamo scegliere solo le statistiche dell'indice (statistiche create dagli indici). Vedi l'immagine seguente:
  4. Possiamo anche selezionare il tipo di scansione di qualsiasi statistica. Possiamo scegliere Scansione completa o Campione per una percentuale specificata o righe specificate. Vedi l'immagine seguente:

Ora, come accennato, creeremo un'attività di manutenzione che aggiornerà le statistiche di tutte le tabelle all'interno di AdventureWorks2017 database con una scansione completa. Quindi, scegli le opzioni di conseguenza. Una volta configurata l'attività di manutenzione, avrà l'aspetto seguente:

Dopo aver configurato correttamente l'attività di manutenzione, chiudere la finestra di dialogo delle statistiche di aggiornamento. Dopo la configurazione, il piano di manutenzione è simile al seguente:

Una volta creato il piano di manutenzione, pianifichiamo il piano di manutenzione. Per farlo, fai clic sull'icona del calendario di fronte alla Descrizione colonna. Vedi l'immagine seguente:

Dopo aver fatto clic sul pulsante del calendario, si apre una finestra di dialogo per configurare la pianificazione del lavoro. Vedi l'immagine seguente:

Come accennato, il nostro piano di manutenzione delle statistiche di aggiornamento verrà eseguito ogni domenica alle 4:00. Quindi configureremo la pianificazione del lavoro di conseguenza. La pianificazione del lavoro è semplice. Dopo aver configurato la pianificazione, la finestra di dialogo è simile alla seguente:

Una volta configurata una pianificazione di esecuzione, l'intero piano di manutenzione avrà l'aspetto dell'immagine seguente. Salva il piano di manutenzione e chiudi la finestra.

Ora eseguiamo questo piano di manutenzione eseguendo il processo SQL creato dal piano di manutenzione. Per aprire i processi SQL, espandi SQL Server Agent ed espandi Offerte di lavoro . È possibile visualizzare il processo SQL creato dal piano di manutenzione SQL. Ora per eseguire il lavoro, fai clic con il pulsante destro del mouse su Aggiorna statistiche settimanalmente.Weekly.Subplan_1 e fai clic su Avvia lavoro al passaggio . Vedi l'immagine seguente.

Una volta completato il lavoro, è possibile visualizzare la seguente finestra di dialogo Esecuzione del lavoro riuscita.

Riepilogo

In questo articolo ho trattato:

  1. Una spiegazione dettagliata di SQL Server Statistics e la sua importanza.
  2. Diverse opzioni per aggiornare le statistiche.
  3. Un esempio funzionante di creazione di un piano di manutenzione SQL per aggiornare le statistiche.

Nel mio prossimo articolo, spiegherò vari comandi T-SQL per aggiornare le statistiche. Inoltre, spiegherò uno script T-SQL che aggiornerà le statistiche in base al volume delle modifiche ai dati avvenute dopo che l'inserimento/aggiornamento/eliminazione si è verificato sulla tabella.