(原)SQL Server 代理作业执行持续时间简述
2017-03-20 21:25
369 查看
本文目录列表:
1、SQL Server 代理作业概述
2、获取代理作业执行时间方法一
3、获取代理作业执行时间方法二
4、总结语
5、参考目录清单列表
正文:
1、SQL Server 代理作业概述
本文不是详细讲解代理作业的,仅仅从代理作业历史表(dbo.sysjobhistory)的角度来学习和研究代理作业的执行时间。执行以下T-SQL代码:
以上T-SQL的执行结果如下图:
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211734580-854370439.png)
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/70a8aaffc9fa4c618c645a48245995f5/clipboard.png)
从以上图中很容易看到字段列run_date、run_time和run_duration的数据格式。结合微软联机帮助文档学习到:run_date字段列值的数据格式为yyyMMdd(该列值表示代理作业开始执行时的日期部分,如上图run_date字段列值为20170316表示该作业开始执行于2017-03-16这个日期点),run_time字段列值的数据格式为hhmmss(该列值表示代理作业开始执行时的时间部分,如上图run_time字段列值为20000表示执行于02:00:00这个时间点),run_duration字段列值的数据格式为hhmmss(这个是持续时间的数据格式,例如上图中的dun_duration为127表示改作业执行从开始到完成共持续了1分27秒)。
通常情况下,我在数据表设计尤其涉及到记录活动发生的日期时间点时更多的使用datetime这个数据类型的字段列。针对run_date和run_time的数据格式可以通过dbo.agent_datetime标量函数来转换为datetime数据类型。执行以下T-SQL代码:
以上T-SQL的执行结果如下图:
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/ffa6e2f4eb3f4d1e9dd1cda6334e3b74/clipboard.png)
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211746643-230670934.png)
那么如何将run_duration字段列值转换为秒、分、小时等?下面继续探究。
2、获取代理作业执行时间方法一
这个方法具体参考了dbo.agent_datetime函数的定义和查看SQLServer 代理作业的历史信息这边博文中提供的方法,具体实现的T-SQL代码如下:
以上T-SQL的执行结果如下图:
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/9e30e226c1914e1b92cb29e76036a472/clipboard.png)
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211756893-1733729539.png)
注意:
这种方法才用了精度设置,默认精度为31秒,也就是说如果作业的执行持续时间超过30秒(包括等于30秒)时会自动增加31秒。
3、获取代理作业执行时间方法二
这个方法依然使用dbo.agent_datetime函数,还会增加dateadd函数和datediff函数。具体实现的T-SQL代码如下:
以上T-SQL的执行结果如下图:
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/8c0a1554de434a778d516e3be3bd0d18/clipboard.png)
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211808174-1662171598.png)
注意:
该方法依然采用了默认精度为31秒。
sql server系统提供的日期函数采用的默认基准日期是1900-01-01,这个可以使用0替代换。
4、总结语
通过研读博友的文章和学习微软联机文档,确实能够学到很多的知识。sql 的路上唯有继续修行,才能了解的更多。
5、参考目录清单列表
https://msdn.microsoft.com/zh-cn/library/ms174997.aspx
http://blog.csdn.net/dba_huangzj/article/details/8300178
1、SQL Server 代理作业概述
2、获取代理作业执行时间方法一
3、获取代理作业执行时间方法二
4、总结语
5、参考目录清单列表
正文:
1、SQL Server 代理作业概述
本文不是详细讲解代理作业的,仅仅从代理作业历史表(dbo.sysjobhistory)的角度来学习和研究代理作业的执行时间。执行以下T-SQL代码:
SELECT [job_id] ,[step_id] ,[run_status] ,[run_date] ,[run_time] ,[run_duration] FROM [dbo].[sysjobhistory] WHERE [run_duration] >= 1 ORDER BY [run_duration] DESC; GO
以上T-SQL的执行结果如下图:
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211734580-854370439.png)
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/70a8aaffc9fa4c618c645a48245995f5/clipboard.png)
从以上图中很容易看到字段列run_date、run_time和run_duration的数据格式。结合微软联机帮助文档学习到:run_date字段列值的数据格式为yyyMMdd(该列值表示代理作业开始执行时的日期部分,如上图run_date字段列值为20170316表示该作业开始执行于2017-03-16这个日期点),run_time字段列值的数据格式为hhmmss(该列值表示代理作业开始执行时的时间部分,如上图run_time字段列值为20000表示执行于02:00:00这个时间点),run_duration字段列值的数据格式为hhmmss(这个是持续时间的数据格式,例如上图中的dun_duration为127表示改作业执行从开始到完成共持续了1分27秒)。
通常情况下,我在数据表设计尤其涉及到记录活动发生的日期时间点时更多的使用datetime这个数据类型的字段列。针对run_date和run_time的数据格式可以通过dbo.agent_datetime标量函数来转换为datetime数据类型。执行以下T-SQL代码:
SELECT [dbo].[agent_datetime](20170316, 20000) AS [run_datetime]; GO
以上T-SQL的执行结果如下图:
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/ffa6e2f4eb3f4d1e9dd1cda6334e3b74/clipboard.png)
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211746643-230670934.png)
那么如何将run_duration字段列值转换为秒、分、小时等?下面继续探究。
2、获取代理作业执行时间方法一
这个方法具体参考了dbo.agent_datetime函数的定义和查看SQLServer 代理作业的历史信息这边博文中提供的方法,具体实现的T-SQL代码如下:
SELECT [T1].[job_id] ,[T1].[name] AS [job_name] ,[T2].[run_status] ,[T2].[run_date] ,[T2].[run_time] ,[dbo].[agent_datetime]([T2].[run_date], [T2].[run_time]) AS [run_datetime] ,[T2].[run_duration] ,([T2].[run_duration] /10000 * 3600 + [T2].[run_duration] % 10000 / 100 * 60 + [T2].[run_duration] % 100 + 31) AS [run_duration_s] FROM [dbo].[sysjobs] AS [T1] INNER JOIN [dbo].[sysjobhistory] AS [T2] ON [T2].[job_id] = [T1].[job_id] WHERE [T1].[enabled] = 1 AND [T2].[step_id] = 0 AND [T2].[run_duration] >= 1 ORDER BY [T2].[job_id] ASC ,[T2].[run_date] ASC GO
以上T-SQL的执行结果如下图:
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/9e30e226c1914e1b92cb29e76036a472/clipboard.png)
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211756893-1733729539.png)
注意:
这种方法才用了精度设置,默认精度为31秒,也就是说如果作业的执行持续时间超过30秒(包括等于30秒)时会自动增加31秒。
3、获取代理作业执行时间方法二
这个方法依然使用dbo.agent_datetime函数,还会增加dateadd函数和datediff函数。具体实现的T-SQL代码如下:
SELECT [T1].[job_id] ,[T1].[name] AS [job_name] ,[T2].[run_status] ,[T2].[run_date] ,[T2].[run_time] ,[dbo].[agent_datetime]([T2].[run_date], [T2].[run_time]) AS [run_datetime] ,[T2].[run_duration] ,DATEDIFF(SECOND, '1900-01-01', DATEADD(SECOND, 31, [dbo].[agent_datetime](19000101, [run_duration]))) AS [run_duration_s] FROM [dbo].[sysjobs] AS T1 INNER JOIN [dbo].[sysjobhistory] AS T2 ON [T2].[job_id] = [T1].[job_id] WHERE [T1].[enabled] = 1 AND [T2].[step_id] = 0 AND [T2].[run_duration] >= 1 ORDER BY [T2].[job_id] ASC ,[T2].[run_date] ASC GO
以上T-SQL的执行结果如下图:
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/dzy863@163.com/8c0a1554de434a778d516e3be3bd0d18/clipboard.png)
![](https://images2015.cnblogs.com/blog/82100/201703/82100-20170320211808174-1662171598.png)
注意:
该方法依然采用了默认精度为31秒。
sql server系统提供的日期函数采用的默认基准日期是1900-01-01,这个可以使用0替代换。
4、总结语
通过研读博友的文章和学习微软联机文档,确实能够学到很多的知识。sql 的路上唯有继续修行,才能了解的更多。
5、参考目录清单列表
https://msdn.microsoft.com/zh-cn/library/ms174997.aspx
http://blog.csdn.net/dba_huangzj/article/details/8300178
相关文章推荐
- 使用”Sql Server 代理“下的”作业“定时执行期望的任务
- SQL Server 代理作业配置和执行情况
- sql server代理中作业执行SSIS包失败的解决办法
- SqlServer 查询作业执行持续时间
- SQL Server中如何找出执行时间过长的作业
- sql server代理中作业执行SSIS包失败的解决办法
- SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误
- SQL Server修改代理作业的下次运行时间
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到
- SQL Server作业没有执行的解决方法
- Linux 技巧: 控制预定作业的持续时间
- SQL Server 定时作业 与定时执行
- SQL Server 中显示执行sql的时间
- 在SQL SERVER 2005中按计划按时间执行T-SQL
- Sqlserver:代理作业调度的时间不准确.作业停止问题
- 测试SQL Server执行时间和CPU时间
- sql server 代理 创建作业(定时去做一些动作)
- SQL Server中查看SQL句子执行所用的时间
- SQL Server 中查看SQL句子执行所用的时间
- 从 SQL Server 2005 Beta 2 升级到 SQL Server 2005 社区技术预览后记录消息"无法找到指定的模块"错误和所有 SQL Server 代理作业不运行