Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库服务器100%,无原因_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 数据库服务器100%,无原因

Sql 数据库服务器100%,无原因,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我们有一个Windows Server 2003(x64)作为数据库服务器运行。 数据库配备32GB的RAM 通常数据库内存使用率(任务管理器)在5-10%之间。 然而,有时数据库突然上升到100%,并保持在那里,随机地,对代码或执行没有任何更改 所有类型的研究,不管是付费的还是我自己的,都指向一个存储过程。 当数据库为100%时,禁用此过程将使数据库恢复正常 这听起来很明显,但奇怪的是 存储过程得到了优化,内存使用率(来自执行计划)为0.01,这非常好。通常,执行存储过程将立即返回结果集。我还

我们有一个Windows Server 2003(x64)作为数据库服务器运行。 数据库配备32GB的RAM

通常数据库内存使用率(任务管理器)在5-10%之间。 然而,有时数据库突然上升到100%,并保持在那里,随机地,对代码或执行没有任何更改

所有类型的研究,不管是付费的还是我自己的,都指向一个存储过程。 当数据库为100%时,禁用此过程将使数据库恢复正常

这听起来很明显,但奇怪的是

存储过程得到了优化,内存使用率(来自执行计划)为0.01,这非常好。通常,执行存储过程将立即返回结果集。我还请了一位RackSpace狂热的支持DBA来查看这个问题,他说他认为存储过程没有问题

现在是额外的wierd位

  • 运行SP是即时的
  • 当DB为100%时,运行SP会持续执行数分钟
  • 禁用SP会将DB降低到5-10%
  • 尽管SP已启用,但如果我打开一个新的查询窗口并从SP运行准确的代码,则DB为100%,但作为一个查询,而不是作为SP,结果会立即再次返回
因此,尽管乍一看,SP似乎需要优化,但SP中的实际代码并不是问题


我绝望了

探查器:

SQL Server附带了一个名为Profiler的强大工具,它可以让您实时查看服务器上运行的查询。您应该运行探查器,找出实际发生的情况,并使用它找到罪犯

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

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

(编辑:添加的内容)

可能不是语句本身不是最优的,而是一些锁定/阻塞/死锁可能导致这种情况。服务器上可能同时运行着其他东西,这些东西占用了此SP所需的资源,并导致CPU峰值

请阅读Profiler:


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


您可以尝试将带有重新编译的
添加到存储过程中,以便为每个调用获取新的执行计划。这会使查询速度稍微慢一点,但有时SQL Server在大多数查询中都会遇到异常糟糕的执行计划,在这些情况下,重新编译会有所帮助。

可能是参数嗅探,您手动使用的参数与应用程序运行时使用的参数不同,但是我认为你必须发布一些关于存储过程的代码/细节。我向SP添加了重新编译,一切都运行得很好!!把这篇文章写在一篇帖子里,这样我就可以给你答案了。乔纳斯根据正确的假设写出了答案,很高兴能帮上忙。:)我已经与Rackspace的DBA一起优化了所有四个SP。您是否优化了一个SP或您从Profiler中识别的SP?没有更多的优化需要对查询进行。作为查询的查询是即时的,作为SP的查询是延迟的。Andrew关于参数嗅探的建议是正确的。谢谢Jonas,这就是Andrew的建议!