数据库服务器无故100%

问题描述:

我们有一台作为数据库服务器运行的Windows Server 2003(x64)。 该数据库配备有32GB的RAM数据库服务器无故100%

通常数据库内存使用率(任务管理器)在5-10%之间。 然而,有时候数据库会突然突然增加到100%并且保持在那里,并且没有任何代码或执行的改变。

各种研究,付费或由我,指出一个单一的存储过程。 当数据库为100%时,禁用此过程将使数据库恢复正常。

现在这听起来很明显,但这里是奇怪的部分。

存储过程已优化,内存使用量(来自执行计划)为0.01,这非常好。通常执行存储过程会立即返回结果集。我还付了RackSpace Fanatic Support DBA来查看这个,他说他认为存储过程没有问题。

现在额外的奇怪的一点。

  • 运行SP是即时的。
  • 当DB为100%时,运行SP,在分钟后继续执行分钟。
  • 禁用SP,将数据库降至5-10%。
  • 虽然SP被启用,DB是100%,如果我打开一个新的查询窗口,并运行从SP确切的代码,但作为一个查询,而不是作为SP,结果瞬间再次回到

所以,虽然乍一看,这听起来SP是需要优化的,SP中的实际代码并不是问题。

我很绝望!

+1

可能是参数嗅探,你手动使用的参数与应用程序运行它的参数不一样,但我认为你必须实际发布一些关于存储过程的代码/细节。 – Andrew 2009-12-02 10:29:42

+0

安德鲁你说得对。 我向SP添加了RECOMPILE,并且一切都运行良好! – 2009-12-02 10:44:24

+0

把它变成一个帖子,所以我可以给你答案 – 2009-12-02 10:45:43

执行计划可以根据输入参数SP和结果集的大小而改变。

您可以尝试将WITH RECOMPILE添加到存储过程,以获得每次调用的全新执行计划。它会让它慢一点,但有时候SQL Server会因为大部分查询的执行计划异常错误而停滞不前,并且在这些情况下重新编译会有所帮助。

+0

谢谢乔纳斯,这是安德鲁建议的! – 2009-12-02 10:45:08

探查:

SQL Server提供了称为探查一个伟大的工具,它可以让您实时查看正在运行在服务器上的查询。您应该运行分析器并找出实际发生的事情,并使用它来查找罪魁祸首。

查询有4种度量:内存,CPU,读取,写入。占用大量这些(单独或组合)并且被高频调用的SQL语句是优化的最佳候选者。

运行配置文件并捕获输出后,您应该能够识别要优化的项目。然后,您可以运行SQL语句,查看执行计划并对其执行必要的优化。

(编辑:添加的内容)

这可能是因为它不是语句本身不是最优的,但有些锁定/阻塞/死锁可能会导致此。服务器上可能还有其他东西在运行,它占用了这个SP所需的资源,并导致CPU的飙升。

阅读上探查:

http://msdn.microsoft.com/en-us/library/ms187929.aspx

+0

我已经使用RackSpace的DBA优化了所有这四个选项 – 2009-12-02 10:36:31

+0

您是否优化了一个SP或从Profiler中识别的SP? – 2009-12-02 10:47:45

+0

对查询没有更多优化。作为查询的查询是立即的,作为SP的查询延迟。安德鲁关于参数嗅探的建议是正确的。 – 2009-12-02 10:53:57