仅在CPU空闲时才按计划运行服务器代理作业


8

我在SQL Server代理中设置了一个作业来运行更新查询。我希望这项工作在每晚午夜至凌晨5点之间执行,并且希望在该时间范围内每5分钟重复一次。但是我只希望作业在CPU空闲时才能实际执行,也就是说CPU利用率低于20%。我知道我可以设置时间表,也可以单独设置CPU空闲要求。我是否可以设置它,以便两个“时间表”都必须正确才能运行作业?

谢谢

Answers:


6

或者,您可以使一项作业每5分钟运行2个步骤:

步骤#1-检查CPU使用率(PowerShell),只是google和那里有很多脚本; 如果<20%成功退出,则转到步骤2,否则退出并出现错误并完成作业(没有步骤#2)

第2步-是实际的UPDATE。

还是肯建议的。


2
我喜欢这一个。我认为这是一个更好的解决方案。
KenWilson 2014年

4

CPU使用率低于20%

通过“高级属性”窗口为空闲CPU状态配置SQL Agent 。您可以将“平均CPU使用率低于”值设置为20%,然后将其保持在该水平必须运行多长时间才能运行该作业。

之后,配置作业步骤以检查时间,以确保它在您的窗口内,如果在窗口内,请发出update命令。

现在,此设置可能无法完全满足每5分钟的要求。我在此计划类型中找不到任何指示作业执行频率的信息。(例如,如果将“闲置CPU”条件的“并保持低于此水平”设置为30秒,是否会频繁运行该作业?)这将需要进行一些测试,因为我以前从未使用过此配置。如果有机会,我可以尝试看看它会做什么,并将更新此答案。


CPU利用率情况的工作方式是:如果CPU在指定的持续时间内一直处于指定的阈值以下,则事件将触发并运行作业。如果CPU再空闲一秒,事件将再次被触发,因此作业将尝试再次运行。但是一次只能执行一个作业实例,因此实际结果是只要CPU保持空闲状态,该作业将继续启动,执行,完成,重复。
c.dunlap 2014年

2

一种方法是拥有三个工作。作业一按计划设置,可在窗口开始处启用作业二。作业2设置为在CPU空闲时运行,而第三个作业在窗口末尾禁用作业2。我不认为这是唯一的方法,但这绝对是我心中最简单的方法。


2

丹尼斯非常接近。但是实际的解决方案被交换了一点。由于powershell无法在一段时间内检查CPU,因此只能使用当前使用情况,因此必须使用SQL Server检查。

因此,我的第一步是运行一个PowerShell脚本,该脚本检查当前系统时间是否在两个时间限制之间。如果是这样,那么powershell脚本什么也不做。SQL Server作业将其解释为成功。

然后,作业继续进行到最后一步,并执行更新查询。

但是,如果当前时间不在此范围内,我将执行一次Start-Time -s 600以将powershell脚本暂停10分钟(模拟“曾经5-10分钟”的要求)。这是为了防止SQL Server代理不断尝试运行此作业。 。

10分钟后,powershell脚本将引发自定义错误。由于我$ErrorActionPreference = "Stop"在脚本开头,因此在发生错误后,powershell脚本将停止执行。这一步非常重要。

由于powershell停止并且没有返回,因此SQL Server代理将其解释为失败,并且不会继续执行执行Update查询的步骤。

PS你们带我朝正确的方向前进。如果我有足够的声誉,我会赞成你们。

编辑:添加了Powershell脚本

$ErrorActionPreference = "Stop"

$StartTime = Get-Date "12:00 AM"
$EndDate = Get-Date "05:00 AM"
$CurrentDate = Get-Date
$ExecuteJob = $StartTime -lt $CurrentDate -and $EndDate -gt $CurrentDate
if(!$ExecuteJob){    
    Start-Sleep -s 600
    throw "Current Time not within Server downtime"
}

1
PowerShell可以使用Get-Counter cmdlet在一段时间内检查CPU。您可以在45秒内每5秒轮询一次值:$ t = Get-Counter“ \ Processor(_total)\%Processor Time” -SampleInterval 5 -MaxSamples10。然后,可以通过以下方式解析字符串以获取值: $ t.Readings.Trim(“ \\ server \ processor(_total)\%Processor time:”)

是的,但这需要我允许sql server每5秒运行一次该作业。由于SQL Server已经在一段时间内监视CPU使用率,因此我选择了那条路线。这使我只能在CPU过高时每10分钟执行一次作业。
c.dunlap 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.