I piani di manutenzione in SQL Server ci offrono un modo semplice per organizzare, configurare e pianificare le attività che assicurano che il motore di database e i database in esso ospitati siano mantenuti in forma.
I piani di manutenzione offrono all'amministratore del database l'opportunità di configurare attività chiave come indicizzazione, aggiornamenti delle statistiche, backup, pulizia dei registri e altro. Nell'articolo precedente abbiamo già discusso come creare un piano di manutenzione di base per eseguire il controllo della coerenza del database. In questo articolo, faremo una procedura dettagliata per creare un piano di manutenzione per un'istanza di database che ospita database di piccole dimensioni. Nel corso della procedura dettagliata, spiegherò le scelte chiave effettuate in ogni passaggio nel contesto di un'istanza con un numero moderatamente elevato di piccoli banche dati. L'idea è di configurare la manutenzione per questi database senza doverla fare uno per uno. L'attenzione ai database di piccole dimensioni ha lo scopo di evitare il sovraccarico di prestazioni associato alle operazioni di manutenzione.
Piano di manutenzione per le attività settimanali
Figura 1:avvio della procedura guidata del piano di manutenzione
Avviamo la procedura guidata del piano di manutenzione da Esplora oggetti>[Nome istanza]>Gestione>Piani di manutenzione (vedere la figura 1). La prima pagina della procedura guidata fornisce una panoramica delle attività che possono essere configurate. Sebbene ci siano altri modi per eseguire queste attività utilizzando il codice e la pianificazione dei processi, la procedura guidata del piano di manutenzione semplifica l'esecuzione quando si ha a che fare con un numero elevato di database ospitati su un'istanza.
Figura 2:Procedura guidata del piano di manutenzione
Nella figura 3 vediamo SQL Server che espone i campi per nominare e descrivere il piano di manutenzione. L'inserimento di una descrizione del piano ha senso ai fini della documentazione. Immagina di rilevare una nuova istanza di SQL Server in una nuova azienda. Sarebbe utile se negli oggetti si trovano descrizioni di oggetti di SQL Server. Dovresti fare lo stesso per gli altri. Si prega di notare che la descrizione che ho fornito ha lo scopo di illustrare semplicemente il punto. Una descrizione più dettagliata sarà auspicabile in un ambiente di produzione.
Figura 3:denominazione del piano di manutenzione
Si noti che nella Figura 3 abbiamo la possibilità di scegliere se si desidera utilizzare un'unica pianificazione per tutte le attività o una pianificazione separata per ciascuna attività. Ho scelto di utilizzare pianificazioni separate per avere la flessibilità di scaglionare le attività. Non vorremmo che troppe operazioni di manutenzione venissero eseguite contemporaneamente o back to back per molto tempo per evitare il rischio di sovraccaricare le risorse del server. La decisione che prendi a questo punto può anche dipendere dalla capacità delle risorse a tua disposizione e dalla finestra di manutenzione disponibile. Alcune persone hanno una capacità sufficiente e vorrebbe portare a termine l'attività rapidamente durante ogni corsa. Nello scenario trattato in questo articolo, presumiamo che l'istanza in questione non venga utilizzata durante il fine settimana.
Nella Figura 4, scegliamo le attività che vogliamo eseguire. Una delle grandi cose di SQL Server è che ogni attività è descritta nella parte inferiore della finestra. Conviene quando si lavora come DBA per capire cosa si sta facendo anche quando si lavora su “Windows”. Nella mia esperienza, molti "amministratori" hanno l'abitudine di fare semplicemente clic su "AVANTI, AVANTI, AVANTI" perché hanno fretta di far funzionare la funzionalità. Ma dedicare del tempo a comprendere l'impatto del prossimo "NEXT" ti aiuta a fare qualcosa che aggiungerà valore, non causerà nuovi problemi.
Figura 4:selezione delle attività di manutenzione
Le attività che abbiamo selezionato sono descritte come segue:
Il Verifica dell'integrità del database task esegue controlli di coerenza interni dei dati e delle pagine di indice all'interno del database.
L'Indice di riorganizzazione attività deframmenta e compatta indici cluster e non cluster su tabelle e viste. Ciò migliorerà le prestazioni di scansione dell'indice.
L'Ricostruisci indice l'attività riorganizza i dati nelle pagine dei dati e dell'indice ricostruendo gli indici. Ciò migliora le prestazioni delle scansioni e delle ricerche degli indici. Questa attività ottimizza anche la distribuzione dei dati e dello spazio libero nelle pagine dell'indice, consentendo una crescita futura più rapida.
Aggiorna le statistiche task assicura che Query Optimizer disponga di informazioni aggiornate sulla distribuzione dei valori dei dati nelle tabelle. Ciò consente all'ottimizzatore di esprimere giudizi migliori sulle strategie di accesso ai dati.
La pulizia della cronologia l'attività elimina i dati cronologici sulle operazioni di backup e ripristino, SQL Server Agent e Piano di manutenzione. Questa procedura guidata consente di specificare il tipo e l'età dei dati da eliminare.
Il Backup del database (completo) task consente di specificare i database di origine, i file oi nastri di destinazione e le opzioni di sovrascrittura per un backup completo.
La pulizia di manutenzione l'attività rimuove i file rimasti dall'esecuzione di un piano di manutenzione.
La Figura 5 mostra dove selezioniamo l'ordine in cui vengono eseguite queste attività. Questo è importante per alcuni motivi. Ad esempio, non ha senso eseguire un aggiornamento delle statistiche dell'indice dopo una ricostruzione dell'indice poiché una ricostruzione dell'indice esegue anche l'aggiornamento delle statistiche dell'indice in SQL ServerSQL Server. Vedremo più avanti nell'articolo come gestiamo questo dato l'ordine che abbiamo scelto. Un'altra possibile considerazione è che potresti decidere che ha più senso eseguire un backup prima di procedere con determinati tipi di manutenzione.
Figura 5:Ordine delle attività
Nella Figura 6, scegliamo a quali database vogliamo applicare la prima attività di manutenzione. Dobbiamo farlo anche per ciascuna delle attività successive. Questo è importante nel senso che alcuni database potrebbero dover essere esentati da tali operazioni. Ad esempio, se si dispone di un mix di database molto grandi (VLDB) e database molto piccoli nella stessa istanza (una cattiva idea di per sé), potrebbe essere necessario escludere i VLDB dalle ricostruzioni degli indici ciechi. In tal caso, è necessario identificare le tabelle chiave in quel VLDB e concentrare le ricostruzioni e altre operazioni di manutenzione intensiva sulle tabelle chiave. In questo esempio, ho escluso i database di sistema poiché posso pianificare attentamente le manutenzioni per loro separatamente. Ritengo sia più sicuro gestire i database di sistema separatamente, dato che eventuali danni potrebbero avere un impatto sull'intera istanza.
Figura 6:determinare l'ambito
Ogni operazione di manutenzione ha il proprio set di opzioni. La figura 7 mostra le opzioni che dobbiamo decidere per DBCC CHECKDB. Ho deviato leggermente dalle impostazioni predefinite aumentando il MAXDOP a 2. Nella Figura 8, scegliamo di eseguire questa attività all'01:00 il sabato e la domenica sera.
Figura 7:Opzioni DBCC
Figura 8:pianificazione DBCC
L'attività Riorganizza indice ha anche un insieme specifico di opzioni. Vale la pena menzionare l'insieme di condizioni che determineranno se un indice deve essere riorganizzato o meno:frammentazione del 30%, conteggio di oltre 1000 pagine e riutilizzo per l'ultima volta al massimo 28 giorni. Questa finestra sottolinea la necessità di comprendere le opzioni che stiamo facendo. Per rendere correttamente queste opzioni, è necessario comprendere gli indici e l'indicizzazione in misura ragionevole. Si noti che sarà necessario effettuare scelte simili nell'attività Ricostruisci indice. Inoltre, tieni presente che la soglia di frammentazione consigliata per la riorganizzazione dell'indice è in realtà del 15% e non del 30%.
Figura 9:riorganizzazione delle opzioni dell'indice
L'attività Ricostruisci indice offre alcune altre opzioni oltre a quelle per la riorganizzazione dell'indice. (Vedi Figura 10). Si noti che ho scelto di ordinare i risultati in TempDB. Affinché questa scelta sia efficace, è importante ottimizzare TempDB in modo appropriato poiché la scelta implica che l'ordinamento per questa operazione in TUTTI i database avverrà in TempDB. Inoltre, dobbiamo impostare la pianificazione per la ricostruzione dell'indice. Ho anche impostato MAXDOP su 2 per questa attività.
Figura 10:Opzioni di ricostruzione dell'indice
Abbiamo accennato in precedenza che quando viene richiamata una ricostruzione dell'indice in SQL Server, per impostazione predefinita viene richiamato anche l'aggiornamento delle statistiche sugli indici. Pertanto, quando configuriamo l'attività di aggiornamento delle statistiche, scegliamo di aggiornare solo le statistiche della colonna (Figura 11). Questa finestra ci dà anche la possibilità di eseguire una scansione completa o un campionamento. Poiché il contesto è costituito da database di piccole dimensioni, scegliamo l'opzione di scansione completa. Ancora una volta, questo richiede una certa comprensione delle statistiche.
Figura 11:attività di aggiornamento delle statistiche
Scegliamo di configurare il processo di pulizia per eliminare tutti i dati più vecchi di 4 settimane, come mostrato nella Figura 12.
Figura 12:attività di pulizia della cronologia
L'attività di backup espone un certo numero di opzioni di configurazione in tre schede! La Figura 13 mostra che scegliamo di limitare questa attività di backup ai database degli utenti. Lo programmiamo per le 3:00 di domenica e andiamo oltre per scegliere la destinazione del backup come E:\MSSQL\Backup (vedere la figura 14). Nella terza scheda (Figura 15), facciamo le scelte per verificare il backup ed eseguire anche un checksum, quindi siamo più vicini all'essere sicuri che il backup sia affidabile.
Figura 13:attività di backup del database
Figura 14:destinazione del backup
Figura 15:Opzioni di backup
Infine, configuriamo un'attività che gestirà la conservazione del nostro registro del Piano di manutenzione. (Figura 16). Ancora una volta, scegliamo di eliminare tutti i record di registro più vecchi di 4 settimane. La Figura 17 mostra le opzioni che selezioniamo per garantire che le attività del Piano di manutenzione siano registrate e inviate al gruppo Database Admin. Ovviamente, affinché quest'ultima opzione funzioni, dobbiamo aver configurato Database Mail e impostato correttamente gli operatori.
Figura 16:Attività di pulizia del piano di manutenzione
Figura 17:Opzioni del rapporto
Le figure 18 e 19 mostrano un riepilogo delle attività che abbiamo configurato e un feedback sul completamento con successo della procedura guidata.
Figura 18:riepilogo delle opzioni
Figura 19:completamento della procedura guidata
Piano di manutenzione per le attività quotidiane
Possiamo anche impostare Piani di manutenzione separati per altri scopi, come semplicemente essere organizzati. Non è necessario impostare un piano separato per le attività giornaliere poiché possiamo configurare le pianificazioni separatamente per ciascuna attività. Un motivo per cui potremmo voler impostare un piano separato potrebbe essere quello di selezionare un diverso insieme di attività destinate a un diverso insieme di database (in realtà, potremmo essere ancora in grado di farlo anche nel piano esistente).
Nell'esempio seguente, supponiamo di avere un altro set di database di grandi dimensioni all'interno della stessa istanza con obiettivi del punto di ripristino diversi. È quindi necessario utilizzare una strategia di backup diversa:una pianificazione giornaliera del backup differenziale e una pianificazione oraria del backup del registro delle transazioni oltre a un backup completo settimanale per garantire un RPO di 1 ora. (Vedi figure 21 e 22).
Figura 20:Piano di manutenzione giornaliera delle attività
Figura 21:attività di backup differenziale e Tlog
Figura 22:Ordine delle attività del piano di manutenzione giornaliera
Per il backup differenziale, scegliamo una pianificazione giornaliera che viene attivata alle 2:00 ogni giorno. (Vedi Figura 23). E scegli le stesse opzioni di backup che abbiamo fatto per il backup settimanale completo configurato in precedenza.
Figura 23:Programma del piano di manutenzione giornaliera
Figura 24:Posizione di backup differenziale
Figura 25:Opzioni di backup differenziali
D'altra parte, scegliamo di pianificare il backup differenziale in modo che avvenga ogni ora di ogni giorno. Garantiamo inoltre che ogni set di backup del database sia archiviato in una directory con il proprio nome. Il resto della procedura guidata è più o meno lo stesso della procedura dettagliata precedente.
Figura 26:pianificazione del backup del registro delle transazioni
Figura 27:Posizione di backup del registro delle transazioni
Figura 28:Opzioni di backup del registro delle transazioni
Conclusione
Dopo aver completato la procedura guidata del piano di manutenzione, si ottiene un piano di manutenzione e un insieme corrispondente di processi dell'agente SQL (vedere la figura 29). In sostanza, il piano di manutenzione è una raccolta di pacchetti SSIS e, quando esamini i lavori pianificati, scoprirai che la fase del lavoro eseguita in ogni lavoro del sottopiano è un pacchetto SSIS (vedere la figura 30).
In un esempio successivo, mostreremo che possiamo eseguire i lavori del sottopiano ogni anno. Esamineremo anche i risultati dell'esecuzione del piano di manutenzione e risolveremo gli errori relativi all'esecuzione delle fasi del lavoro. Esamineremo anche il Registro del Piano di Manutenzione.
Figura 29:processi di SQL Agent risultanti
Figura 30:Fase di lavoro del pacchetto SSIS