在 Azure VM 上,如果我将一个大磁盘划分为多个驱动器(希望更连续 - 不确定它是否虚拟重要),如果需要空间,那么它需要动态分配(至于操作系统)?或者当似乎需要扩展时,我通常应该坚持每个驱动器的磁盘吗?
Nicholas McQuillen's questions
我必须提交票证以更改作业调度,因此我尝试通过 tsql 脚本更新 msdb..sysschedules,而不是浏览 GUI。我总是通过 GUI 立即看到更改。不过,我第一次使用这种方法时,更改需要一天的时间才能传播。最近时间更长了。我怀疑代理/调度程序中缓存了一些东西,但我找不到关于如何在生产系统上以最少侵入性的方式刷新它的文档。我希望像禁用/启用作业这样的基本功能会触发刷新,但它什么也没做,我宁愿在 T-SQL 中使用我的票证发出一些东西,以确保使用更改。当没有任何事情发生时,我已要求重新启动代理,以查看它是否有效,但理想情况下会更喜欢不那么侵入性的东西。这是一个 2014 年的实例。
示例脚本:
USE msdb;
update s set
s.freq_subday_interval=3
from msdb..sysjobs j
left join msdb..sysjobschedules js on j.job_id = js.job_id
left join msdb..sysschedules s on js.schedule_id = s.schedule_id
where j.name ='SomeDb.RunMeEvery3MinsBusta';
- - 编辑 - - -
我想从我在下面测试过的答案中获取,它似乎立即级联。只是想让它更有活力。
declare @jobid nvarchar(50), @scheduleid int
select @jobid=j.job_id,@scheduleid=s.schedule_id from msdb..sysjobs j
left join msdb..sysjobschedules js on j.job_id = js.job_id
left join msdb..sysschedules s on js.schedule_id = s.schedule_id
where j.name ='test';
EXEC msdb.dbo.sp_attach_schedule @job_id=@jobid,@schedule_id=@scheduleid
EXEC msdb.dbo.sp_update_schedule @schedule_id=@scheduleid,
@freq_subday_interval=1
GO
这是我今天早些时候遇到的一个问题,最终找到了答案。不介意更好的东西,但想把它提供给同样需要的人。
首先,在 Azure VM 上,您可以免费获得一个 D:\ 驱动器,即 SSD。需要注意的是,它通常会在 VM 重新启动时被破坏。高写入量的 MS 最佳实践是将此驱动器用于 tempdb。他们没有进入的是它没有格式化为 64kb。隐藏的 pagefile.sys 位于此处,因此如果您尝试重新格式化(它会失败),您需要考虑到这一点。
您需要将他们的启动 powershell 脚本更改为更像下面的内容,我首先完全删除页面文件,然后格式化为 64k,按照脚本通常的方式创建文件,然后在启动之前将 pagefile.sys 放回原处启动服务。
$SQLService=”SQL Server (MSSQLSERVER)”
$SQLAgentService=”SQL Server Agent (MSSQLSERVER)”
$tempfolder=”D:\SQLTEMP”
if (!(test-path -path $tempfolder)) {
(Get-WmiObject -Class Win32_PageFileSetting).Delete()
Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "Temporary Storage" -Confirm:$false
New-Item -ItemType directory -Path $tempfolder
Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = 'D:\pagefile.sys';}
}
Start-Service $SQLService
Start-Service $SQLAgentService
有没有人有更好的或在这个过程中看到任何漏洞?
为了给其他人更多的自动化/帮助,我还编写了上面的脚本以及创建它的触发器,并在启动后使用下面的 30 秒运行它。这基本上允许某人自动执行我参考的 cloudblogs 文章中的步骤。
#1 - Set Services to manual startup so that windows scheduler will start after tempdb adjusted
Set-Service -Name MSSQLSERVER -StartupType Manual
Set-Service -Name SQLSERVERAGENT -StartupType Manual
IF (Get-Service MsDtsServer130 -ErrorAction SilentlyContinue)
{
Set-Service -Name MsDtsServer130 -StartupType Manual
}
<#2 - using below powershell script to create the startup script#>
$script=
'
$SQLService="SQL Server (MSSQLSERVER)"
$SQLAgentService="SQL Server Agent (MSSQLSERVER)"
$tempfolder="D:\SQLTEMP"
if (!(test-path -path $tempfolder)) {
(Get-WmiObject -Class Win32_PageFileSetting).Delete()
Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "Temporary Storage" -Confirm:$false
New-Item -ItemType directory -Path $tempfolder
Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = "D:\pagefile.sys";}
}
Start-Service $SQLService
Start-Service $SQLAgentService
IF (Get-Service MsDtsServer130 -ErrorAction SilentlyContinue)
{
Start-Service -Name MsDtsServer130
}
'
Out-File -FilePath C:\SQL-startup.ps1 -InputObject $script -NoClobber
<#3 - using below script to create a scheduled task to call a powershell script that creates a folder on the d drive.#>
$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
Register-ScheduledJob -Trigger $trigger -FilePath C:\SQL-startup.ps1 -Name CreateSqlFolderOnDSsd
**编辑,上面假设 SQL 2016 和至少 powershell 5(虽然我不知道具体的依赖关系,但至少应该在 v4 上工作)。