SQL Server创建Job, 实现执行相同脚本而产生不同作业计划的探究

1 . 背景描述

本公司的SQL Server 服务器近百台,为了收集服务器运行的状态,需要在各个实例上部署监控Job,将收集到的信息推送到中央管理服务器。

收集的信息主要包括:慢查询、阻塞、资源等待、Connection_Trace log 、Job执行状态、复制订阅状态、Alwayson状态、数据库字典(特别是索引)等各种记录。

因此,对这些的Job的维护工作也是日常工作的一部分,为了集中统一管理,我们将各个SQL Server 都注册到了一台服务器上。这样也方便集中统一部署、更新 Job Script,不需要逐个登入服务器进行部署更新了。

注册服务器的管理是通过SSMS来实现的。点击 视图-->已注册的服务器 

<图-1>

打开后,我们可以进行管理。为便于管理,我们将 本公司SQL Server分成了三组 FileDB 、Master、Slave。主要考虑这三种类型部署管理的脚本不一样,例如部署在Master机器上的脚本根本不需要部署在Slave上面, 相同型的机器归拢到一个组别中。

 <图-2>

2. 通过中央管理服务器部署Job 

监控Job的部署,如果通过注册服务来管理的话,只能通过脚本来实现。

我们先在一台SQL Server上产生需要执行的脚本,然后,再在中央管理服务器上执行。产生创建脚本可以通过点击  配置Job界面上的【脚本】按钮产生。(逐步配置,最后点击【脚本】即可)

<图-3>

在这个案例中,我们设置的Job的功能 是 每隔5分钟执行 master数据库下面的一个SP: USP_TestForDBA_TestJOBSchedule,即运行的SQL命令 为 exec USP_TestForDBA_TestJOBSchedule。Job的名称为DBA_TestJob_Schedule。

那么导出的创建Job的script如下:

USE [msdb]
GO
DECLARE @jobId BINARY(16)
EXEC  msdb.dbo.sp_add_job @job_name=N'DBA_TestJob_Schedule', @enabled=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @description=N'此为测试案例,无实际意义', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'sa', @job_id = @jobId OUTPUT
select @jobId
GO
EXEC msdb.dbo.sp_add_jobserver @job_name=N'DBA_TestJob_Schedule', @server_name = N'XXXXXXXXXX'
GO
USE [msdb]
GO
EXEC msdb.dbo.sp_add_jobstep @job_name=N'DBA_TestJob_Schedule', @step_name=N'Step1', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_fail_action=2, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'exec USP_TestForDBA_TestJOBSchedule', @database_name=N'master', @flags=0
GO
USE [msdb]
GO
EXEC msdb.dbo.sp_update_job @job_name=N'DBA_TestJob_Schedule', @enabled=1, @start_step_id=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @description=N'此为测试案例,无实际意义', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'sa', @notify_email_operator_name=N'', @notify_netsend_operator_name=N'', @notify_page_operator_name=N''
GO
USE [msdb]
GO
DECLARE @schedule_id int
EXEC msdb.dbo.sp_add_jobschedule @job_name=N'DBA_TestJob_Schedule', @name=N'Schedule1', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=4, @freq_subday_interval=5, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20181201, @active_end_date=99991231, @active_start_time=0, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT
select @schedule_id
GO

 

3. 待优化的问题

这份代码,如果同时部署在多台服务器上,有没有潜在的问题,或者说有没有优化的地方呢?

答案是肯定的,有!!!

收集监控数据的SP中,有向中央管理服务器Insert数据的功能,如果各个服务器同时插入,则会出现排队,甚至出现超时报错的问题。

查看每台服务器Job,以上代码对应的Schedel属性,其开始时间是一模一样的。这不是我们想要的。

<图-4>

如果是每隔五分钟执行一次,其实,我们希望各个Job之间的 开始时间可以随机 在00:00:00--00:05:00分布。这样,各个Job 之间开始执行的时间随机, 撞车的概率大大减少,向中央服务器插入数据排队也会减少

那么如何实现呢?

4. 代码优化

仔细分析上面的创建代码,其实它包含了sp_add_job、sp_add_jobserver、sp_add_jobstep、sp_update_job、sp_add_jobschedule五个部分。每个部分基本上对应添加Job界面的一个动作。如果调整各个Job的开始时间,就要想办法调整 【作业计划属性】界面上的【开始时间】 设置。图-4 作业计划 属性 对应  sp_add_jobschedule 代码 部分。

代码中的开始时间 为参数 @active_start_time

分析到这儿,相信部分同学已经有思路了。

OK,我们直接分享更新后的代码。其它代码部分不做调整,只调整最后 sp_add_jobschedule 部分的代码

调整后如下:

USE [msdb]
GO
DECLARE @schedule_id int
------------------------------- start -- Job schedule 开始时间在指定范围内随机产生 20181015 Carson Xu-----------------
Declare @Randstart_time int ----分布式数据库Job 开始时间指定范围随机产出,减少并发等待
select @Randstart_time=cast( floor(rand()*5) as int) * 100 +cast( floor(rand()*60) as int)--5 代表5分钟内的随机数,60 代表60 秒内随机数。
---将参数随机值 赋予 存储中的 sp_add_jobschedule 的@active_start_time就OK了。即代码中的@active_start_time=@Randstart_time.
---active_start_time 的数据类型为 int,无默认值。时间格式为 HHMMSS,采用 24 小时制。
---cast( floor(rand()*5) as int) * 100 +cast( floor(rand()*60) as int) 其实默认了开始时间(小时是00开始),完整应该是0*100000+cast( floor(rand()*5) as int) * 100 +cast( floor(rand()*60) as int)
---如果是8点就应该是8*100000+cast( floor(rand()*5) as int) * 100 +cast( floor(rand()*60) as int)
--------------------------------end ----------------------------------------------------------
EXEC msdb.dbo.sp_add_jobschedule @job_name=N'DBA_TestJob_Schedule', @name=N'Schedule1', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=4, @freq_subday_interval=5, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20181201, @active_end_date=99991231, @active_start_time=@Randstart_time, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT
select @schedule_id
GO

 

5. 验证

图-5、图-6 是用上面相同代码生成的Job, 而查看其作业计划的开始时间不同,为随机产生的,符合了代码优化的要求。

<图-5> 

此Server上的这个Job的开始时间是00:04:40执行,每隔5分钟执行一次。

<图-6> 

此Server 上的Job为00:00:28 分钟执行,每隔5分钟执行一次,与图-5的时间点是不同的,完美的错开了。

 

 

 本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

 本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

转载于:https://www.cnblogs.com/xuliuzai/p/10050614.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于线性常微分方程的我国某省艾滋病传播的数学模型建立和预测分析

基于线性常微分方程的我国某省艾滋病传播的数学模型建立和预测分析 如有错误&#xff0c;欢迎指正&#xff01;转载需注明出处和作者信息&#xff01;©️Sylvan Ding 摘要 艾滋病&#xff08;AIDS&#xff09;又称获得性免疫缺陷综合征&#xff0c;由人类免疫缺陷病毒&…

神经网络的持续终身学习综述论文

来源&#xff1a;专知人和高级动物在整个生命中不断获取、微调和转让知识和技能。这种能力&#xff0c;称为lifelong learning&#xff0c;是由一系列神经认知机制协调的过程&#xff0c;这些机制共同促进了sensorimotor技能的发展以及对长期记忆的巩固和检索。因此对于计算系统…

Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译

Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译 转载需注明文章出处&#xff1a;©️ Sylvan Ding Source: M. Galles and F. Matus, “Pensando Distributed Services Architecture” in IEEE Micro, vol. 41, no. 02, pp. 43-49, 2021. D…

反思脑机接口技术:机器真的能控制我们的大脑吗?

来源&#xff1a;AI科技评论作者&#xff1a;R. Douglas Fields编译&#xff1a;陈彩娴猛烈的公牛在冲锋的途中锁定了双腿。它将双蹄扎进地下&#xff0c;在与之搏斗的人类参赛选手被刺伤之前停了下来。这个人类参赛选手不是职业斗牛士&#xff0c;而是一名西班牙神经科学家&am…

C4.5决策树生成算法完整版(Python),连续属性的离散化, 缺失样本的添加权重处理, 算法缺陷的修正, 代码等

C4.5决策树生成算法完整版(Python) 转载请注明出处&#xff1a;©️ Sylvan Ding ID3算法实验 决策树从一组无次序、无规则的事例中推理出决策树表示的分类规则&#xff0c;采用自顶向下的递归方式&#xff0c;在决策树的内部节点进行属性值的比较并根据不同的属性值判断从…

缅怀袁隆平院士:一颗稻谷里的爱国情怀

来源&#xff1a;科学网5月22日&#xff0c;《中国科学报》从中国工程院获悉&#xff0c;“共和国勋章”获得者、中国工程院院士袁隆平&#xff0c;因多器官功能衰竭&#xff0c;于2021年5月22日13时07分在长沙逝世&#xff0c;享年91岁。袁隆平对于国人来说&#xff0c;袁隆平…

k-Means——经典聚类算法实验(Matlab实现)

聚类算法—k-Means实验 k-平均&#xff08;k-Means&#xff09;&#xff0c;也被称为k-均值&#xff0c;是一种得到最广泛使用的聚类算法[1]. k-Means算法以k为参数&#xff0c;把n个对象分为k个簇&#xff0c;使得簇内具有较高的相似度。 实验目的 了解常用聚类算法及其优缺…

这5个数学猜想最早在30年前提出,如今AI证明它们都错了

来源&#xff1a;AI科技评论编译&#xff1a;琰琰编辑&#xff1a;青暮近日&#xff0c;以色列特拉维夫大学研究团队在预印论文库提交了一篇名为“Constructions in combinatorics via neural networks“的论文&#xff0c;在这篇论文中&#xff0c;研究人员通过机器学习算法证…

Java AQS 核心数据结构-CLH 锁及优化

Java AQS 核心数据结构-CLH 锁 什么是CLH锁 CLH 锁是对自旋锁的一种改进&#xff0c;有效的解决了以上的两个缺点。 第一个是锁饥饿问题。在锁竞争激烈的情况下&#xff0c;可能存在一个线程一直被其他线程”插队“而一直获取不到锁的情况。第二是性能问题。在实际的多处理上…

M/M/m排队模型 (单队列多服务台并联服务模型)数学建模: 基于生灭过程的理论计算和基于事件推进的Matlab模拟仿真思路

M/M/m排队模型 (单队列多服务台并联服务模型) 数学建模: 基于生灭过程的理论计算和基于事件推进的Matlab模拟仿真思路 原创文章&#xff0c;转载文章请注明出处&#xff1a;©️Sylvan Ding &#x1f389;&#x1f389;&#x1f389; 摘要 本文研究M/M/m单队列多服务台并…

用物理学来为生命技术及制度的演化找出规律-读《为什么世界不会失控》

来源&#xff1a;混沌巡洋舰物理学的规律是最底层的最永恒的&#xff0c;但能够对抗变化&#xff0c;维持自身结构的活系统&#xff0c;其规律则是最丰富的。“The physics of life”这本书&#xff0c;则是用能量的产生和耗散为视角&#xff0c;解释一切活系统&#xff0c;包括…

collection 多态 会自动转型为子类 继承多态需要显示转型

转载于:https://www.cnblogs.com/classmethond/p/10057670.html

深入地下,实地探访!不用人挖煤的智能煤矿长什么样?

来源&#xff1a;脑极体未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱&a…

这些行业,将率先落地AI芯片 | 星前沿

来源&#xff1a;联想之星广义上&#xff0c;所有面向AI应用的芯片都可以称为AI芯片。目前一般认为是针对AI算法做了特殊加速设计的芯片。现阶段&#xff0c;这些人工智能算法一般以深度学习算法为主&#xff0c;也可以包括其他浅层机器学习算法。人工智能芯片分类一般有按技术…

[NOI2007]社交网络

题目描述 在社交网络&#xff08;social network&#xff09;的研究中&#xff0c;我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。在一个社交圈子里有n个人&#xff0c;人与人之间有不同程度的关系。我 们将这个关系网络对应到一个n个结点的无向图上&#xf…

vueJs的简单入门以及基础语法

vue的api vue官网API 1基础语法 1-1基本数据绑定 <div id"app">{{ msg }} </div> //script new Vue({el:"#app",//代表vue的范围data:{msg:hello Vue //数据} }) 在这个例子中我们可以进行赋值 var app new Vue(...); app.msg 初探vue; //那…

应用数学的强大威力

来源&#xff1a;数学中国 应用数学思想是科研当中非常重要的一种思维方式以及研究方法。今天我们就借助戴世强教授的三篇有关应用数学的文章来详细了解一下这些问题&#xff1a;什么是“应用数学思维”&#xff1f;我们如何在研究中使用应用数学思维&#xff1f;应用数学思维…

正则化实现降噪,分别使用最小二乘、定步长梯度下降和回溯法的梯度下降求解最优解

正则化实现降噪&#xff0c;分别使用最小二乘、定步长梯度下降和回溯法的梯度下降求解最优解 原创文章&#xff01;转载需注明来源&#xff1a;©️ Sylvan Ding’s Blog ❤️ 实验目的 参考 INTRODUCTION TO NONELINEAR OPTIMIZATION. Amir Beck. 2014 的 3.4 Denoising …

双向 RNN

1.基本理论 双向 RNN 结合时间上从序列起点开始移动的 RNN 和另一个时间上从序列末尾开始移动的 RNN 2.逻辑图 其中 h (t) 代表通过时间向前移动的子 RNN 的状态&#xff0c;g (t) 代表通过时间向后移动的子 RNN 的状态 允许输出单元 o (t) 能够计算同时依赖于过去和未来且对时…

Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法

Hadoop伪分布式配置和搭建&#xff0c;hadoop单机安装&#xff0c;wordcount实例测试&#xff0c;hadoop安装java目录怎么找&#xff0c;问题及问题解决方法 环境说明 系统&#xff1a;ubuntu18.04 主机名&#xff1a;test1 用户名&#xff1a;sylvan hadoop单机安装 换源操作…