Databasebeheerder zijn heeft veel verantwoordelijkheden, en weten wat er op uw SQL Server gebeurt, is daar één van. Proactief zijn en alert zijn op fouten is een van de eigenschappen die iemand tot een geweldige DBA maken. En ik heb het niet alleen over dingen die mislukken, wat de meeste mensen denken als ze gewaarschuwd worden; u kunt ook worden gewaarschuwd voor prestatieproblemen. Binnen SQL Server heb je de mogelijkheid om SQL Server Agent Alerts te creëren (die ik vanaf nu gewoon 'alerts' noem), en dit is eenvoudig te doen met behulp van de GUI of T-SQL.
SQL Server Agent-waarschuwingen configureren
Om waarschuwingen te gebruiken, moet u Database Mail en een SQL Agent-operator hebben geconfigureerd. De meeste SQL-instanties die ik ben tegengekomen, hebben Database Mail al geconfigureerd voor meldingen over taakfouten. Als u meer informatie nodig heeft over het instellen van deze functie, gaat u naar het Books Online-onderwerp, "Database-e-mail configureren".
Een minder bekende taak is het configureren van de Operator. U kunt de operator maken met SSMS of T-SQL. Vouw binnen SSMS SQL Server Agent uit, klik met de rechtermuisknop op Operator en kies New Operator. Er wordt een nieuw dialoogvenster geopend waarin u de operator een naam kunt geven en het e-mailadres kunt opgeven dat u wilt melden. Ik gebruik bij voorkeur een distributiegroep voor de e-mailmeldingen. De meeste bedrijven hebben meer dan één persoon die verantwoordelijk is voor de SQL-omgeving en als u een distributiegroep opgeeft, kan het hele team op de hoogte worden gesteld van de waarschuwingen. Het gebruik van distributiegroepen maakt het ook veel gemakkelijker om mensen toe te voegen aan of te verwijderen uit de meldingen.
Hieronder ziet u een voorbeeld van een screenshot van het dialoogvenster Nieuwe operator:
Ik gebruik liever T-SQL, zodat ik ervoor kan zorgen dat het maken van de operator deel uitmaakt van een serverbuildsjabloon. Voorbeeldcode voor het maken van de bovenstaande Operator is als volgt:
EXEC msdb.dbo.sp_add_operator @name = N'SQL_Alerts', @enabled = 1, @email_address = N'[email protected]';
Zodra u Database Mail en de Operator hebt geconfigureerd, kunt u de waarschuwingen maken en deze toewijzen aan de Operator.
Als u SSMS gebruikt, kunt u SQL Server Agent en vervolgens Waarschuwingen uitvouwen. Standaard worden er geen waarschuwingen aangemaakt. Als u met de rechtermuisknop klikt en Nieuwe waarschuwing kiest, krijgt u een scherm dat lijkt op de onderstaande afbeelding:
U zult merken dat er onder Ernst 25 codes voor ernst staan. Zoals het klinkt, beschrijft de ernst van het foutniveau hoe belangrijk de fout is. Severity 10 is informatief, terwijl 19-25 fataal zijn en u op de hoogte wilt worden gehouden wanneer deze fouten zich voordoen. Als er bijvoorbeeld een Ernst 23-fout is opgetreden, is er hoogstwaarschijnlijk sprake van corruptie in een van uw databases. Deze fatale fouten kunnen allemaal van invloed zijn op de prestaties van uw server, wat op zijn beurt de klantervaring beïnvloedt.
Er is een extra waarschuwing die u moet maken voor fout 825. Fout 825, zoals Paul Randal beschrijft in zijn blogpost, houdt verband met een I/O-bewerking die SQL Server opnieuw moest proberen, maar die uiteindelijk slaagt (terwijl fouten 823 en 824 geeft aan dat een I/O-retry-bewerking opnieuw is geprobeerd en uiteindelijk is mislukt). Fout 825 is van cruciaal belang om te weten, omdat het u waarschuwt voor I/O-problemen die in de toekomst fataal kunnen worden. Elke nieuwe poging is slecht, u moet niet wachten tot een I/O-bewerking niet wordt gemeld. Als u Error 825-berichten begint te krijgen, moet u onmiddellijk contact opnemen met uw opslag- en hardwareteams.
U kunt elk van de waarschuwingen maken door de naam op te geven en de ernst te selecteren. Voor Error 825 selecteert u Error en typt u het nummer. Net als bij de Operator gebruik ik het liefst T-SQL. Als ik een proces gemakkelijk kan scripten, is het veel gemakkelijker om het opnieuw te gebruiken en op te nemen als onderdeel van een serverbuild.
Hieronder vindt u het script dat ik heb gebruikt op mijn SQL Server 2014 Developer-werkstation. Dit script maakt elk van de waarschuwingen aan en voegt een melding voor de waarschuwing toe aan de Operator 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;
Als u dit hebt gevolgd, zou u databasemail hebben geconfigureerd, een operator hebben gemaakt om u of een distributiegroep te e-mailen over mogelijke fouten, en SQL Server Agent-waarschuwingen geconfigureerd voor ernst 19 – 25 en fout 825.
Dit is geweldig. Elke keer dat een van die waarschuwingen wordt geactiveerd, wordt er een e-mail naar uw team verzonden. Naast gebeurteniswaarschuwingen kunnen waarschuwingen worden geconfigureerd voor een prestatievoorwaarde, zoals ik in de inleiding al zei. Als het geheugengebruik bijvoorbeeld een gedefinieerde drempel overschrijdt, kan er een waarschuwing worden geactiveerd. Ik moedig u aan om de verschillende prestatiewaarschuwingen te verkennen en de waarschuwingen te maken waarvan uw organisatie kan profiteren. Als u de waarschuwingen voor de prestatievoorwaarde van SQL Server wilt vinden, klikt u in het nieuwe waarschuwingsdialoogvenster op de vervolgkeuzelijst voor Type. Daar ziet u de waarschuwing voor de prestatievoorwaarde van SQL Server vermeld. Als je die optie eenmaal hebt gekozen, kun je bladeren door de typen objecten waarvoor je een prestatievoorwaarde-waarschuwing kunt configureren.
Hoewel we een operator hebben toegewezen aan de waarschuwingsreactie, kunt u de waarschuwing ook configureren om een SQL Agent-taak uit te voeren. Hoewel dit je enige flexibiliteit geeft om een taak voor het beantwoorden van gebeurtenissen te hebben, biedt het niet de mogelijkheid om gemakkelijk voorwaardelijke waarschuwingen te hebben.
SQL Sentry gebruiken voor geavanceerde waarschuwingen
Voor meer geavanceerde waarschuwingen heb je een betere tool nodig. Dit is waar SQL Sentry kan helpen. Een van mijn favoriete waarschuwingsfuncties van SQL Sentry is de mogelijkheid om aangepaste voorwaarden te creëren om te waarschuwen of actie te ondernemen wanneer er iets is veranderd in de omgeving. Als iemand bijvoorbeeld de minimale of maximale geheugenwaarde heeft gewijzigd, maxdop of de kostendrempel voor parallellisme heeft gewijzigd, kunt u een waarschuwing krijgen of zelfs een proces starten. Deze functie is geïntroduceerd in SQL Sentry v8 en Greg Gonzalez (blog | @SQLsensei) heeft er hier over geblogd:"SQL Sentry v8:Intelligent Alerting Redefined."
Met deze functie kunt u binnen één waarschuwing ook aangepaste voorwaarden maken voor verschillende databases. Als u dit probeerde met SQL Agent-waarschuwingen, zou u verschillende waarschuwingen per database moeten maken.
Een andere geweldige waarschuwingsfunctie is de mogelijkheid om verschillende waarschuwingsschema's te maken. Veel organisaties hebben teams die verantwoordelijk zijn voor verschillende dagdelen. Sommigen hebben de productie-DBA's overdag verantwoordelijk met een Network Operations Center voor de nachtploeg en vervolgens een oproepkracht in het weekend. Zou het niet geweldig zijn om een waarschuwingsschema aan te passen om de juiste teams op de hoogte te stellen tijdens hun werkuren?
U kunt waarschuwingsvensters maken (zoals in een tijdvenster) en deze koppelen aan verschillende waarschuwingen of groepen. Hierdoor kunnen verschillende waarschuwingen op verschillende tijdstippen actief zijn en kunnen verschillende groepen op verschillende tijdstippen worden gewaarschuwd. Dit is echt gaaf omdat je waarschuwingen een ondersteuningsschema kunnen volgen, zodat de juiste mensen op de hoogte worden gesteld. Scott Fallen beschrijft deze functie in een blogpost, 'Alerts on a Call Schedule with SQL Sentry', die u begeleidt bij het maken van waarschuwingen voor verschillende oproepteams.
Een andere waarschuwingsfunctie van Performance Advisor en Event Manager is de mogelijkheid om andere reacties te configureren, zoals het uitvoeren van een Windows-proces, het vastleggen van de gebeurtenis in een database of foutenlogboek, het verzenden van een SNMP-trap naar een andere monitoringtool zoals SCOM, of zelfs het beëindigen van een proces . Uw opties zijn bijna onbeperkt met betrekking tot wat u vooraf kunt laten gebeuren wanneer een bepaalde gebeurtenis plaatsvindt. SQL Agent-waarschuwingen zijn niet zo aanpasbaar.
Samenvatting
De belangrijke conclusie van dit bericht is dat je absoluut moet waarschuwen voor fouten en prestatievoorwaarden. Als u geen tool zoals SQL Sentry heeft, is het gebruik van SQL Agent Alerts nog steeds een goed begin.
In mijn volgende paar berichten zal ik dieper ingaan op enkele van deze waarschuwingen die van invloed zijn op prestaties en bespreken welke acties u moet ondernemen wanneer ze zich voordoen.