设为首页 收藏本站
查看: 954|回复: 0

[经验分享] 4. SQL Server数据库状态监控 - 作业状态

[复制链接]

尚未签到

发表于 2018-10-13 08:25:56 | 显示全部楼层 |阅读模式
  有很多地方可以设置定时任务,比如:Windows的计划任务,Linux下的crontab,各种开发工具里的timer组件。SQL Server也有它的定时任务组件 SQL Server Agent,基于它可以方便的部署各种数据库相关的作业(job)。
  . 作业历史纪录
  作业的历史纪录按时间采用FIFO原则,当累积的作业历史纪录达到上限时,就会删除最老的纪录。
  1. 作业历史纪录数配置
  所有作业总计纪录条数默认为1000,最多为999999条;单个作业总计记录条数默认为100,最多为999999条。有下面2种方式可以进行修改:
  (1) SSMS/SQL Server Agent/属性/历史;
  (2) 未记载的扩展存储过程,SQL Server 2005及以后版本适用,以下脚本将记录数设回默认值:
EXEC msdb.dbo.sp_set_sqlagent_properties  
@jobhistory_max_rows=-1,
  
@jobhistory_max_rows_per_job=-1
  
GO
  
  2. 删除作业历史纪录
  (1) SSMS/SQL Server Agent/右击作业文件夹或某个作业/查看历史纪录/清除
  在SQL Server 2000中会一次清除所有作业历史记录,SQL Server 2005 及以后版本可以有选择的清除某个作业/某个时间之前的历史纪录;
  (2) SQL Server 2005及以后版本,提供了系统存储过程如下:
--清除所有作业15天前的纪录  
DECLARE @OldestDate datetime
  
SET @OldestDate = GETDATE()-15
  
EXEC msdb.dbo.sp_purge_jobhistory
  
@oldest_date=@OldestDate
  

  
--清除作业”Test”3天前的纪录
  
DECLARE @OldestDate datetime
  
DECLARE @JobName varchar(256)
  
SET @OldestDate = GETDATE()-3
  
SET @JobName = 'Test'
  
EXEC msdb.dbo.sp_purge_jobhistory
  
@job_name=@JobName,
  
@oldest_date=@OldestDate
  作业历史纪录数有上限,通常不需要手动去删除。
  3. 保留作业历史纪录
  即便设置了历史记录上限到999999,如果作业很多,加之作业运行很频繁,最终历史记录还是会被慢慢删除掉。
  如果想要保留某些作业历史的记录,可以打开作业属性/步骤/编辑/高级,选择将这个步骤的历史记录输出到文件/自定义表中,如下图:

  . 作业运行状态
  界面上可以通过: SSMS/SQL Server Agent/右击作业文件夹或某个作业/查看历史纪录,如下用SQL 语句检查作业状态。
  1. 作业上次运行状态及时长
  利用系统表msdb.dbo.sysjobhistory:
  (1) 表中的run_status字段表示作业上次运行状态,有0~3共4种状态值,详见帮助文档,另外在2005的帮助文档中写到:sysjobhistory的run_status为4表示运行中,经测试是错误的,在2008的帮助中已没有4这个状态;
  (2) 表中run_duration字段表示作业上次运行时长,格式为HHMMSS,比如20000则表示运行了2小时。
  如下脚本查看所有作业最后一次运行状态及时长:
if OBJECT_ID('tempdb..#tmp_job') is not null  
    drop table #tmp_job
  

  
--只取最后一次结果
  
select job_id,
  
       run_status,
  
       CONVERT(varchar(20),run_date) run_date,
  
       CONVERT(varchar(20),run_time) run_time,
  
       CONVERT(varchar(20),run_duration)run_duration
  
  into #tmp_job
  
  from msdb.dbo.sysjobhistoryjh1
  
where jh1.step_id = 0
  
   and(select COUNT(1) from msdb.dbo.sysjobhistory jh2
  
        wherejh2.step_id = 0
  
          and(jh1.job_id = jh2.job_id)
  
          and(jh1.instance_id  @MaxMinutes
  还有种比较笨的方法,在要监视的所有作业中增加一个步骤,如 : select GETDATE() 放在第一步,这样在sysjobhistory中就会有步骤1的运行纪录了,以此为起点,可以计算已运行时长。如果有很多已经部署的job,这确实不是个好办法。
  又或者,在每个作业最后一步,放一个检查的步骤,这样所有状态时长全都监视到了,问题是如果作业运行时间过长,最后的检查步骤根本无法被运行到。
  . 作业状态告警
  作业在完成后,自己有状态检查和告警机制,通常选择邮件告警,如下图:

  但这仅限对作业最终运行状态监视:
  (1) 没有运行结束的作业无法告警,或者说对作业的运行时长没有监视;
  (2) 如果作业在某个中间步骤设置了:失败后继续下一步,后续的作业步骤都成功,那么作业最终状态不会显示会失败,不会触发告警,如下脚本检查每个作业的所有步骤最后一次运行状态:
if OBJECT_ID('tempdb..#tmp_job_step') is not null  
    drop table #tmp_job_step
  

  
select jh1.job_id,
  
       jh1.step_id,
  
       jh1.run_status,
  
       CONVERT(varchar(20),jh1.run_date) run_date,
  
       CONVERT(varchar(20),jh1.run_time) run_time,
  
       CONVERT(varchar(20),jh1.run_duration) run_duration
  
  into #tmp_job_step
  
  from msdb.dbo.sysjobhistoryjh1
  
where (select COUNT(1) from msdb.dbo.sysjobhistoryjh2
  
        where (jh1.job_id = jh2.job_id and jh1.step_id = jh2.step_id)
  
          and(jh1.instance_id

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620937-1-1.html 上篇帖子: SQL Server数据库镜像基于可用性组故障转移 下篇帖子: SQL Server:第一篇 安装 SQL Server 2014-Ricky
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表