我们有一个Windows 2003 (x64)作为数据库服务器运行。数据库配有32 of内存
通常,数据库内存使用率(任务管理器)在5-10%之间。然而,有时数据库突然上升到100%,并保持在那里,随机和没有任何变化的代码或执行。
所有的研究,无论是由我支付的,都指向了一个单一的存储过程。当数据库为100%时,禁用此过程将使数据库恢复正常。
这听起来很明显,但这是奇怪的部分。
对存储过程进行了优化,内存使用量(来自执行计划)为0.01,这是非常好的。通常,执行存储过程将立即返回结果集。我还支付了一个RackSpace狂热的DBA来查看这个问题,他说他认为存储过程没有问题。
现在是多余的线位。
运行SP的instantaneous.
。
因此,虽然乍一看,SP需要优化,但SP中的实际代码并不是一个问题。
我绝望了!
发布于 2009-12-02 10:36:24
执行计划可以根据SP的输入参数和结果集的大小而更改。
您可以尝试将WITH RECOMPILE添加到存储过程中,以便为每个调用获得一个新的执行计划。它将使其速度稍微慢一点,但有时SQL Server会对大多数查询执行异常糟糕的计划,在这些情况下重新编译会有所帮助。
发布于 2009-12-02 10:35:44
Profiler:
server提供了一个名为Profiler的很好的工具,它可以让您实时查看在服务器上运行的查询。你应该运行分析器,找出到底发生了什么,然后用它找出罪魁祸首。
查询有4种度量:内存、CPU、读、写。占用大量这些语句(单独或合并)并以高频率调用的SQL语句是进行优化的最佳选择。
运行配置文件并捕获输出后,您应该能够识别要优化的项。然后可以运行SQL语句,检查执行计划并对其执行必要的优化。
(编辑:添加内容)
可能不是语句本身不是最优的,而是一些锁/阻塞/死锁可能导致这种情况。可能在服务器上同时运行的其他东西正在占用此SP所需的资源,并导致CPU激增。
阅读Profiler:
http://msdn.microsoft.com/en-us/library/ms187929.aspx
https://stackoverflow.com/questions/1831978
复制相似问题