使用T-SQL找出执行时间过长的作业

原文:使用T-SQL找出执行时间过长的作业

    有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:

 

SELECT sj.name
   , sja.start_execution_date,DATEDIFF (SECOND ,sja.start_execution_date,GETDATE() ) AS ExecutedMin,ja.AvgRuntimeOnSucceed
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id INNER
join
(
    SELECT job_id,
    AVG
    ((run_duration/10000 * 3600) + ((run_duration%10000)/100*60) + (run_duration%10000)%100)
    +
    NULLIF(0,STDEV
    ((run_duration/10000 * 3600) + ((run_duration%10000)/100*60) + (run_duration%10000)%100)) AS ‘AvgRuntimeOnSucceed‘
     FROM msdb.dbo.sysjobhistory
    WHERE step_id = 0 AND run_status = 1
    GROUP BY job_id) ja 
    ON sj.job_id = ja.job_id
WHERE sja.start_execution_date IS NOT NULL --作业有开始
   AND sja.stop_execution_date IS NULL --作业没结束
   AND sja.start_execution_date>DATEADD(DAY,-2,GETDATE()) --作业2天内开始
  -- AND DATEDIFF (SECOND ,sja.start_execution_date,GETDATE() )>ja.AvgRuntimeOnSucceed *1.5 --作业执行时间比历史平均时间超了50%"

 

    如果作业经常出现问题,可以使用该脚本监控尽早发现问题。

时间: 2024-10-10 09:25:14

使用T-SQL找出执行时间过长的作业的相关文章

在字符串中找出连续最长的数字串 在字符串中找出连续最长的数字串,并把这个串的长度返回

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存.例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9, #include<iostream> using namespace std; int ContinueMax(char *

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2:和bb,个数为2 必须存在重复的字符串才算,只出现一次的不算.可能存在多个相同长度的不同字符串,比如aaabbb. 分析:最直接的想法是利用两个指针循环遍历比较所有可能的子串,记录下所有子串长度,然后找到所有最大连续子串及其个数,时间复杂度为O(n^2).在网上看到一种利用

[华为机试练习题]43.在字符串中找出连续最长的数字串

题目 描述: 请一个在字符串中找出连续最长的数字串,并把这个串的长度返回:如果存在长度相同的连续数字串,返回最后一个连续数字串: 注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串"1234"的长度就小于数字串"1359055",如果没有数字,则返回空字符串("")而不是NULL! 样例输入 abcd12345ed125ss123058789 abcd12345ss54761 样例输出 输出123058789,函数返回值9 输出547

随意输入N个英文字符,找出其中最长连续的排列。

int out_max_length_crease_str(const char *p, std::vector<std::string> &vct){ vct.clear(); int nlen = strlen(p); if (nlen == 0){ return 0; } if (nlen == 1){ vct.push_back(p); return 1; } char *buf = new char(nlen); memset(buf, 0, nlen); char firs

字符串中找出连续最长的数字串(正则表达式)

题目描述 读入一个字符串str,输出字符串str中的连续最长的数字串 输入描述: 个测试输入包含1个测试用例,一个字符串str,长度不超过255. 输出描述: 在一行内输出str中里连续最长的数字串. 示例1 输入 abcd12345ed125ss123456789 输出 123456789 1 /** 2 * 3 * 4 用正则表达式 替换 非数字 字符 在用 split 分割 得到 字符串数组 5 * @author Dell 6 * 7 */ 8 import java.util.Scan

[华为]在字符串中找出连续最长的数字串

链接:https://www.nowcoder.com/questionTerminal/2c81f88ecd5a4cc395b5308a99afbbec来源:牛客网 样例输出 输出123058789,函数返回值9 输出54761,函数返回值5 接口说明 函数原型: unsignedint Continumax(char** pOutputstr,  char* intputstr) 输入参数:   char* intputstr  输入字符串: 输出参数:   char** pOutputst

在字符串中找出连续最长的数字串

输入描述: 输入一个字符串. 输出描述: 输出字符串中最长的数字字符串和它的长度. 输入例子: abcd12345ed125ss123058789,如果有重复的最大长度的数字串,则一起输出,如1456jk4789,输出14564789,4 输出例子: 123058789,9 思路:先把字符串中的数字串取出来,然后取出长度最大的数字字串并输出,刚开始我使用HashMap的key存储数字字串,value存字串长度,考虑到HashMap存储无序,故改为LInkedHashMap,然后根据Map的val

找出导致Mysql机器IO过高的SQL

近期一次mysql机器io过高导致入库缓慢,这里记录下解决和问题查找的过程. 首先通过top看到wa比较高,wa意思是CPU花在等待IO上的时间占比, 进而通过iostat -x 2看到如下图, rrqm/s:   每秒进行 merge 的读操作数目.即 delta(rmerge)/swrqm/s:  每秒进行 merge 的写操作数目.即 delta(wmerge)/sr/s:           每秒完成的读 I/O 设备次数.即 delta(rio)/sw/s:         每秒完成的

LeetCode:Consecutive Numbers - 找出连续出现的数字

1.题目名称 Consecutive Numbers(找出连续出现的数字) 2.题目地址 https://leetcode.com/problems/consecutive-numbers/ 3.题目内容 写一个SQL,查出表Logs中连续出现至少3次的数字: +----+-----+ | Id | Num | +----+-----+ | 1  |  1  | | 2  |  1  | | 3  |  1  | | 4  |  2  | | 5  |  1  | | 6  |  2  | |