Essere un amministratore di database ha molte responsabilità e sapere cosa sta succedendo sul tuo SQL Server è una di queste. Essere proattivi e attenti agli errori è uno dei tratti che rende qualcuno un ottimo DBA. E non sto solo parlando di cose che falliscono, che è ciò di cui la maggior parte delle persone pensa di essere allertata; puoi anche essere avvisato di problemi di prestazioni. All'interno di SQL Server hai la possibilità di creare avvisi di SQL Server Agent (che d'ora in poi chiamerò semplicemente "avvisi") e questo è facilmente realizzabile utilizzando la GUI o T-SQL.
Configurazione degli avvisi di SQL Server Agent
Per utilizzare gli avvisi è necessario che Posta elettronica database e un operatore dell'agente SQL siano configurati. La maggior parte delle istanze SQL in cui mi sono imbattuto dispone già di Posta elettronica database configurata per le notifiche di errore dei processi. Se sono necessarie ulteriori informazioni sull'impostazione di questa funzionalità, visitare l'argomento della documentazione in linea "Configura Posta elettronica database".
Un'attività meno nota è la configurazione dell'operatore. È possibile creare l'operatore utilizzando SSMS o T-SQL. All'interno di SSMS, espandere SQL Server Agent, fare clic con il pulsante destro del mouse su Operatore e scegliere Nuovo operatore. Verrà aperta una nuova finestra di dialogo in cui è possibile assegnare un nome all'operatore e specificare l'indirizzo e-mail da notificare. Preferisco utilizzare un gruppo di distribuzione per le notifiche e-mail. La maggior parte delle aziende ha più di una persona responsabile dell'ambiente SQL e se si specifica un gruppo di distribuzione, l'intero team può essere informato degli avvisi. L'utilizzo dei gruppi di distribuzione rende inoltre molto più semplice aggiungere o rimuovere persone dagli avvisi.
Di seguito è riportato uno screenshot di esempio della finestra di dialogo Nuovo operatore:
Preferisco usare T-SQL così posso assicurarmi che la creazione dell'operatore faccia parte di un modello di build del server. Il codice di esempio per creare l'operatore sopra è il seguente:
EXEC msdb.dbo.sp_add_operator @name = N'SQL_Alerts', @enabled = 1, @email_address = N'[email protected]';
Una volta configurati Database Mail e Operatore, è possibile creare gli avvisi e assegnarli all'Operatore.
Se si utilizza SSMS, è possibile espandere SQL Server Agent e quindi Avvisi. Per impostazione predefinita, non vengono creati avvisi. Se fai clic con il pulsante destro del mouse e scegli Nuovo avviso, otterrai una schermata simile alla figura seguente:
Noterai che in Gravità ci sono 25 codici di gravità. Proprio come sembra, la gravità del livello di errore descrive quanto sia importante l'errore. La gravità 10 è informativa mentre 19-25 sono fatali e vorrai essere avvisato quando si verificano tali errori. Se si verifica un errore di gravità 23, ad esempio, è molto probabile che si sia danneggiato uno dei database. Questi errori irreversibili possono influire sulle prestazioni del tuo server, che a sua volta influiscono sull'esperienza del cliente.
È necessario creare un avviso aggiuntivo per l'errore 825. L'errore 825, come descritto da Paul Randal nel suo post sul blog, è correlato a un'operazione di I/O che SQL Server ha dovuto ripetere ma che alla fine ha esito positivo (mentre gli errori 823 e 824 indicano che un'operazione di tentativo di I/O è stata ripetuta e alla fine non è riuscita). L'errore 825 è fondamentale da sapere perché ti avvisa di problemi di I/O che potrebbero diventare fatali in futuro. Qualsiasi tentativo di nuovo è negativo, non dovresti aspettare fino a quando un'operazione di I/O non viene notificata. Se inizi a ricevere messaggi di errore 825, devi contattare immediatamente i tuoi team di archiviazione e hardware.
È possibile creare ciascuno degli avvisi specificando il nome e selezionando la gravità. Per Errore 825 selezionare Errore e digitare il numero. Come con l'operatore, preferisco usare T-SQL. Se riesco a creare facilmente uno script di un processo, è molto più facile riutilizzarlo e includerlo come parte di una build del server.
Di seguito troverai lo script che ho utilizzato sulla mia workstation per sviluppatori SQL Server 2014. Questo script crea ciascuno degli avvisi e aggiunge una notifica per l'avviso all'operatore SQL_Alerts.
EXEC msdb.dbo.sp_add_alert @name = N'Severity 19 Error', @message_id = 0, @severity = 19, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 19 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 20 Error', @message_id = 0, @severity = 20, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 20 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name=N'Severity 21 Error', @message_id = 0, @severity = 21, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 21 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 22 Error', @message_id = 0, @severity = 22, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 22 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 23 Error', @message_id = 0, @severity = 23, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 23 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 24 Error', @message_id = 0, @severity = 24, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 24 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 25 Error', @message_id = 0, @severity = 25, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 25 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Error 825', @message_id = 825, @severity = 0, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Error 825', @operator_name = N'SQL_Alerts', @notification_method = 1;
Se hai seguito, avresti configurato la posta del database, creato un operatore per inviare un'e-mail a te o a un gruppo di distribuzione in merito a potenziali errori e avvisi di SQL Server Agent configurati per gravità 19 – 25 ed errore 825.
Questo è fantastico. Ogni volta che uno di questi avvisi viene attivato, verrà inviata un'e-mail al tuo team. Oltre agli avvisi di eventi, gli avvisi possono essere configurati per una condizione di prestazioni, come accennato nell'introduzione. Ad esempio, se l'utilizzo della memoria supera una soglia definita, potrebbe essere attivato un avviso. Ti incoraggio a esplorare i vari avvisi sulle prestazioni e a creare quelli da cui la tua organizzazione potrebbe trarre vantaggio. Per trovare gli avvisi sulle condizioni delle prestazioni di SQL Server, nella finestra di dialogo Nuovo avviso fare clic sulla casella a discesa per Tipo. Lì vedrai elencato l'avviso di condizione delle prestazioni di SQL Server. Dopo aver scelto questa opzione, puoi sfogliare i tipi di oggetti su cui puoi configurare un avviso di condizione delle prestazioni.
Sebbene sia stato assegnato un operatore alla risposta all'avviso, è anche possibile configurare l'avviso per eseguire un processo di SQL Agent. Sebbene ciò ti dia una certa flessibilità per avere attività di risposta agli eventi, non offre la possibilità di avere avvisi condizionali facili.
Utilizzo di SQL Sentry per avvisi avanzati
Per avvisi più avanzati, è necessario uno strumento migliore. È qui che SQL Sentry può aiutare. Una delle mie funzionalità di avviso di SQL Sentry preferite è la possibilità di creare condizioni personalizzate per avvisare o agire quando qualcosa è cambiato all'interno dell'ambiente. Ad esempio, se qualcuno ha modificato il valore minimo o massimo della memoria, modificato maxdop o la soglia di costo per il parallelismo, potresti ricevere un avviso o addirittura avviare un processo. Questa funzionalità è stata introdotta in SQL Sentry v8 e Greg Gonzalez (blog | @SQLsensei) ne ha scritto un blog qui:"SQL Sentry v8:Intelligent Alerting Redefined".
Con questa funzione, puoi anche creare condizioni personalizzate per diversi database all'interno di un unico avviso. Se hai tentato di eseguire questa operazione utilizzando gli avvisi di SQL Agent, dovresti creare avvisi diversi per database.
Un'altra grande funzionalità di avviso è la possibilità di creare diversi programmi di avviso. Molte organizzazioni hanno team che sono responsabili durante le diverse parti della giornata. Alcuni potrebbero avere la responsabilità del DBA di produzione durante le ore diurne con un Network Operations Center che copre il turno di notte, quindi una persona di guardia durante i fine settimana. Non sarebbe fantastico poter personalizzare un programma di avviso per avvisare i team competenti durante l'orario di responsabilità?
Puoi creare finestre di avviso (come in una finestra temporale) e collegarle a diversi avvisi o gruppi. Ciò consente l'attivazione di avvisi diversi in orari diversi e la notifica di gruppi diversi in orari diversi. Questo è davvero interessante in quanto consente ai tuoi avvisi di seguire un programma di supporto in modo che le persone corrette vengano avvisate. Scott Fallen descrive in dettaglio questa funzione in un post sul blog, "Avvisi su una pianificazione chiamate con SQL Sentry", guidandoti attraverso la creazione di avvisi per vari team di guardia.
Un'altra funzionalità di avviso di Performance Advisor e Event Manager è la possibilità di configurare altre risposte come l'esecuzione di un processo Windows, la registrazione dell'evento in un database o un registro degli errori, l'invio di una trap SNMP a un altro strumento di monitoraggio come SCOM o persino l'arresto di un processo . Le tue opzioni sono quasi illimitate su ciò che puoi avere predefinito che accada quando si verifica un determinato evento. Gli avvisi di SQL Agent non sono così personalizzabili.
Riepilogo
L'importante conclusione di questo post è che devi assolutamente avvisare per errori e condizioni di prestazione. Se non disponi di uno strumento come SQL Sentry, l'utilizzo di SQL Agent Alerts è comunque un ottimo inizio.
Nei miei prossimi post, mi immergerò in alcuni di questi avvisi che incidono sulle prestazioni e discuterò quali azioni dovresti intraprendere quando si presentano.