查看SQLServer 代理作业的历史信息
不敢说众所周知,但是大部分人都应该知道SQLServer的代理作业情况都存储在SQLServer5大系统数据库(master/msdb/model/tempdb/resources)中的MSDB中,而由于代理作业的长期运行和种类较多,所以一般可以看到msdb的大小往往比其他库加起来还大。本文主要专注在如何查询作业的运行时间点及运行持续时间上。
作为DBA,周期性检查作业情况是一下非常重要的任务。本文不讲述太深入。只讲述如何查询作业的历史运行情况。并加入一下在联机丛书上没有提及,也就是所谓的未公开的系统函数。
作业执行的历史信息存放在msdb.dbo.sysjobhistory中。但是在这个表里面,日期和时间列的显式方式会有点不常规,这就引出了本文的意图。首先我们来看看表里的数据,这里需要关联一下sysjobs表:
SELECT j.name AS 'JobName' ,
run_date ,
run_time
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
run_date ,
run_time DESC
运行上面的代码,得到以下的结果:
可以看到run_date这列,虽然能看得懂,但是是YYYYMMDD这样的格式,用起来可能有点不方便。而run_time就更加难用了。Run_time中的180002意味着:18:00:02执行。这些不直观的数据对时常需要使用的DBA来说是一种痛苦,当然,可以通过字符串函数来转换成自己喜欢看的格式。但是这里提供一个微软未公开的函数:
MSDB.dbo.agent_datetime(run_date,run_time)
它会返回一个比较常规的日期格式,使得使用和查看的时候都很方便,作为一个未公开的函数,对其的了解不多只需要会用就可以了。可以使用下面的例子:
SELECT j.name AS 'JobName' ,
run_date ,
run_time ,
msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime'
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
RunDateTime DESC
结果转换后,得到下面的结果:
可以看到经过函数格式化之后,数据已经很直观了。特别注意,这个未公开函数是从2005以后才引入,2000是没有的。只能通过字符串处理来获得同样的效果。
现在再来看看另外一列,run_duration,运行持续时间,同样,这列是int类型,也和run_time一样,不直观。
SELECT j.name AS 'JobName' ,
run_date ,
run_time ,
msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,
run_duration
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
RunDateTime DESC
结果如下:
这列两位数代表仅仅是秒,3位数代表秒和分。单纯从这里比较难看出作业的运行时间。对分析不利。比较遗憾的是没有另外的存储过程来转换这列,所以需要自己编写代码,可以用下面的代码来转换:
SELECT j.name AS 'JobName' ,
run_date ,
run_time ,
msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,
run_duration ,
( ( run_duration / 10000 * 3600 + ( run_duration / 100 ) % 100 * 60
+ run_duration % 100 + 31 ) / 60 ) AS 'RunDurationMinutes'
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
RunDateTime DESC
为了方便展示,这里我筛选了持续时间比较长的几个作业。
对于很多ETL的作业,可能会有很多步骤,下面来把这些步骤也带出来,这就要关联另外一个表msdb.dbo.sysjobsteps:
SELECT j.name AS 'JobName' ,
s.step_id AS 'Step' ,
s.step_name AS 'StepName' ,
msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,
( ( run_duration / 10000 * 3600 + ( run_duration / 100 ) % 100 * 60
+ run_duration % 100 + 31 ) / 60 ) AS 'RunDurationMinutes'
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id
INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id
AND s.step_id = h.step_id
AND h.step_id <> 0
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
RunDateTime DESC
通过这个查询,可以检查到具体哪个作业运行时间最长,然后进行检查和优化。对于SQLServer 代理作业还有很多事情要做,由于主题原因,也不可能一篇就全部说完,将在后续文章中说明。
从代理作业中检查性能问题只是查询性能问题及检查数据库运行情况的手段之一,很多数据库管理方面的操作其实往往不是单一的,而是一系列的操作合成的。但是学会一种工具,你就多了一样利器。
查看SQLServer 代理作业的历史信息的更多相关文章
- SSIS实践入门2:批量包的调度和SQLServer代理作业配置
趁着上一篇文章的余温,我们继续研究一下SSIS中多个包如何调度,难道需要一个包一个包的配置调度程序吗?显然不是的,接下来我们就说一说在SSIS应用中如何批量的调度所有的作业,本文只讲述一个基本的逻辑过 ...
- SqlServer代理作业
最近一直在学习SqlServer 作业方面的知识,总结一下. 一:作业存在的库. msdb use msdb Msdb数据库是代理服务数据库,为其报警.任务调度和记录操作员的操作提供存储空间. 二: ...
- (原)SQL Server 代理作业执行持续时间简述
本文目录列表: 1.SQL Server 代理作业概述2.获取代理作业执行时间方法一 3.获取代理作业执行时间方法二4.总结语 5.参考目录清单列表 正文: 1.SQL Server 代理作业概述 ...
- SqlServer中代理作业实现总结
今天弄SqlServer代理作业,弄了半天,把遇到的问题总结出来,主要是抨击一下Sql Server的Express版本.好了,看下面的正题. 首先,需要安装Sql Server Agent服务,该服 ...
- SQLServer复制(二)--事务代理作业
之前的一篇已经介绍了如何配置复制,介绍了发布者.分发者和订阅者以及事务日志运行的简单关系.其中提到了复制代理,我们这篇将详细介绍复制代理,它是什么?在事务复制的步骤中起到了什么作用? 代理和工作 首先 ...
- SqlServer代理执行[分发清除: distribution] 无法删除快照文件
每天偶尔检查数据库作业是否失败,发现有错误 select top 10 job_id,run_date,run_time,run_duration,step_name,message from ms ...
- SQL邮件服务(解决各种疑难杂症)+案例 + 使用SQLserver 邮件系统发送SQL代理作业执行警告
首先你需要知道你要做的几部: 1 每个数据库都有自己的 SERVICE BROKER 很多SQL SERVER内部服务依赖它 2 启动 SERVICE BROKER 需要 1 STOP 你的 SQL ...
- 利用SqlServer的作业定时清除过期数据
有时候我们的数据库中可能会有那么些存放动态数据的表,比如一些每天定时发出的消息通知信息等数据.这些数据我们只需要临时保存,一些老旧的数据需要定时去清除掉,不然时间一长的话单表数据堆积非常严重.导致数据 ...
- SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误
1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...
随机推荐
- Android多线程文件下载器
本应用实现的是输入文件的网络的地址,点击button開始下载,下载过程中有进度条和后面的文本提示进度, 下载过程中button不可点击,防止反复的下载,完成下载后会进行Toast的提示显示, 而且回复 ...
- 设计模式学习一:strategyPattern
#ifndef STRATEGYPATTERN_H_#define STRATEGYPATTERN_H_#include<iostream>using namespace std; //策 ...
- JAVA的class打包成dll
一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . //注意这 ...
- 算法8-4:Kruskal算法
Kruskal算法用于计算一个图的最小生成树.这个算法的过程例如以下: 依照边的权重从小到达进行排序 依次将每条边添加到最小生成树中,除非这条边会造成回路 实现思路 第一个步骤须要对边进行排序,排序方 ...
- 寻找失踪的整数数组(Find the missing integer)
排列a包含N分子,其元素属于[0,N]之间,且不存在反复的元素.请你找出数组中缺失的元素(由于[0,N]之间有N+1个元素.而数组仅仅能存储N个元素.所以必定缺少一个元素).当中对数组的操作满足下列的 ...
- word2vec 中的数学原理具体解释(四)基于 Hierarchical Softmax 的模型
word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas M ...
- JS 数字 、中文、 英文、判断
<pre name="code" class="html">单独的验证: 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中 ...
- wamp在win7下64位系统memcache/memcached安装教程
折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别 在自己的新程序中打算全面应用memcached ...
- SignalR技术
Asp.net SignalR快速入门 一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到Sign ...
- [WPF]入门理解Binding 数据驱动思想
站在一个WinForm程序员的角度去考虑,他会做这样几件事情: 响应slider1的ValueChanged事件,在事件处理函数中让textBox1显示slider1的Value 响应textBox1 ...