目前我有大约 125 个生产实例,每个都有一个基于脚本的维护计划作为代理作业运行。
运行的任务是 Index Reorg/Rebuild、Stats 更新和 Checkdb。备份由 Netbackup 负责,因此它们不构成计划的一部分,但有几个例外。
去年,我将所有实例从使用 SSMS 向导创建的计划转移到了基于脚本的维护计划(讨厌那些),它们高效且有效,所以总的来说我很高兴。
我想知道把事情做得更远一点是否可行。我最近一直在研究一个 powershell 脚本,当指向一个实例时,它会遍历该实例上的数据库并按需执行这三个任务。
我的问题是是否任何人都可以通过对所有实例执行此操作来看到任何缺点,即在我们的 DBA 服务器上有一个单一的 powershell 脚本,该脚本遍历 Windows 计划中的实例列表并执行维护任务。任何错误都将被处理/写入日志等。
在我看来,这样做的主要好处是我们不会将 mp 作业部署到新实例和配置计划。我们只会将任何新实例的名称添加到脚本必须遍历的实例中。
我欢迎你的想法。
您的问题将取决于您如何编写流程。所以只有几件事我能想到马上考虑。尽管任何答案都取决于作者的意见。
如果您使用顺序处理,您将永远不会知道某个特定服务器何时会因索引维护或统计信息维护而产生负载。同样,它也可能在每次运行时根据给定实例上运行的其他进程而变化。需要考虑的是您的维护窗口是否足够大以应对这种波动。
Invoke-Sqlcmd
运行它的东西还是Invoke-Command
(PowerShell 远程)。这是考虑当您在 PowerShell 中运行命令时,您将在 PowerShell 中处理任意数量的数据,还是在 SQL Server 中完成所有操作。如果您对数据进行任何类型的管道处理,请考虑如何处理它。某些事情(管道到可执行文件)可能需要在将所有数据沿管道移动到下一个命令之前将其缓存在内存中。