欢迎来到天天文库
浏览记录
ID:59777969
大小:40.91 KB
页数:7页
时间:2020-11-23
《MSSQLServer占用过多内存的解决方法.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、MSSQLServer占用过多内存的解决方法SQLServer2008或者R2的默认内存分配是2147483647MB,差不多算是无穷大,对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),SQLServer才会释放一点点内存。所以很多时候,我们会发现运行SqlServer的系统内存往往居高不下。SQLserver会把所有处理过的SQL操作缓存在内存里,这样就不用总去读硬盘了。例如你运行一个SELECT语句,那么SQLServer会将相关的数据页(SQLServer操作的数据都是以页为
2、单位的)加载到内存中来,下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。这类的缓存叫做数据缓存。还有一些其他类型的缓存,如执行存储过程时,SqlServer需要先编译再运行,编译后的结果也会缓存起来,下一次就无需再次编译了。但是如果长时间运行SQLServer,系统内存被用的差不多,再开启其他程序就有可能会报内存不足,因此需要清理内存占用。方法1:定期重启下SQLServer数据库服务,使用任务计划定期执行下边批处理:netstopsqlserveragentnetstopmssqlserverne
3、tstartmssqlservernetstartsqlserveragent这种方法最简单有效,但是只能临时的清除SQLServer缓存所占的内存空间,时间长了SQLServer还会把内存占满。而且很重要的是这种方法不能在SQLserver有连接的情况下使用,那样会让正在使用SQLServer的用户暂时无法连接SQLServer,甚至导致程序处错误。方法2:进入Sqlserver企业管理器,在数据库服务器名称上点击【右键】--【属性】--【内存】,在右边的【使用AWE分配内存】(sqlServer64的应该不用勾)左边
4、把对勾打上。在最大服务器内存(MB)上填入适当的大小,点【确定】,重启一下Sql服务方法3:usemasterselect@@lock_timeoutsetlock_timeout900000--15分钟select@@lock_timeout设置数据库每隔15分钟回收闲下来的进程,可以把时间设的短一些方法4:从过程高速缓存中删除所有元素2000里面可以用DBCCUNPINTABLE,但这个操作不会立即释放表内存Buffer2005/2008能够更自由的对SQL所占用的内存空间做处理如DBCCFREEPROCCACHED
5、BCCFREESESSIONCACHEDBCCFREESYSTEMCACHE('All')DBCCDROPCLEANBUFFERS这几个命令分别用来清除存储过程相关的缓存、会话缓存、系统缓存以及所有所有缓存。以上几个命令一般能释放缓存。但是有的时候不是很管用,因为虽然SQLserver会清除掉现有缓存,为新的缓存腾地方,但是不会因为Cache(缓存)释放了而释放已经占用的内存,此命令只会让SQLServer不会继续占领新的内存,无奈的是,SqlServer并没有提供任何命令允许我们释放不用到的内存。因此我
6、们只能通过动态调整SqlServer可用的物理内存设置来强迫它释放内存USEmasterGOEXECsp_configure'showadvancedoptions',1--开启advancedoptions设置开关GOEXECsp_configure'maxservermemory',5120--最大内存调整为5GBEXEC('RECONFIGURE')WAITFORDELAY'00:00:05'EXECsp_configure'maxserver
7、memory',20480--最大内存调整为20GBEXEC('RECONFIGURE')GOEXECsp_configure'showadvancedoptions',0--关闭advancedoptions设置开关GO
此文档下载收益归作者所有