SQLServer数据库作业性能监控列表
SQLServer数据库作业性能监控列表
--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com--原帖地址| SQLServer作业监控列表 | 你的答案 |
| 运行了任何不必要的作业吗? | |
| 作业调度是在服务器不忙的时候吗? | |
| 同一台服务器上的SQLServer作业有交迭吗? | |
| 任何非SQLServer的作业有交迭吗? | |
| 作业运行的TSQL是最优化的吗? | |
| 检查作业运行了多长时间吗? | |
| 目前的作业有替代方法吗? | |
在上表输入你的结果。
如果你不仔细,SQLServer作业有可能影响性能 事实上每个SQLServer都运行一个或更多日常的作业。更可能运行很多每周一次的作业。不幸的是,大多数DBA创建了作业,然后就忘掉了它们,当然除非作业出了问题。但如果作业没出现问题,一天一天的运行下去的话,大多数作业都会被忘掉。
就像任何应用程序可能影响SQLServer性能一样,作业也有可能。那些有设计得不好的代码的作业,或者在糟糕的时间运行的作业,能引起SQLServer重大的损伤。因此,将SQLServer作业作为性能监控的一部分指很重要的。 本节将着眼于如何分辨,纠正潜在的与作业相关的性能问题。 运行了任何不必要的作业吗? 创建一个完成特定任务的作业是很容易的,然而当任务不再需要时忘掉移除它们也是经常发生的事。例如,你也许需要创建一个作业去从几个表里每晚移动数据到另一个表里,用来产生报表。但如果报表不再有用,也就不再有任何需要运行的作业,所以应该移除它们以减少开销。问题是在作业和报表之间没有直接连接,所以如果报表不再有用,很容易忘记移除作业。
作为监控的一部分,检查运行在服务器上的每一个作业,看看作业是否真的需要。如果不需要就移除它。 沿着这个思路,看看有重复的作业没有。例如,我曾经看到DBA新手使用维护向导在SQLServer里创建了作业,而没有真正意识到它们做了什么。然后他们又手工添加了一些与维护向导创建的一个或更多作业相同的作业。同样的事情做了两次大量的浪费了SQLServer的资源。 作业调度是在服务器不忙的时候吗? 当你检查SQLServer里的每一个作业时,看看它们的运行时间。要是作业不必要运行在特定的时间,尽量在SQLServer不忙的时候调度,如晚上或周末,取决于你的环境。
如果你不能确认SQLServer什么时候是空闲的,用性能监视器做一个超过一周的监控日志。这将提供给足够的数据以分辨出能运行非时间敏感的作业的空闲时间。 同一台服务器上的SQLServer作业有交迭吗? 这个问题比大多数DBA意识到的要大得多,特别是当SQLServer有很多很多的作业时。当SQLServer上有很多活动时,如果作业能尽可能的随时间分布则是理想的,不要所有的作业都在同一刻运行。例如,如果你的SQLServer有10个数据库,你要为每个数据库创建备份的作业,更好的方法是一次运行一个,而不是在同一时间运行所有的作业。
虽然你能通过企业管理器查看作业运行的时长,但没有一个容易的方法来一个接一个(给每一个作业足够的时间去完成)的手工调度作业,以便它们不产生交迭。这也能做到,但对于有大量作业的服务器来说,你也许需要一个表格来列出所有的作业。作为一个选择你可以考虑使用第三方工具如SQL Sentry(www.SQLSentry.net),它允许你可视化地管理和查看你所有的作业,以确保这些作业没有交迭。
所以当你进行作业监控的时候,检查看看作业交迭情况,假定这是可能的。如果它们的确交迭了,尽量重新调度它们以禁止交迭,尽可能分散负载到大量空闲的时间。 任何非SQLServer的作业有交迭吗? 除了SQLServer作业外,你的服务器上也许有一些非SQLServer的作业。有些例子包括碎片整理或磁带备份作业而不是使用SQLServer调度。既然这些不使用SQLServer调度,它们也容易被忘记,你也许同时终止了一些作业的运行,就像终止SQLServer作业的运行一样。和SQLServer作业一样,如果你能在不同时间调度这些作业而不是在SQLServer作业运行的时候则是理想的。如果你需要这样做,在上面讨论的表格里加入这些作业。 作业运行的TSQL是最优化的吗? 就像应用程序、脚本里的代码一样,运行在作业里的TSQL也是需要优化的一部分。TSQL代码的优化将在其他地方做介绍,任何有关的索引也应该被添加以便帮助作业代码更有效率的运行。
所以对于每一个有TSQL代码的作业来说,你应该通过查询分析器运行它来查看执行计划,查找潜在的问题,也可以通过索引向导,查找潜在的索引以提升性能。
检查作业运行了多长时间吗? 我已经提过你能使用企业管理器来查看任何作业运行的时长。但我没有提及的是最好随时检查看看这个时长是否有大量的变化。例如,一个特定的作业正常情况下运行2分钟,但你发现一周有一次,在星期天,同样的作业花费了15分钟。作业时长发生了重大的改变是一个好的迹象表明作业和其他在SQLServer上运行的进程有冲突。如果你发现有这类问题,你需要更仔细的调查并分辨出出了什么问题,然后纠正它。 目前的作业有替代方法吗? 仅仅因为有作业要运行并不意味着它是手边完成任务的最好方法。评估每一个作业,然后决定是否有更好的方法来完成同样的工作。例如,或许写TSQL代码每晚执行导入比使用目前的DTS包更有效率。或者也许你正运行的作业,使用另外的调度程序去脱离SQLServer运行能更好。但记住关键的是,你目前的作业常常不是唯一的解决方法,有更好的可用的能减少服务器开销的解决方法,如果你花时间考虑一下的话。
上一篇:《应用程序和T-SQL性能监控列表》
下一篇:《使用Profiler找出低效的查询》

拓狼 最后编辑于 2007-05-25 13:22:52
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。