Sea*_*ins 7 sql-server t-sql jobs
以下是我在网上找到的一个脚本,其中包含我想要的结果集中的大部分元素。唯一缺少的是我如何获得确定时间段内运行时间的平均值,例如一周、10 天、23 天、一个月等。
我已经进行了一些搜索,但是我尝试的方法以某种方式失败了。此外,我的 TSQL 很弱,但我正在阅读 Itzik Ben-gan 的出版物来改变这个问题。我真的很感激任何人都可以提供的任何帮助。
select job_name, run_datetime, run_duration
from
(
select job_name, run_datetime,
SUBSTRING(run_duration, 1, 2) + ':' + SUBSTRING(run_duration, 3, 2) + ':' +
SUBSTRING(run_duration, 5, 2) AS run_duration
from
(
select DISTINCT
j.name as job_name,
run_datetime = CONVERT(DATETIME, RTRIM(run_date)) +
(run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4,
run_duration = RIGHT('000000' + CONVERT(varchar(6), run_duration), 6)
from msdb..sysjobhistory h
inner join msdb..sysjobs j
on h.job_id = j.job_id
) t
) t
order by job_name, run_datetime
Run Code Online (Sandbox Code Playgroud)
更新以满足新的要求。请注意,您可能很想使用CONVERT(TIME
,但要抵制 - 这很脆弱,以防任何作业运行时间超过 24 小时。
SELECT
job_name = name,
avg_sec = rd,
avg_mmss = CONVERT(VARCHAR(11),rd / 60) + ':' + RIGHT('0' + CONVERT(VARCHAR(11),rd % 60), 2)
FROM
(
SELECT
j.name,
rd = AVG(DATEDIFF(SECOND, 0, STUFF(STUFF(RIGHT('000000'
+ CONVERT(VARCHAR(6),run_duration),6),5,0,':'),3,0,':')))
FROM msdb.dbo.sysjobhistory AS h
INNER JOIN msdb.dbo.sysjobs AS j
ON h.job_id = j.job_id
WHERE h.step_id = 0
GROUP BY j.name
) AS t
ORDER BY job_name;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9692 次 |
最近记录: |