Jakie jest dobre narzędzie do wizualizacji zadań agenta SQL? [Zamknięte]


14

Uważam, że wbudowane narzędzia MS SQL Studio do zarządzania zadaniami agentów są trochę frustrujące. Jakie narzędzia okazały się pomocne?

Poza tym w takim narzędziu chciałbym zobaczyć trzy rzeczy:

  • Graficzne podsumowanie zadań, które uruchomiono, na jak długo i czy udało się.
  • Bieżący widok stanu, taki jak Monitor aktywności zadania, ale odświeżony w czasie prawie rzeczywistym.
  • Wygodniejszy interfejs do powielania lub modyfikowania zadań (np. Porównaj dwa kroki zadania bez blokowania przez modalne okna dialogowe).

Prawdopodobnie byłoby łatwo napisać małą aplikację, aby sobie z tym poradzić, ale ktoś z pewnością już to zrobił i zrobił to lepiej.

Jest to oczywiście subiektywne pytanie, więc jeśli jakiś mod wędruje obok, możesz go zmienić w CW.

Odpowiedzi:


13

Czy trochę googlowania w okolicy i oto niektóre oprogramowanie, które może Cię zainteresować:

  1. Menedżer zadań SQL https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. Zapytanie Aktualnie uruchomione zadania agenta SQL Server http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

Jeśli ktoś ma więcej linków do dodania, śmiało!


W przypadku punktu 3 zapytanie dotyczące łącza i uwagi znajdują się tutaj -

Dzisiaj poszedłem na poszukiwanie sposobu, aby wyświetlić listę wszystkich aktualnie uruchomionych zadań agenta SQL Server. Jak co drugi quest, ten również zaczął się od Google. :)

W ciągu 2 minut znalazłem ten świetny post Brenta Ozara na SQLServerPedia. Dlaczego ten post jest taki świetny? Jest tak świetny, ponieważ Brent doszedł do wniosku, że jeśli zapytasz tylko tabele sysjobs i sysjobhistory, nie uzyskasz dokładnego aktualnego statusu pracy. Tj. W tabeli sysjobhistory masz jednak kolumnę run_status (chociaż zgodnie z BOL możliwe wartości dla tej kolumny to „Status wykonania zadania: 0 = nieudany, 1 = zakończony powodzeniem, 2 = ponów próbę, 3 = anulowano, 4 = W toku ”) w rzeczywistości wartość nigdy nie będzie wynosić 4 (W toku). W rzeczywistości w tabeli sysjobhistory przechowywane są dane historyczne każdego wykonanego kroku zadania, co oznacza, że ​​status kroku jest aktualizowany dopiero po wykonaniu następnego kroku. Innymi słowy, tabela NIE jest aktualizowana w czasie rzeczywistym ani co drugą sekundę.

Brent zorientował się, że istnieje nieudokumentowana procedura przechowywana sys.xp_sqlagent_enum_jobs, która jest częścią sp_help_job, która może nadać bieżący status wykonania zadania agenta.

Mimo że znalazłem sposób na uzyskanie aktualnie uruchomionych zadań, nie byłem zadowolony z tego skryptu, ponieważ działa on tylko na SQL 2005/2008.

Co powinienem zrobić, jeśli mam instancję SQL 2000 i jestem bardzo ciekawy aktualnie uruchomionych zadań?

Przy odrobinie pomocy Tima Chapmana (mistrza www.SQLServerNation.com) wymyśliłem, jak to zrobić. DZIĘKUJĘ, Tim!

Oto ostatni skrypt, który będzie działał na SQL 2000, 2005 i 2008, i który dostarczy Ci aktualnie uruchomione zadania agenta SQL Server. (Jak widać, różnica w skrypcie Brenta jest bardzo niewielka: zamiast „sys.xp_sqlagent_enum_jobs” Używam „master.dbo.xp_sqlagent_enum_jobs” i ograniczam zestaw wyników, aby uzyskać tylko aktualnie uruchomione zadania, używając „where x . bieganie = 1 ″).

Proste jak to jest. Cieszyć się.

IF EXISTS (SELECT *
FROM    tempdb.dbo.sysobjects
WHERE   id = OBJECT_ID(N'[tempdb].[dbo].[Temp1]')
)
DROP TABLE [tempdb].[dbo].[Temp1]
GO
CREATE TABLE [tempdb].[dbo].[Temp1]
(
job_id uniqueidentifier NOT NULL,
last_run_date nvarchar (20) NOT NULL,
last_run_time nvarchar (20) NOT NULL,
next_run_date nvarchar (20) NOT NULL,
next_run_time nvarchar (20) NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id sysname
COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
DECLARE @job_owner   sysname
DECLARE @is_sysadmin   INT
SET @is_sysadmin   = isnull (is_srvrolemember ('sysadmin'), 0)
SET @job_owner   = suser_sname ()
INSERT INTO [tempdb].[dbo].[Temp1]

--EXECUTE sys.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
UPDATE [tempdb].[dbo].[Temp1]
SET last_run_time    = right ('000000' + last_run_time, 6),
next_run_time    = right ('000000' + next_run_time, 6);
-----
SELECT j.name AS JobName,
j.enabled AS Enabled,
CASE x.running
WHEN 1
THEN
'Running'
ELSE
CASE h.run_status
WHEN 2 THEN 'Inactive'
WHEN 4 THEN 'Inactive'
ELSE 'Completed'
END
END
AS CurrentStatus,
coalesce (x.current_step, 0) AS CurrentStepNbr,
CASE
WHEN x.last_run_date > 0
THEN
convert (datetime,
substring (x.last_run_date, 1, 4)
+ '-'
+ substring (x.last_run_date, 5, 2)
+ '-'
+ substring (x.last_run_date, 7, 2)
+ ' '
+ substring (x.last_run_time, 1, 2)
+ ':'
+ substring (x.last_run_time, 3, 2)
+ ':'
+ substring (x.last_run_time, 5, 2)
+ '.000',
121
)
ELSE
NULL
END
AS LastRunTime,
CASE h.run_status
WHEN 0 THEN 'Fail'
WHEN 1 THEN 'Success'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Cancel'
WHEN 4 THEN 'In progress'
END
AS LastRunOutcome,
CASE
WHEN h.run_duration > 0
THEN
(h.run_duration / 1000000) * (3600 * 24)
+ (h.run_duration / 10000 % 100) * 3600
+ (h.run_duration / 100 % 100) * 60
+ (h.run_duration % 100)
ELSE
NULL
END
AS LastRunDuration
FROM          [tempdb].[dbo].[Temp1] x
LEFT JOIN
msdb.dbo.sysjobs j
ON x.job_id = j.job_id
LEFT OUTER JOIN
msdb.dbo.syscategories c
ON j.category_id = c.category_id
LEFT OUTER JOIN
msdb.dbo.sysjobhistory h
ON     x.job_id = h.job_id
AND x.last_run_date = h.run_date
AND x.last_run_time = h.run_time
AND h.step_id = 0
where x.running = 1

Próbowałem SQLjobvisa; pozwala mi trochę wizualizować harmonogram, ale tak naprawdę nie jest to nic lepszego niż to, co mógłbym zrobić dla siebie w ciągu godziny. Ustawiłbym oś czasu pionowo, aby użytkownicy mogli łatwo przewijać dni.
Jon of All Trades

3

Wiem, że to starszy post i osobiście miałem ten sam problem. Zarządzanie wieloma zadaniami agenta SQL w wielu instancjach, dlatego zdecydowałem się utworzyć SQL Agent Insight , który można znaleźć tutaj> http://brentec.ca . Jest to produkt ewoluujący, który wkrótce wyjdzie z wersji beta i jest stale aktualizowany, a sugestie są mile widziane. Jest to projekt, nad którym pracuję w czasie wolnym, kiedy się konsultuję, a także mam pełny etat, ale jeśli sugestie są tego warte, zostaną umieszczone w leju na przyszłość.

Obecnie jest to tylko narzędzie do monitorowania agenta SQL, z pewnymi możliwościami skryptowymi. Obecnie siedzi w wersji 0.11 z 2-3 aktualizacjami rocznie i ma dane kontaktowe w celu uzyskania pomocy. Tak, w tej chwili nie ma pomocy online, ale ponieważ jest to produkt przeznaczony tylko do odczytu, monitorowanej instancji SQL nie można wyrządzić żadnych szkód.


2

Czy próbowałeś funkcji raportów?

Kliknij prawym przyciskiem myszy SQL Agent => Raporty => standardowe raporty


Nie zrobiłem tego, ale nie są zbyt pomocne. Są dwa i pokazują tylko liczbę wykonań oraz średni czas działania.
Jon of All Trades

Dla jasności nie wykluczam raportów SQL Studio, jeśli ktoś ma przydatny raport, którym chciałby się podzielić.
Jon of All Trades


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.