Contattaci

Chiamaci o compila il modulo sottostante e ti contatteremo entro 24 ore lavorative.

Informatica

DB Maintenance: The Dark Side of SQL Server

L'importanza di introdurre una corretta e completa manutenzione dei database.

Ogni operazione di manutenzione database ha lo scopo di massimizzare le prestazioni all’interno dell’ambiente e segnalare eventi di malfunzionamento che si possono presentare.

Le operazioni che bisogna sempre configurare per impostare una corretta strategia di Database Maintenance sono: 

  • Verifica integrità del database;
  • Una giusta strategia di backup, che rispetti le politiche interne di RTO e RPO;
  • Aggiornamento delle statistiche; 
  • Manutenzione degli indici.  

Implementazione

Ci sono due modalità principali: 

  • Configurazione dei Mantenance Plan; 
  • Creazione di script ad hoc. 

Indipendente dalla modalità di scelta, per un DBA l’implementazione richiede tempo nella scrittura del codice, nei test e nelle verifiche e ottimizzazioni. 

Per questo possiamo trovare script ad hoc in soluzioni open source, sempre aggiornati e testati dalla community e adatti anche ad ambienti Enterprise. 
Questi script offrono diversi parametri che dovranno essere scelti accuratamente in base al workload sui database, seguendo specifiche linee guida.

Finestra temporale

Il primo step è quello di individuare una finestra temporale nella quale effettuare le operazioni di manutenzione. E' necessario infatti inquadrare la fascia oraria in cui il carico di lavoro del database è più basso in modo da rendere meno impattanti le operazioni di manutenzione.

Questo vale in particolare modo nella versione SQL Server Standard dove questo tipo di attività non si può effettuare “a caldo”.

Backup 

Quando si implementa una strategia di backup le domande che bisogna porsi sono le seguenti: 

  • Quanti dati mi posso permettere di perdere? Quanto tempo posso stare senza operatività?

Questo determina il tuo RPO/RTO*.

*RPO: Recovery Point Objective RTO: Recovery Time Objective

La scelta influenzerà se avere database in modalità simple o full.

Un database in full richiede l’introduzione di backup sui Transaction Log; 

  • Come effettuo i backup? Utilizzerò script a livello di SQL Server o prodotti di terze parti come Veeam Backup & Replication. 

Spesso accade che nonostante venga implementata una corretta strategia di backup, questa non viene affiancata da una verifica sull’integrità dei database. 

Quest’ultimo step è fortemente consigliato per riuscire a intervenire in caso di corruzione dei database ed essere certi di avere backup non corrotti e sempre ripristinabili.

Infine, una corretta strategia di D&R è quella di testare periodicamente dei restore: questo è l’unico metodo per garantire, almeno per i file di backup disponibili, l’assenza di problematiche sulla strategia scelta, verificandone al contempo la procedura.

MANUTENZIONE DATABASE

Manutenzione database: indici e statistiche 

Questo step di manutenzione viene considerato come la soluzione a tutte le problematiche di prestazioni che si verificano all’interno di un database; spesso però non viene configurato correttamente, influenzando sia la durata complessiva della manutenzione degli indici sia la validità di questa operazione.

In particolar modo la ricostruzione di un indice è un’operazione che mette in lock l’intera tabella a cui appartiene, fino al suo termine. Questo significa che non sarà accessibile fino a quando l’indice non verrà ricostruito. 

La versione Enterprise di SQL Server permette di ovviare al lock sulla tabella, pur mantenendo un aumento di carico sulle attività del database ma ha un costo di licenza molto maggiore rispetto a una Standard.

Bisogna tenere in considerazione anche che non sempre questa operazione da risultati ma funziona solo da tampone per altri problemi, come:

  • Ottimizzazione degli Statements; 
  • Indici in realtà non necessari o il cui costo di manutenzione supera l’utilità. 

È molto importante anche ottimizzare la schedulazione di queste attività: la linea guida è quella di non eseguire una manutenzione degli indici giornaliera, ma di schedularla settimanalmente e di eseguire ogni giorno un aggiornamento delle statistiche.  

Perché sono le statistiche che verranno utilizzate dal motore del database per decidere il piano di esecuzione. 

Ogni scelta di strategia di manutenzione varia in base all’ambiente. 

Di seguito possiamo vedere come si comportano le pagine in caso di assenza e presenza di frammentazione. Ricordiamo che l’unità di base per l’archiviazione dei dati in SQL Server è la pagina.

Quanto detto fino adesso ha l’obbiettivo di fornire un’idea di come dovrebbe essere implementata una corretta strategia di manutenzione sulle proprie istanze. 

Autori:

Giada Salvatori

Frenses Cirillo

31 Gennaio 2023