SQL Server数据库作业监控工具:SQL Sentry

如果你不仔细,SQLServer作业有可能影响性能

事实上每个SQLServer都运行一个或更多日常的作业。更可能运行很多每周一次的作业。不幸的是,大多数DBA创建了作业,然后就忘掉了它们,当然除非作业出了问题。但如果作业没出现问题,一天一天的运行下去的话,大多数作业都会被忘掉。

就像任何应用程序可能影响SQLServer性能一样,作业也有可能。那些有设计得不好的代码的作业,或者在糟糕的时间运行的作业,能引起SQLServer重大的损伤。因此,将SQLServer作业作为性能监控的一部分指很重要的。

本节将着眼于如何分辨,纠正潜在的与作业相关的性能问题。 

运行了任何不必要的作业吗?

创建一个完成特定任务的作业是很容易的,然而当任务不再需要时忘掉移除它们也是经常发生的事。例如,你也许需要创建一个作业去从几个表里每晚移动数据到另一个表里,用来产生报表。但如果报表不再有用,也就不再有任何需要运行的作业,所以应该移除它们以减少开销。问题是在作业和报表之间没有直接连接,所以如果报表不再有用,很容易忘记移除作业。

作为监控的一部分,检查运行在服务器上的每一个作业,看看作业是否真的需要。如果不需要就移除它。

沿着这个思路,看看有重复的作业没有。例如,我曾经看到DBA新手使用维护向导在SQLServer里创建了作业,而没有真正意识到它们做了什么然后他们又手工添加了一些与维护向导创建的一个或更多作业相同的作业。同样的事情做了两次大量的浪费了SQLServer的资源。 

作业调度是在服务器不忙的时候吗?

当你检查SQLServer里的每一个作业时,看看它们的运行时间。要是作业不必要运行在特定的时间,尽量在SQLServer不忙的时候调度,如晚上或周末,取决于你的环境。

如果你不能确认SQLServer什么时候是空闲的,用性能监视器做一个超过一周的监控日志。这将提供给足够的数据以分辨出能运行非时间敏感的作业的空闲时间。 

同一台服务器上的SQLServer作业有交迭吗?

这个问题比大多数DBA意识到的要大得多,特别是当SQLServer有很多很多的作业时。当SQLServer上有很多活动时,如果作业能尽可能的随时间分布则是理想的,不要所有的作业都在同一刻运行。例如,如果你的SQLServer有10个数据库,你要为每个数据库创建备份的作业,更好的方法是一次运行一个,而不是在同一时间运行所有的作业。

虽然你能通过企业管理器查看作业运行的时长,但没有一个容易的方法来一个接一个(给每一个作业足够的时间去完成)的手工调度作业,以便它们不产生交迭。这也能做到,但对于有大量作业的服务器来说,你也许需要一个表格来列出所有的作业。作为一个选择你可以考虑使用第三方工具如SQL Sentry(www.SQLSentry.net),它允许你可视化地管理和查看你所有的作业,以确保这些作业没有交迭。

所以当你进行作业监控的时候,检查看看作业交迭情况,假定这是可能的。如果它们的确交迭了,尽量重新调度它们以禁止交迭,尽可能分散负载到大量空闲的时间。 

Taxonomy upgrade extras: