我们有一台作为数据库服务器运行的Windows Server 2003(x64)。 数据库配备了32GB的RAM
通常数据库内存使用量(任务管理器)介于5-10%之间。 然而,有时数据库会突然猛烈地发射到100%,然后随机保留,并且不会对代码或执行进行任何更改。
所有支付或由我支付的研究都指向了一个存储过程。 当数据库为100%时,禁用此过程将使数据库恢复正常。
现在这听起来很明显,但这是一个奇怪的部分。
优化存储过程,内存使用量(来自执行计划)为0.01,这是非常好的。通常执行存储过程将立即返回结果集。我还支付了一个RackSpace Fanatic Support DBA来查看这个,他说他认为存储过程没有问题。
现在额外的奇怪的一点。
所以,虽然乍一看,听起来SP需要优化,但SP中的实际代码不是问题。
我很绝望!
答案 0 :(得分:3)
执行计划可以根据SP的输入参数和结果集的大小而改变。
您可以尝试将WITH RECOMPILE
添加到存储过程,以便为每个调用获取新的执行计划。它会使它稍慢一些,但有时SQL Server会遇到大多数查询异常糟糕的执行计划,并且重新编译会在这些情况下有所帮助。
答案 1 :(得分:1)
<强>探查:强>
SQL Server附带了一个名为Profiler的强大工具,可让您实时查看服务器上运行的查询。您应该运行探查器并找出实际发生的情况并使用它来查找罪魁祸首。
查询有4种测量值:内存,CPU,读取,写入。占用大量这些(单独或组合)并以高频率调用的SQL语句是优化的最佳选择。
运行配置文件并捕获输出后,您应该能够识别要优化的项目。然后,您可以运行SQL语句,查看执行计划并对其执行必要的优化。
(编辑:添加内容)
可能不是语句本身不是最优的,而是一些可能导致这种情况的锁定/阻塞/死锁。服务器上可能还有其他东西在占用此SP所需的资源,并导致CPU出现峰值。
阅读Profiler: