Was ist der beste Weg, um lang laufende Abfragen in SQL Server zu überwachen?

10

Ich muss einige lang laufende Abfragen (Neuerstellen von Indizes, Aktualisieren großer Datenmengen) für meine Datenbank ausführen. Gibt es eine Alternative zum Ausführen der Abfrage in SQL Server Management Studio und zum stündlichen Überprüfen? Ich möchte per E-Mail oder Nachricht eine Nachricht erhalten, wenn dies erledigt ist, kenne aber nicht das beste Tool dafür.

Michael Hedgpeth
quelle

Antworten:

4

Folgender Gaius-Beitrag: Sie können ein .SQL-Skript erstellen, das mit db vor dem Skript das tut, was Sie benötigen -> einen SQL Agent-Job vom Typ Betriebssystem erstellen, der das Skript aufruft:

sqlcmd -E -S SERVERNAME -i "c: \ YOURSCRIPT.sql" -o "C: \ YOURSCRIPT_LOG.log"

Fügen Sie einen neuen Schritt hinzu und verwenden Sie die Prozedur msdb.dbo.sp_send_dbmail , um E- Mails zu senden. Diese Funktion kann so angepasst werden, dass in der E-Mail eine bestimmte Abfrage aus SQL-Tabellen angezeigt wird, um die Ausführung des Skripts zu bestätigen. Beispiel: dbcc showontig Ihrer Wiederherstellungsindizes.

yrushka
quelle
1

Haben Sie die Möglichkeit, SQL-Jobs zu verwenden? Sie können dort Benachrichtigungen und dergleichen durchführen. Für intermittierende Benachrichtigungen wäre Code in den gespeicherten Prozeduren usw. erforderlich.

jcolebrand
quelle
1

Ja, verwenden Sie einfach xp_sendmail . Sie können genauso einfach eine voreingestellte Nachricht oder die Ergebnisse einer SQL-Anweisung senden. Diese Funktion ist seit SQL Server 6.5 verfügbar, wird jedoch in Denali veraltet sein. Wenn dies ein fester Bestandteil Ihres Vorgangs sein soll, sollten Sie Database Mail verwenden, das viel "unternehmerischer" ist.

Gaius
quelle
1

Ich schreibe immer Nachrichten in eine "EventLog" -Tabelle. Bei der Verarbeitung großer Datenmengen verwalte ich die Daten in Blöcken und schreibe nach jedem Block Statusaktualisierungen in das EventLog.

Wenn ich den Fortschritt des lang laufenden Prozesses überprüfen möchte, frage ich einfach die EventLog-Tabelle ab.

Beispiel für die Ausgabe:

-------------------
- Mein großes Update -
-------------------
Gestartet: 2011-05-03 10:00:00

Zu verarbeitende Datensätze: 1.000.000
Stücke: 200

--- Chunk 1 ---
Versuch, MyTable zu aktualisieren
Datensätze aktualisiert: 5000
Verbleibende Aufzeichnungen: 995.000
Durchsatz: 4210 Datensätze pro Sekunde

--- Chunk 2--
Versuch, MyTable zu aktualisieren
Datensätze aktualisiert: 5000
Verbleibende Aufzeichnungen: 990.000
Durchsatz: 3555 Datensätze pro Sekunde

--- Chunk 3--
etc.

Ich habe auch Spalten in der EventLog-Tabelle, um zu verfolgen, wann die Nachricht geschrieben wurde, welcher Prozess die Nachricht geschrieben hat usw. Es tut mir leid, dass ich diese Informationen nicht in mein Beispiel aufgenommen habe.

Datagod
quelle