------解决方案-------------------- DBCC FREEPROCCACHE 不加参数是将缓存中的所有执行计划删除,释放计划缓存将导致系统重新编译存储过程,而不重用缓存中的存储过程。这会导致查询性能暂时性地突然降低! --所以我们一般情况下不这样做,我们会根据动态管理视图查看我们想要释放缓存计划的句柄.得到句柄后根据这个16进制的句柄去释放缓存计划. 如果不报内存不足的错误尽量不去清除.. Msg 701, Level 17, State 123, Procedure GetAllRevisions_Monthly, Line 22 There is insufficient system memory in resource pool 'internal' to run this query. 就算是报了这个错误,也别忙着去清除缓存中的计划.毕竟他会对我们的系统造成影响, 我们要确认SQL Server是由于总体的工作负载太高而导致无法分配足够内存执行语句,还是这条语句本身执行的问题.在这个案例中的情形,该存储过程即使在单一用户访问的时候执行,也会 遇到这样的错误,并且在每次执行的时候都会出现同样的错。需要注意的是,这个存储过程在第一次执行的时候,会执行一分钟左右以后,报出错误信息。而当第二 次执行和以后多次执行的时候,都是不到一秒立即报错. 首先需要确认的就是,该内存问题是由于windows的内存缺乏导致的还是SQL Server自身的内存问题导致的。当windows遇到内存压力,没有可用内存的时候,OS被强制在其上运行的所有应用程序释放物理内存。SQL Server在这种情况下,由于buffer pool短时间之内需要释放大量内存并且急剧缩小大小,当时在SQL Server上执行的语句也会报出错误701,没有足够的内存执行语句。但是这个内存错误的本身是由于windows 强制收回内存导致的。我们会在另一个案例中详细讨论这个问题.