![]() |
![]() | ![]() | ![]() | ![]() |
![]() | |||
Impostare un piano di manutenzione in Management Studio | |||
|
SQL Server nelle sue versioni a pagamento (quindi sulla Express no) mette a disposizione tramite Sql Server Management Studio (SSMS) lo strumento dei piani di manutenzione, che consentono di eseguire operazioni di manutenzione sui database SQL quali, ad esempio, il controllo integrità, l'aggiornamento delle statistiche, la ricostruzione/riorganizzazione degli indici e, eventualmente, i backup. Per i backup si consiglia comunque di effettuare processi di backup distinti, senza far uso dei piani di manutenzione. La procedura sottostante da indicazioni e consigli sui piani di manutenzione. Ma sono solo indicazioni! Le impostazioni potrebbero differire da cliente e cliente, in presenza di personalizzazioni e della versione di sql server in uso. Consigliamo quindi prima di applicare qualsiasi impostazione di interfacciarsi con il DBA del cliente (come anche per i backup dei database). Partiamo con una domanda: come sappiamo bene è fondamentale fare i backup dei database (obbligatorio), ma è altrettanto fondamentale impostare dei piani di manutenzione che eseguono operazioni di controllo integrità, aggiornamento statistiche e ricostruzione/riorganizzazione indici? E' molto più importante di quanto spesso si pensi! La risposta breve è i piani di manutenzione non sono obbligatori come i backup, ma sono comunque fondamentali per garantire performance, stabilità e prevenire corruzioni. Vediamo perché e con che priorità. Quanto sono fondamentali le varie attività di manutenzione? Di seguito una classificazione pratica basata su quanto siano realmente critiche. 1. CheckDB (controllo integrità database) — CRITICO al pari dei backup DBCC CHECKDB è assolutamente essenziale.
Perché è critico?
Best practice: eseguirlo almeno 1 volta a settimana (anche giornaliero se DB piccolo). 2. Aggiornamento statistiche — ESSENZIALE per le performance SQL Server aggiorna automaticamente le statistiche... ma non abbastanza e non sempre accuratamente. Statistiche obsolete ➝ pessimi piani di esecuzione ➝ query lente. Best practice classica:
3. Manutenzione indici — IMPORTANTE, ma meno critica dei primi due Riorganizzazione / ricostruzione indici è importante, ma non è "salvavita". Cosa comporta non farla?
Però:
Best practice moderna:
Quindi quali sono veramente fondamentali? Ordine di importanza reale (mantenuto da Microsoft e dalla community SQL):
Molti DBA fanno troppa manutenzione sugli indici e troppo poca su CheckDB e statistiche. Conclusione Sì, oltre ai backup è davvero fondamentale avere un piano di manutenzione, almeno con: Necessari
Molto consigliati
PIANI DI MANUTENZIONE PROGRAMMATA DALLO STRUMENTO DI AMMINISTRAZIONE DI BUSINESS (busadmintools.exe) Dal tab Backup/Restore di Busadmintools è possibile richiamare, con il pulsante "Piani man. Program." l'accesso agli attuali piani di manutenzione inseriti da Business, per inserirli o eliminarli (non si possono modificare). La funzionalità replica parzialmente la gestione dei piani di manutenzione da parte di SSMS (in quanto non sono presenti tutti i possibili filtri presenti nel Wizard dei Piani di Manutenzione di SSMS), in particolare a:
Una volta connessi all'istanza di Sql Server sarà possibile avere una maschera di selezione delle attività, data\ora\periodicità della stessa, che verrà inserita nei piani di manutenzione dell'Agent di SQL Server sotto la tipologia Script Transact-SQL (T-SQL).
Proviamo quindi ad impostare un piano di manutenzione per effettuare il controllo integrità database da questo strumento come avevamo fato prima da SSMS. Dalla maschera in oggetto premere Nuovo.
Poi impostiamo un nome al piano di manutenzione, selezioniamo di eseguire l'attività di controllo integrità database, i database da elaborare ed impostiamo una pianificazione.
Una volta salvato uscirà il seguente messaggio.
Premuto Ok troveremo nella lista il piano di manutenzione appena impostato.
Piano di manutenzione che troviamo ovviamente anche in SSMS sotto a SQL Agent\Processi.
Se andiamo a visualizzare le proprietà del processo in modifica.
Troveremo il dettaglio del comando T-SQL che ha impostato Business per un controllo completo.
Dettaglio del comando T-SQL impostato dalle attività di manutenzione presenti nel Busadmintools:
NB: le attività di manutenzione impostate dal busadmintools non applicano nessun filtro particolare quindi può andare bene per database 'piccoli', situazioni semplici o per operazioni volutamente complete. Dettaglio per la creazione di un piano di manutenzione da SSMS per effettuare il controllo integrità database Ora vediamo come replicare la stessa configurazione di controllo integrita database effettuata prima tramite busadmintools, tramite i piani di manutenzione di SSMS. Entrare in SQL Server Management Studio e nella cartella Gestione scegliere la voce di menu Creazione guidata piano di manutenzione.
Premere Avanti.
Nella pagina di Selezione delle proprietà del piano indicare un Nome del piano e scegliere Singola pianificazione per l'intero piano.
Quindi si preme su Pianificazione, Cambia per impostare la frequenza del processo di pianificazione. Impostare l'esecuzione in un orario dove non sono presenti altri lavori schedulati o altre attività interattive su Business e dopo il backup completo.
Nella pagina Seleziona attività di manutenzione scegliere la voce come sottoindicato.
Nella pagina Seleziona ordine attività di manutenzione confermare visto che stiamo eseguendo la sola attività di Controlla integrità database.
Sulla pagina Definizione attività controlla integrità database selezionare i database di Business, nell'esempio selezioniamo solo PROVA, in caso se sull'istanza sql sono presenti solo database di Business potremmo anche usare l'opzione Tutti i database utente (esclusi master, model, msdb e tempdb) per coinvolgere nel controllo tutti i database presenti (attenzione però perché su sql potrebbero esserci anche altri database di altri software).
Ed impostare le impostazioni.
Sulla pagina Selezione opzioni report selezionare il flag Scrivi report in un file di testo per conservare in un file di log l'esito del piano di manutenzione del database.
Quindi si preme Fine sulla pagina di riepilogo.
Premere Chiudi.
A questo punto in gestione dovremmo vedere il piano di manutenzione appena creato.
Se facciamo tasto destro e scegliamo modifica.
Troveremo il dettaglio del piano della pianificazione, delle attività e delle impostazioni effettuate che in caso possiamo modificare. In particolare, se poi effettuiamo sempre con il tasto destro modifica sull'attività di controllo integrità database.
Troviamo le configurazioni scelte in precedenza.
Se guardiamo con il pulsante Visualizza T-SQL aggiunge al comando DBCC CHECKDB il parametro WITH NO_INFOMSGS che serve semplicemente a nascondere i messaggi informativi ("informational messages") che non indicano errori. Quindi l'eleborazione non è veramente uguale a quella del busadmintools ma è molto simile.
Altro esempio, se proviamo a mettere un altro flag, quello di 'Solo struttura fisica'.
Se guardiamo nuovamente il pulsante Visualizza T-SQL aggiunge al comando DBCC CHECKDB il parametro WITH PHYSICAL_ONLY.
Una domanda potrebbe essere a questo punto: è giusto mettere questo flag (o altri)? Dipende sempre da cosa si vuole fare. Il parametro PHYSICAL_ONLY di DBCC CHECKDB serve a eseguire un controllo molto più veloce, limitato alla coerenza fisica delle pagine e delle strutture di basso livello del database, evitando tutte le verifiche logiche più lente. Il parametro non controlla:
Quindi non garantisce che i dati siano logicamente corretti, ma solo che non ci sia corruzione fisica. Quindi è impossibile dire se è meglio impostare o meno il parametro WITH PHYSICAL_ONLY, non c'è un'impostazione che va bene in tutte le situazioni, dipende da caso a caso, da cliente a cliente ed anche in base a quello che si vuole fare. Sicuramente se si vuole fare un controllo completo è meglio non metterlo ed eseguire quindi DBCC CHECKDB(N'PROVA'). Facciamo anche notare che l'impostazione di una attività tramite i piani di manutenzione di SQL imposta anche in questo caso un processo sotto il SQL Agent ma il tipo di passaggio non esegue un comando T-SQL ma utilizzano il pacchetto di sql server integration service.
Dettaglio per la creazione di un piano di manutenzione da SSMS per effettuare l'aggiornamento statistiche In questo altro esempio impostiamo tramite piani di manutenzione di SSMS l'attività di aggiornamento statistiche il più possibile simile a quello che viene generato dal busadmintools. Anche in questo caso riportiamo solo una parte delle schermate (quelle che differiscono dalla precedente impostazione del controllo integrità database). Nella pagina di Selezione delle proprietà del piano indicare un Nome del piano e scegliere Singola pianificazione per l'intero piano.
Nella pagina Seleziona attività di manutenzione scegliere la voce come sottoindicato.
Nella pagina Seleziona ordine attività di manutenzione confermare visto che stiamo eseguendo la sola attività di Aggiorna statistiche.
Sulla pagina Definizione attività Aggiorna statistiche selezionare i database di Business, nell'esempio selezioniamo solo PROVA, in caso se sull'istanza sql sono presenti solo database di Business potremmo anche usare l'opzione Tutti i database utente (esclusi master, model, msdb e tempdb) per coinvolgere nel controllo tutti i database presenti (attenzione però perché su sql potrebbero esserci anche altri database di altri software).
Sempre sulla pagina Definizione attività Aggiorna statistiche non modifichiamo in questo caso le altre opzioni presenti.
Anche qui una volta confermato il piano lo troviamo in SSMS per eventuali modifiche.
Dettaglio per la creazione di un piano di manutenzione da SSMS per effettuare la riorganizzazione degli indici In questo altro esempio impostiamo tramite piani di manutenzione di SSMS l'attività di riorganizzazione degli indici, il più possibile simile a quello che viene generato dal busadmintools. In questo caso riportiamo solo la finestra di configurazione definizione dell'attività.
Dettaglio per la creazione di un piano di manutenzione da SSMS per effettuare la ricompilazione degli indici In questo altro esempio impostiamo tramite piani di manutenzione di SSMS l'attività di ricompilazione degli indici, il più possibile simile a quello che viene generato dal busadmintools. In questo caso riportiamo solo la finestra di configurazione definizione dell'attività.
Altro esempio per la creazione di un piano di manutenzione da SSMS per effettuare la riorganizzazione e la ricompilazione degli indici In questo esempio impostiamo tramite piani di manutenzione di SSMS le attività di riorganizzazione e ricompilazione degli indici, in una modalità più mirata, utile magari in contesti di database 'grandi' o di maggiore complessità, senza riorganizzare e ricompilare sempre tutto. Anche qui solo le schermate rilevanti. Nella pagina di Selezione delle proprietà del piano indicare un Nome del piano e scegliere Singola pianificazione per l'intero piano.
Nella pagina Seleziona attività di manutenzione scegliere la voce come sottoindicato.
Nella pagina Seleziona ordine attività di manutenzione confermare le voci come sottoindicate (abbiamo messo prima ricompila indice a poi riorganizza indice).
Sulla pagina Definizione attività Ricompila indice selezionare i database di Business, nell'esempio selezioniamo solo PROVA, in caso se sull'istanza sql sono presenti solo database di Business potremmo anche usare l'opzione Tutti i database utente (esclusi master, model, msdb e tempdb) per coinvolgere nel controllo tutti i database presenti (attenzione però perché su sql potrebbero esserci anche altri database di altri software).
Sempre sulla pagina Definizione attività Ricompila indice togliere il flag su "conteggio pagine" e lascia gli altri parametri invariati. Il flag "conteggio pagine" (Page Count) serve a limitare l'operazione agli indici che superano una certa dimensione minima. Di fatto, SQL Server NON esegue riorganizzazione/ricostruzione sugli indici che hanno meno pagine del valore impostato.
Sulla pagina Definizione attività Riorganizza indice selezionare i database di Business, nell'esempio selezioniamo solo PROVA, in caso se sull'istanza sql sono presenti solo database di Business potremmo anche usare l'opzione Tutti i database utente (esclusi master, model, msdb e tempdb) per coinvolgere nel controllo tutti i database presenti (attenzione però perché su sql potrebbero esserci anche altri database di altri software).
Sempre sulla pagina Definizione attività Riorganizza indice togliere il flag su "conteggio pagine" e lascia gli altri parametri invariati. Il flag "conteggio pagine" (Page Count) serve a limitare l'operazione agli indici che superano una certa dimensione minima. Di fatto, SQL Server NON esegue riorganizzazione/ricostruzione sugli indici che hanno meno pagine del valore impostato.
Anche qui una volta confermato il piano lo troviamo in SSMS per eventuali modifiche.
|