powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посоветуйте инструмент
7 сообщений из 7, страница 1 из 1
Посоветуйте инструмент
    #40102002
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Хочу визуализировать работу некоторых джобов с разных серверов на одной временной шкале, что-то простых средств гугл не предлагает, наверняка кто-то пользуется.
...
Рейтинг: 0 / 0
Посоветуйте инструмент
    #40102019
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

сразу с нескольких серверов - не видел такого
а по-отдельности, вот на вскидку:
https://www.sqlservercentral.com/articles/visualize-the-timeline-of-your-sql-jobs-using-google-graph-and-email
https://brentec.ca/sql-agent-insight/features/

так же, в свое время нарисовал отчет для ssms, который показывает общую картину джобов по серверу (см картинку)
...
Рейтинг: 0 / 0
Посоветуйте инструмент
    #40102052
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Всем привет. Хочу визуализировать работу некоторых джобов с разных серверов на одной временной шкале, что-то простых средств гугл не предлагает, наверняка кто-то пользуется.

1.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
/*
https://www.sql.ru/forum/1319386/instrument-dlya-analiza-raboty-dzhobov

https://dbatools.io/timeline/
https://dbatools.io/download/



denis_viktorovich	
просмотреть потенциальные пересечения. Понятное дело можно копать историю, но если есть какаято утилита, то было бы проще.


на вскидку:

- Генерация html файла с визуализацией волнения джобов (нужен доступ к Инету)
https://www.sqlservercentral.com/articles/visualize-the-timeline-of-your-sql-jobs-using-google-graph-and-email

- Генерация html файла с визуализацией волнения джобов
https://dbatools.io/timeline/

- SSMS отчет, позволяет листать дни и видеть все выполненные джобы и их пересечения с гранулярностью до минуты; сохранить как .rdl и выполнять в контексте базы msdb (Custom report)
https://github.com/ASamykin/PerformanceReports/blob/master/Report Project1/SQLJobs_Timeline.rdl

*/
...
Рейтинг: 0 / 0
Посоветуйте инструмент
    #40102054
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Всем привет. Хочу визуализировать работу некоторых джобов с разных серверов на одной временной шкале, что-то простых средств гугл не предлагает, наверняка кто-то пользуется.

2. (ссылки не нашел, извиняюсь перед автором)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
/*
sql.ru
*/

declare @tbl table (Id int identity (1, 1), UserName nvarchar(100), DateFrom date, DateTo date);
insert into @tbl
        (UserName, DateFrom, DateTo)
values('Randomuser1', cast('20180101' as date), cast('20180201' as date)), ('Randomuser2', '20180115', '20180605'), ('Randomuser1', '20180606', '20181001');

WITH XMLNAMESPACES (default 'http://www.w3.org/2000/svg')  
select  (select count(id) from @tbl as t) * 30 + 15 as [@height]
    ,   500 as [@width]
    ,   (   select  130 as [@x1]
                ,   130 as [@x2]
                ,   0 as [@y1]
                ,   (select count(id) from @tbl as t) * 30 + 15 as [@y2]
                ,   'stroke:black;stroke-width:1;' as [@style]
            for xml path('line'), type)
    ,   (   select  10 as [@x]
                ,   tbl.Id * 30 as [@y]
                ,   UserName as 'data()'
            from    @tbl as tbl
            for xml path('text'), type)
    ,   (   select  135 + datediff(day, '20180101', DateFrom) as [@x1]
                ,   135 + datediff(day, '20180101', DateTo) as [@x2]
                ,   tbl.Id * 30 - 5 as [@y1]
                ,   tbl.Id * 30 - 5 as [@y2]
                ,   'stroke:black;stroke-width:10;' as [@style]
            from    @tbl as tbl
            for xml path('line'), type)
from    (values (1)) as svg (t)
for xml path('svg'), type




svg выглядит в браузере так:
...
Рейтинг: 0 / 0
Посоветуйте инструмент
    #40102056
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Всем привет. Хочу визуализировать работу некоторых джобов с разных серверов на одной временной шкале, что-то простых средств гугл не предлагает, наверняка кто-то пользуется.

3.
Код: sql
1.
2.
3.
4.
5.
6.
/*
https://www.sqlservercentral.com/articles/visualize-the-timeline-of-your-sql-jobs-using-google-graph-and-email
*/

Visualize the timeline of your SQL jobs using Google graph and email
Theo Ekelmans, 2016-10-28 (first published: 2015-07-28)
...
Рейтинг: 0 / 0
Посоветуйте инструмент
    #40102057
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Всем привет. Хочу визуализировать работу некоторых джобов с разных серверов на одной временной шкале, что-то простых средств гугл не предлагает, наверняка кто-то пользуется.

4.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
/*
https://www.sqlservercentral.com/scripts/sql-job-timeline-graphical
*/

--****************************************************************************************
-- This script returns a (graphical) timeline for all SQL jobs 
--****************************************************************************************
-- Version: 1.0
-- Author:	Theo Ekelmans
-- Email:	theo@ekelmans.com
-- Date:	2013-01-11
--****************************************************************************************

set nocount on 

declare @Minutes table (DT datetime)
declare @JobNames table (JobName varchar(255))
declare @DT datetime 
declare @StartDT datetime 
declare @EndDT datetime 
declare @Resolution int 
declare @RemoveNonactiveJobs int
declare @IgnoreDisabledJobs int

--***************************************************************************************
-- Set variables
--***************************************************************************************
set @StartDT = getdate() - 1 
set @EndDT = getdate()
set @Resolution = 1 -- Enter the Resolution in minutes
set @RemoveNonactiveJobs = 1 
set @IgnoreDisabledJobs = 1

--***************************************************************************************
-- Pre-run cleanup (just in case)
--***************************************************************************************
IF OBJECT_ID('tempdb..#Timeline') IS NOT NULL DROP TABLE #Timeline;
IF OBJECT_ID('tempdb..#JobRuntime') IS NOT NULL DROP TABLE #JobRuntime;
IF OBJECT_ID('tempdb..#Pivot') IS NOT NULL DROP TABLE #Pivot;

--***************************************************************************************
-- Make a Jobname table 
--***************************************************************************************
insert into @JobNames (JobName)
select	replace(name, ' ', '.') --Replace spaces (they are invalid in XML based pivot lower in the code)
from	msdb.dbo.sysjobs
where	enabled = @IgnoreDisabledJobs
--WHERE NAME = '<dbname>'
--WHERE NAME like '%<partial dbname>%'

--***************************************************************************************
-- Genereate a Datetime table between StartDT and EndDT with x minute Resolution
--***************************************************************************************
set @DT = @StartDT

WHILE @DT < @EndDT
	begin
		insert into @Minutes (DT) values(@DT)

		set @DT= dateadd(mi, @Resolution, @DT)
	end

--***************************************************************************************
-- Create a timeline table by crossjoining the Datetime and Jobnames tables
--***************************************************************************************
select DT, JobName, 0 as Active
into #Timeline
from @Minutes cross join @JobNames
 
--***************************************************************************************
-- Create the Job Runtime information table
--***************************************************************************************
select	replace(name, ' ', '.') as name --Replace spaces (they are invalid in XML based pivot lower in the code)
		--,step_id
		--,step_name
		,CONVERT(DATETIME, CONVERT(CHAR(8), run_date, 112) + ' ' + STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(8), run_time), 6), 5, 0, ':'), 3, 0, ':'), 120) as SDT
		,dateadd(	s,
					((run_duration/10000)%100 * 3600) + ((run_duration/100)%100 * 60) + run_duration%100 ,
					CONVERT(DATETIME, CONVERT(CHAR(8), run_date, 112) + ' ' + STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(8), run_time), 6), 5, 0, ':'), 3, 0, ':'), 120) 
				) as EDT
		,CAST(STUFF(STUFF(REPLACE(STR(run_duration, 6), ' ', '0'), 3, 0, ':'), 6, 0, ':') AS time(0)) AS Duration
		,((run_duration/10000)%100 * 3600) + ((run_duration/100)%100 * 60) + run_duration%100 DurationSeconds
into	#JobRuntime
FROM	msdb.dbo.sysjobs job 
			left JOIN msdb.dbo.sysjobhistory his
				ON his.job_id = job.job_id

where	CONVERT(DATETIME, CONVERT(CHAR(8), run_date, 112) + ' ' + STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(8), run_time), 6), 5, 0, ':'), 3, 0, ':'), 120) between @StartDT and @EndDT
and		job.name not in ('Database Mirroring Monitor Job', '<dbname>')
and		step_id = 0 -- step_id = 0 is the entrite job, step_id > 0 is actual step number
--and		((run_duration/10000)%100 * 3600) + ((run_duration/100)%100 * 60) + run_duration%100 > 1  -- Ignore trivial runtimes
order by SDT

--***************************************************************************************
-- Update the Timeline based on the the Job Runtime information table
--***************************************************************************************
update	#Timeline
set		Active = 1
from	#Timeline inner join #JobRuntime 
on		JobName = Name
and		(
			SDT between dt and dateadd(mi, @Resolution - 1, DT)  -- Start point (added for Resolution support)
		or  
			EDT between dt and dateadd(mi, @Resolution, DT) -- End point (added for Resolution support)
		or	
			DT  between SDT and EDT
		)

--***************************************************************************************
-- Delete all jobs from the Timeline that that had no activity
--***************************************************************************************
if @RemoveNonactiveJobs = 1 
	delete 
	from	#Timeline
	where	JobName in	(	select	Jobname 
							from	#Timeline
							group by Jobname
							having	sum(active) = 0 )

--***************************************************************************************
-- Pivot the Timeline table
--***************************************************************************************
DECLARE @Minutes2 AS TABLE(col2set varchar(250) NOT NULL PRIMARY KEY)
DECLARE @cols AS nvarchar(MAX)
create table #Pivot (col1 varchar(250) null, col2 varchar(250) null, col3 int null)
-- col1 = row, col2 = column, col3 = data

insert	into #Pivot
select	convert(varchar(250), DT, 120), JobName, Active 
from	#Timeline 

-- Make a table with all unique col2 values 
INSERT INTO @Minutes2 
SELECT DISTINCT col2 
FROM #Pivot

SELECT  @cols = REPLACE(  -- Replace the space in the XML path by a comma
						  -- ([c1] [c2] [c3] [c4]) ->  ([c1],[c2],[c3],[c4])
        ( 
			-- Build the IN clause of the PIVOT by concactenating ([c1] [c2] [c3] [c4])
            SELECT	quotename(col2set) AS [data()] 
            FROM	@Minutes2
            ORDER BY col2set 
            FOR XML PATH ('') 
        ), ' ', ',') 

-- Build the pivot statement as a dyanamic sql statement
DECLARE @sql AS nvarchar(MAX)
SET @sql = N'	
				SELECT col1 as DT,' + @cols + N' 
				FROM (SELECT col1, col2, col3 FROM #Pivot) AS D
				PIVOT(MAX(col3) FOR col2 IN(' + @cols + N')) AS P
				order by col1'

--***************************************************************************************
-- Output the Timeline table
--***************************************************************************************
EXEC sp_executesql @sql

--***************************************************************************************
-- Cleanup
--***************************************************************************************
IF OBJECT_ID('tempdb..#Timeline') IS NOT NULL DROP TABLE #Timeline;
IF OBJECT_ID('tempdb..#JobRuntime') IS NOT NULL DROP TABLE #JobRuntime;
IF OBJECT_ID('tempdb..#Pivot') IS NOT NULL DROP TABLE #Pivot;


...
Рейтинг: 0 / 0
Посоветуйте инструмент
    #40102059
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Всем привет. Хочу визуализировать работу некоторых джобов с разных серверов на одной временной шкале, что-то простых средств гугл не предлагает, наверняка кто-то пользуется.

5.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
/*
https://www.sqlservercentral.com/scripts/job-history-with-timeline
*/
SET DATEFORMAT dmy
SELECT 
 convert(varchar(10),his.server) as Server,
 convert(varchar(30),job.name) AS job_name, 
 CASE his.run_status
 WHEN 0 THEN 'Failed'
 WHEN 1 THEN 'Succeeded'
 ELSE '???'
 END as run_status,
 convert(varchar(4),run_duration/10000) + ':' + convert(varchar(4),run_duration/100%100) + ':' + convert(varchar(4),run_duration%100) as run_duration,
 convert(datetime, convert(varchar(10),run_date%100) + '/' + convert(varchar(10),run_date/100%100) + '/' + convert(varchar(10),run_date/10000) + ' ' + convert(varchar(4),run_time/10000) + ':' + convert(varchar(4),run_time/100%100) + ':' + convert(varchar(4),run_time%100)) as start_date,
 datediff(mi, getdate()-1, convert(datetime, convert(varchar(10),run_date%100) + '/' + convert(varchar(10),run_date/100%100) + '/' + convert(varchar(10),run_date/10000) + ' ' + convert(varchar(4),run_time/10000) + ':' + convert(varchar(4),run_time/100%100) + ':' + convert(varchar(4),run_time%100))) as LeadingMinutes,
 isnull(nullif(convert(int,(run_duration/10000 * 60) + (run_duration/100%100) + (ceiling(run_duration%100/60.0))),0),1) as DurationMinutes,
 REPLICATE(' ', datediff(mi, getdate()-1, convert(datetime, convert(varchar(10),run_date%100) + '/' + convert(varchar(10),run_date/100%100) + '/' + convert(varchar(10),run_date/10000) + ' ' + convert(varchar(4),run_time/10000) + ':' + convert(varchar(4),run_time/100%100) + ':' + convert(varchar(4),run_time%100)))) + REPLICATE('x', isnull(nullif(convert(int,(run_duration/10000 * 60) + (run_duration/100%100) + (ceiling(run_duration%100/60.0))),0),1)) as DurationTimeline,
 his.message
FROM
 msdb.dbo.sysjobhistory his
 INNER JOIN msdb.dbo.sysjobs job ON his.job_id = job.job_id
WHERE
 convert(datetime, convert(varchar(10),run_date%100) + '/' + convert(varchar(10),run_date/100%100) + '/' + convert(varchar(10),run_date/10000) + ' ' + convert(varchar(4),run_time/10000) + ':' + convert(varchar(4),run_time/100%100) + ':' + convert(varchar(4),run_time%100)) between getdate()-1 and getdate()
 and step_id = 0
ORDER BY
 his.server,
 his.run_date,
 his.run_time,
 job.nam
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посоветуйте инструмент
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]