Answers:
CPU使用率低于20%
通过“高级属性”窗口为空闲CPU状态配置SQL Agent 。您可以将“平均CPU使用率低于”值设置为20%,然后将其保持在该水平必须运行多长时间才能运行该作业。
之后,配置作业步骤以检查时间,以确保它在您的窗口内,如果在窗口内,请发出update命令。
现在,此设置可能无法完全满足每5分钟的要求。我在此计划类型中找不到任何指示作业执行频率的信息。(例如,如果将“闲置CPU”条件的“并保持低于此水平”设置为30秒,是否会频繁运行该作业?)这将需要进行一些测试,因为我以前从未使用过此配置。如果有机会,我可以尝试看看它会做什么,并将更新此答案。
丹尼斯非常接近。但是实际的解决方案被交换了一点。由于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"
}