I controlli di SQL Catcher: avvisi e notifiche importanti

Datamaze
03.06.21 11:06 AM Comment(s)

Avvisi e notifiche importanti

Questo articolo di approfondimento su SQL Catcher analizza in dettaglio i controlli relativi ad avvisi e notifiche importanti.


Si tratta di una categoria piuttosto generica che racchiude tutta una serie di controlli che non possono essere catalogati in una categoria specifica, ma che rappresentano comunque delle informazioni estremamente utili e che volevamo assolutamente comunicare all’utente.


Vediamo nel dettaglio i vari controlli eseguiti.

Controllo ultimo riavvio dell’istanza SQL Server

Avvisiamo l’utente se ci risulta un riavvio dell’istanza nelle ultime 24 ore. Chiaramente questo evento non rappresenta un problema se il riavvio dell’istanza è motivato (sono stati fatti degli update o dei cambi di configurazione che necessitavano di un riavvio per essere effettivi, una manutenzione programmata, eccetera). 


Tuttavia ci capita spesso di vedere utenti che quando SQL Server ha dei problemi di performance o altre motivazioni cercano di risolvere il problema con il classico riavvio dell’istanza. Questa non è una buona pratica in quanto un riavvio dell’istanza porta con se tutta una serie di conseguenze: lo svuotamento del Buffer Pool dove SQL Server registra tutte le pagine dati che sono state lette da disco, uno svuotamento del Plane Cache dove vengono registrati i piani di esecuzione delle query che SLQ Server utilizza per rendere più veloci le esecuzioni delle query stesse (obbligando SQL Server per ogni nuova esecuzione di query dopo il riavvio di andare a riscrivere fisicamente il piano di esecuzione nella cache), eccetera.


Controllo spazio su disco

Per tutti i dischi su cui sono salvati i file dei database verifichiamo lo spazio libero rimasto. Avvisiamo se lo spazio libero su disco è inferiore del 20% dello spazio totale (prima soglia di avviso) e quando è inferiore del 10% (seconda soglia di avviso).


Controllo tempi di latenza dei dischi

Per tutti i dischi su cui sono salvati i file dei database verifichiamo i tempi di latenza in scrittura e in lettura. Avvisiamo se tali tempi sono superiori a 40ns, soglia oltre la quale vale la pena tenere monitorato la situazione per eventuali problemi di performance.


Controllo stato dei database

Con questo controllo riportiamo il numero di eventuali database che hanno cambiato stato (online/offline) rispetto al controllo precedente. Nella sezione database, di conseguenza, si vedrà il nome dei database che hanno cambiato stato.


Controllo stato del servizio SQL Agent

Il servizio SQL Agent non è disponibile nella versione Express di SQL Server (oltre ad altre limitazioni che la versione Express porta con sé). Essendo il servizio SQL Agent un servizio fondamentale, avvisiamo l’utente se vediamo che tale servizio è disabilitato. Può infatti succedere che, in seguito a qualche riavvio o aggiornamento dell’istanza o a qualche operazione accidentale (soprattutto se SQL Server Agent è impostato con riavvio manuale), il servizio rimanga accidentalmente spento compromettendo l’esecuzione di tutte le attività schedulate in background.


Controllo log di SQL Server

Al momento avvisiamo se nel log di SQL Server si evidenziano dei login all’istanza falliti oppure se il database tempdb sta assumendo dimensioni anomale. Nel caso in cui il file di log sia piuttosto corposo consigliamo al cliente di fare delle verifiche manuali sul file di log stesso per ispezionare eventuali errori importanti.


Controllo cambi di configurazione a livello di istanza

Avvisiamo l’utente se sono avvenute delle modifiche a livello di istanza rispetto al controllo precedente. In particolare, segnaliamo variazioni inerenti i seguenti parametri di configurazione.

Backup compression

Se è attiva o meno la compressione dei file di backup. Poiché le dimensioni di un backup compresso sono minori di quelle di un backup non compresso degli stessi dati, la compressione di un backup richiede una minore quantità di I/O del dispositivo e pertanto la velocità del backup aumenta in genere in modo significativo.

Collation

Rappresenta un insieme di regole che determinano il modo in cui i dati vengono ordinati e comparati dal DBMS. I caratteri all'interno di un database vengono ordinati utilizzando regole che definiscono la loro corretta sequenza con opzioni per specificare, ad esempio, la differenziazione tra maiuscole e minuscole, tra i diversi accenti e tra le diverse dimensioni (in termini di byte).

Cost Threshold For Parallelism

Con l'opzione cost threshold for parallelism è possibile specificare la soglia oltre la quale in SQL Server vengono creati ed eseguiti piani paralleli per le query. In SQL Server viene creato ed eseguito un piano parallelo per una query solo quando il costo stimato per l'esecuzione di un piano seriale per la stessa query è più elevato del valore impostato in cost threshold for parallelism. Si tratta del costo stimato per l'esecuzione del piano seriale in una configurazione hardware specifica e non è riferito a una determinata unità di tempo. L'opzione cost threshold for parallelism può essere impostata su qualsiasi valore compreso tra 0 e 32767. Il valore di default è 5.

Cambio di servizi in esecuzione

Evidenziamo se vi è qualche variazione sullo stato dei servizi in esecuzione quali SQL Agent, SSIS, SSAS, SSRS, FullText Service, Browser Service.

Instant File Initialization

Per impostazione predefinita, i file di dati e di log vengono inizializzati per sovrascrivere eventuali dati esistenti rimasti nel disco in seguito all'eliminazione precedente di altri file. I file di dati e di log vengono prima di tutto inizializzati azzerando i file (riempiendoli con zeri) quando si eseguono operazioni tipo creazione di un database, aggiunta di dati o file di log ad un database esistente, etc etc. In SQL Server l'inizializzazione immediata dei file consente un'esecuzione più rapida delle operazioni  indicate in precedenza, poiché recupera lo spazio su disco usato senza riempire lo spazio con zeri. Il contenuto del disco viene invece sovrascritto via via che nuovi dati vengono scritti nei file. Per i file di log non è possibile eseguire l'inizializzazione immediata.

Lock Pages in Memory

Tale parametro, se attivo, preserva la cache dei piani di esecuzione di SQL Server dall’essere svuotata secondo le regole del sistema operativo per liberare memoria in caso di necessità.

Max Degree of Parallelism

Quando un'istanza di SQL Server viene eseguita in un computer con più microprocessori o CPU, viene automaticamente rilevato il grado di parallelismo, ovvero il numero di processori usati per eseguire una singola istruzione per l'esecuzione di ogni piano parallelo. È possibile utilizzare l'opzione max degree of parallelism per impostare il numero di processori da utilizzare nell'esecuzione di piani paralleli. Se impostato a 1 viene eliminata la possibilità di generare piani di esecuzione paralleli.

Maximun connections

Rappresenta il numero massimo di connessioni simultanee che l’istanza può accettare.

Max Server Memory

Rappresenta la memoria massima che si è deciso di riservare a SQL Server.

Network protocols

Rappresenta lo stato dei vari protocolli di rete disponibili in SQL Server: TCP/IP, Shared Memory, Named Pipes, VIA.

Optimized for Ad Hoc Workloads

Tale opzione consente di migliorare l'efficienza della cache dei piani per carichi di lavoro che contengono molti batch ad hoc che vengono usati una sola volta. Quando questa opzione viene impostata su 1, alla prima compilazione di un batch, SQL Server archivia un piccolo pezzo del piano compilato nella cache dei piani, anziché il piano compilato completo. In questo modo si consuma meno memoria evitando che la cache dei piani si riempia con piani compilati che non vengono riutilizzati. Solo alla prossima esecuzione di una stessa query viene scritto sulla cache un piano compilato completo.

Priority Boost

Tale impostazione se attiva forza l’esecuzione del processo SQL Server in modalità “HIGH_PRIORITY_CLASS” quando generalmente i processi su Windows vengono eseguiti in modalità “NORMAL_EXECUTION_CONTEXT”. 

Remote DAC

Tale impostazione (Dedicated Admin Connection) può essere utile nelle situazioni di emergenza. Permette di collegarsi all'istanza SQL Server e di eseguire alcune query di base in caso di problemi. Se tale opzione è attiva, SQL Server riserva un thread specifico per tale connessione ed esecuzione delle relative queries.

Nr files per TempDB

Rappresenta il numero di file che compongono il tempdb. 

SQL Alert Corruption

Valore booleano che esplicita se sono attivi gli alerts in caso di errori critici di corruzione dei dati (numerazione da 823, 824, 825, etc).

SQL Alert Severity

Valore booleano che esplicita se sono attivi gli alerts in caso di errori gravi (numerazione da 19 a 25).

Nuova versione SQL Server installata o eventuali aggiornamenti eseguiti

Viene segnalato se è stata installata una nuova versione oppure un update rispetto al controllo precedente.


Controllo presenza aggiornamenti disponibili

Ad ogni controllo che andiamo ad effettuare, avvisiamo l’utente della presenza di aggiornamenti relativi alla versione SQL Server in utilizzo. In particolare segnaliamo la presenza di nuovi Cumulative Updates, Service Pack o Security Update importanti.


Controllo spazio totale su disco occupato dai database

Riportiamo, ad ogni controllo, lo spazio su disco occupato dalla totalità dei database presenti ed evidenziamo la variazione percentuale di spazio occupato rispetto al controllo precedente.






di Matteo Dal Bianco, pubblicato il 3 giugno 2021