Uno dei primi passi da muovere quando un DBA si trova davanti ad un nuovo database, è raccogliere il maggior numero possibile di informazioni sul server, sull’hardware, sul sottosistema di archiviazione, sul sistema operativo e dell’istanza SQL Server.
Quanto sopra permette di valutare con maggiore granularità il sistema nella sua totalità, evitando di tralasciare dettagli rilevanti, anche se apparentemente non sono direttamente connessi al motore database.
Quello che cercherò di esporre in questo articolo ha a che fare con una serie di query che permettono di prendere familiarità con il sistema che abbiamo in gestione e di estrarre informazioni importanti sullo stato di salute del nostro server e di conseguenza del nostro motore database.
Partiamo con l’affermare che da quando le DMV (Dynamic management views) e le DMF (dynamic management functions) sono state introdotte (con SQL Server 2005), si sono da subito dimostrate degli strumenti utilissimi, permettendo ai DBA di raccogliere facilmente informazioni sull’hardware, sull’istanza SQL Server, fino ad arrivare si singoli Database.
Per eseguire DMVs e DMFs sono necessarie le grant di VIEW SERVER STATE. Se si è amministratori di sistema questi permessi sono già disponibili, ma nel caso di utente creato adhoc, in tal caso occore assegnare le grant sopra, se si vuole abilitarlo all’utilizzo delle viste e funzioni dinamiche.
Consiglio di vedere le query che esporrò in questo articolo non come delle query a sé stanti lanciate in un istanza SQL Server: immaginate di dover raccogliere informazioni su cento, duecento o più server o istanze SQL Server. Occorrerà sicuramente utilizzare un sistema centralizzato di raccolta, magari spinto da Packages di Integration Services (SSIS), in coppia ad un sistema di reportistica come Reporting Services (SSRS) oppure Power BI. Ho fatto questa premessa, poiché parte delle informazioni che otterremo da alcune di queste query potranno sembrare scontate, ma se occorre archiviare tale informazioni per molte istanze, la cosa non è poi così scontata. Ecco come la prima query che sto per proporre assume un significato diverso se immaginata in un contesto in cui sono presenti centinaia di istanze SQL Server.
Controlli preliminari
Molto spesso in un contesto di grandi dimensioni non è sempre vero che tutte le versioni di SQL Server sono uguali, anzi è molto probabile che siano presenti versioni diverse di SQL Server; la seguente query (non si tratta di una DMV in questo caso) ci permette di ottenere informazioni sulla versione di SQL Server installata nel server:
L’output indica che ci troviamo di fronte ad una “RTM 2019 Developer Edition a 64 bit” la buil è la 2000 ed è in esecuzione sul sistema operativo Windows 10 Enterprise 10.0.
Conoscere la versione di SQL Server permette di essere edotti anche sulle funzionalità proprie della versione che si sta utilizzando.
Sempre dall’output della query sopra è possibile stabilire anche se la build utilizzata è l’ultima disponibile o no. A tal proposito Microsoft rilascia periodicamente un aggiornamento cumulativo (CU) ed ognuno di questi può comprendere dal 10 ai 40 hotfix per SQL Server; oltre a questo Microsoft rilascia dei Service Pack ed occorre conoscere quali aggiornamenti sono stati già installati, in modo da scaricare ed installare la CU mancante.
Ulteriore informazione e che si tratta di una RTM, acronimo che sta per “Realease to Manufactoring”, ossia la versione successiva alla Release Candidate.
Infine possiamo ricavare anche la data e l’ora di compilazione dell’istanza in questione. Questa informazione ci permette di sapere quanto “vecchia” è la nostra istanza. Aggiornare SQL Server assume particolare importanza, poiché un’istanza non aggiornata (CU, SP, KB) porta con se tutti bug e difetti corretti con gli aggiornamenti rilasciati: ecco quindi che una semplice query, in realtà, ci dice già tanto sullo stato di salute della nostra istanza.
Continuamo con la seguente query:
L’output, tra le altre informazioni, mostra: il numero delle CPU logiche e fisiche, la quantità di memoria installata nel server e l’ultima volta che SQL Server è stato avviato.
Controlli a livello di istanza
Dopo aver raccolto informazioni sul sistema operativo e l’hardware del server, passiamo a quelle query che forniscono informazioni sull’istanza SQL Server.
Servizi SQL Server
Iniziamo a vedere quali servizi SQL Server sono installati nel server:
La query sopra, oltre ai servizi installati, ci dice se essi sono in esecuzione e da quando, l’account utilizzato, se sono in cluster e ed eventualmente su quale nodo sono in esecuzione.
Cluster SQL Server
Ancora sul cluster, la seguente query mostra informazioni di configurazione sul cluster windows (solo se esiste un cluster):
La seguente query completa la precedente con ulteriori informazioni utili del cluster:
Configurazione dell'istanza
Informazioni sulla configurazione dell’istanza si ottengono invece tramite la seguente istruzione:
L’esecuzione della query sopra permette di visualizzare un numero elevato di configurazioni di SQL Server; parte di queste configurazioni possono essere modificate tramite la GUI di SSMS, mentre per altre occorre servirsi della procedura memorizzata di sistema xp_configure.
Per raccogliere informazioni sul listener TCP è possibile utilizzare la query seguente:
l’output mostra quali porte TCP vengono utilizzate dal listener TCP, per T-SQL, Service Broker e il mirroring del database.
Dalla query sopra si possono estrarre informazioni sui protocolli di rete abilitati, sull’eseguibile di SQL Server, sull’agent, eccetera.
Se c’è stato un dump della memoria, possiamo utilizzare la seguente query che ci permette di verificare proprio questa occorrenza:
Ci aspettiamo che il risultato della query sopra sia nullo, ma se dovesse non esserlo, i log di windows ci torneranno utili, confrontando l’ora in cui è avvenuto il dump, per capire l’evento che ha scatenato quanto riscontrato.
Per estrarre invece i nomi e i percorsi dei files dei database è possibile usare:
Tramite la query sopra scopriamo quanti sono grandi i nostri database e quindi a che carico di lavoro potrebbe essere soggetta la nostra istanza, oppure verificare se i file t-log e datafiles si trovano o no su unità diverse o ancora se il tempDB è correttamente allocato su una LUN dedicata o ancora sul tempDB se i datafiles sono alllineati con il numero di core del server.
Nella seconda parte andremo ad esaminare i controlli da eseguire a livello di database.
di Luciano Maugeri, pubblicato il 24 aprile 2026