Jaki jest najlepszy sposób monitorowania długo działających zapytań w SQL Server?

10

Muszę uruchomić sporo długich zapytań (przebudowywanie indeksów, aktualizowanie dużych zestawów danych) dla mojej bazy danych. Czy istnieje alternatywa dla uruchamiania zapytania w SQL Server Management Studio i sprawdzania go co około godzinę? Chciałbym otrzymać wiadomość e-mail lub wiadomość po zakończeniu, ale nie znam najlepszego narzędzia do tego.

Michael Hedgpeth
źródło

Odpowiedzi:

4

Zgodnie z postem Gaiusa: Możesz utworzyć skrypt .SQL, który robi to, czego potrzebujesz, używając db przed skryptem -> utwórz zadanie agenta SQL typu System operacyjny, który wywołuje skrypt:

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

Dodaj nowy krok i użyj procedury msdb.dbo.sp_send_dbmail , aby wysłać wiadomość e-mail. Ta funkcja może być dostosowana do wyświetlania w wiadomości e-mail określonego zapytania z tabel SQL w celu potwierdzenia wykonania skryptu ... na przykład dbcc showcontig twoich przebudowanych indeksów.

yrushka
źródło
1

Czy masz opcję korzystania z zadań SQL? Możesz tam robić powiadomienia i tym podobne. Jeśli chodzi o otrzymywanie powiadomień przerywanych, wymagałoby to trochę kodu w ramach procedur przechowywanych itp.

jcolebrand
źródło
1

Tak, po prostu użyj xp_sendmail . Równie łatwo można wysłać wstępnie ustawioną wiadomość lub wyniki instrukcji SQL. Ta funkcja jest dostępna od wersji SQL Server 6.5, jednak w Denali ma być przestarzała - jeśli będzie to trwała część twojej działalności, powinieneś użyć poczty bazy danych, która jest znacznie bardziej „korporacyjna”.

Gajusz
źródło
1

Zawsze piszę komunikaty do tabeli „EventLog”. Podczas przetwarzania dużych ilości danych zarządzam danymi w porcjach i zapisuję aktualizacje statusu do EventLog po każdym fragmencie.

Kiedy chcę sprawdzić postęp długotrwałego procesu, po prostu sprawdzam tabelę EventLog.

Przykład wyniku:

-------------------
- Moja duża aktualizacja -
-------------------
Rozpoczęty: 2011-05-03 10:00:00

Zapisy do przetworzenia: 1 000 000
Kawałki: 200

--- Część 1 ---
Próba aktualizacji MyTable
Zaktualizowano zapisy: 5000
Pozostałe dane: 995,000
Przepustowość: 4210 rekordów na sekundę

--- Część 2--
Próba aktualizacji MyTable
Zaktualizowano zapisy: 5000
Pozostałe rekordy: 990 000
Przepustowość: 3555 rekordów na sekundę

--- Część 3--
itp.

Mam również kolumny w tabeli EventLog, aby śledzić, kiedy wiadomość została napisana, jaki proces napisał wiadomość itp. Przepraszam, że nie uwzględniłem tych informacji w moim przykładzie.

datagod
źródło