Wie exportiere ich die Ausgabe von sp_AskBrent?

11

Wir haben eine Instanz, die die CPU zufällig spitzt. Ich möchte eine Warnung erstellen, die zu über 90% auf der CPU ausgelöst wird und automatisch einen Job aufruft, der ausgeführt wird, sp_AskBrentund mir die Ausgabe per E-Mail sendet. Die Ausgabe ist jedoch weder in der Text- noch in der HTML-Ausgabe unlesbar. Es passt nicht einmal gut in eine Excel-Tabelle. Wie kann ich die Informationen in einem lesbaren Format erhalten?

Mick
quelle
3
Sie können meine Antwort auf eine andere Frage überprüfen , um sie unter PowerShell auszuführen. Es wird ein HTML-Bericht der Daten ausgegeben. Abhängig von der Version von SQL Server können Sie diesen als SQL Agent-Job einrichten (PowerShell-Schritt) und dann PS-Code hinzufügen, um die Datei per E-Mail zu versenden.
@ShawnMelton Ja, ich bin hierher gekommen, um das auch zu posten. Powershell-Ausführung ist ziemlich trivial, um dann Ad-hoc-Formatierungen vorzunehmen.
ConstantineK

Antworten:

13

Lassen Sie die Warnung einen Job ausführen, der EXEC msdb.dbo.sp_send_dbmailden folgenden @queryParameter ausführt:

EXEC dbo.sp_send_dbmail @profile_name = 'mail_profile'
    , @recipients = '[email protected]'
    , @subject = 'some subject'
    , @body = 'the body text goes here'
    , @query = 'EXEC sp_AskBrent;'
    , @attach_query_result_as_file = 1;

Der @attach_query_result_as_file = 1Parameter sendet die Ergebnisse als Anhang im Textformat, der auf jeden Fall lesbar sein sollte. Wenn Sie möchten, können Sie die Ergebnisse mithilfe des @query_result_separatorParameters in ein durch Kommas getrenntes Format exportieren .

Von der MSDN-Seite fürsp_send_dbmail :

In diesem Beispiel wird eine E-Mail-Nachricht an Dan Wilson unter der E-Mail-Adresse [email protected] gesendet. Die Nachricht hat den Betreff Arbeitsauftragsanzahl und führt eine Abfrage aus, die die Anzahl der Arbeitsaufträge mit einem Fälligkeitsdatum weniger als zwei Tage nach dem 30. April 2004 anzeigt. Database Mail hängt das Ergebnis als Textdatei an.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Adventure Works Administrator',
    @recipients = '[email protected]',
    @query = 'SELECT COUNT(*) FROM AdventureWorks2012.Production.WorkOrder
                  WHERE DueDate > ''2004-04-30''
                  AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
    @subject = 'Work Order Count',
    @attach_query_result_as_file = 1 ;

Es gibt viele Optionen für diesen gespeicherten Prozess. Überprüfen Sie die MSDN-Seite und wahrscheinlich erhalten Sie die Ausgabe genau so, wie Sie es möchten.

Max Vernon
quelle