一般服务运行的时间比较久的时候会占用系统资源,比如内存的占用会越来越多,导致服务器的总体性能下降,甚至导致系统出现内存溢出的可能。最近客户的服务器内存不足,在使用的时候常常出现内存溢出的错误,一旦登录服务器进行维护的时候,都出现无法进行远程登录的情况,出现远程连接的时候闪退的情况,只能在晚上用户使用程度降下来的时候或者强制重启服务器才能再次远程桌面。所以内存占用的影响的还是比较大的,服务器的内存只要是Sqlserver占用比较多,当然有足够的内存留给Sqlserver是比较好的方式,但是服务器的内存资源有限,所以不能无限度的把内存留给 Sqlserver。在服务器维护是有必要对服务的内存的进行控制的。
客户的服务器的内存的是8G的,因为很久一段时间没有重启(因为白天有用户在使用,晚上又不可能整天惦记着要重启服务器),内存一直占用,内存一直下不去。然后让客户升级内存到16G。升级重启之后,这时候内存的使用是非常低。说明服务器一开始运行的时候并不需要占用很多的内存。
下面从服务器维护的角度说下如何解决服务器内存不足的问题:
1.给Sqlserver配置服务器最大内存。
设置最大内存的时候要考虑目前系统运行的所有应用占用的内存的大小。
CurrDBMemory :当前数据库已经使用的内存值,可以通过下面的sql查询出来
SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB_工作集
FROM sys.dm_os_process_memory;
ReserveMemoryForOtherApp:预留备用内存总内存是8G以上的服务器一般可以预留1600M,这里是为了给服务器的其他应用需要的预留的,如果内存比较紧张可以少留点,800M一般也是足够。
CurrUsedMemory :当前已经使用的内存,这里可以通过任务管理器或者资源监视器可以得到。
参考设置的最大内存值(M) = 服务器总内存 - ( CurrUsedMemory - CurrDBMemory + ReserveMemoryForOtherApp )
2.定期给服务器进行重启。
服务的定期重启是有必要的,释放一下无效占用的内存资源,从高可用的角度本来是不建议进行重启服务器的,导致用户短暂时间不可用。当然这也是目前单站点的时候会遇到这个问题,如果是部署了负载均衡的解决方案,那么就不用担心这个高可用的问题。
因为白天有用户在使用,晚上又不可能整天惦记着要重启服务器,这个工作可以交给服务器的自动任务。
以下是自动关机重启的的批处理命令,将其保存保存在txt文档中,然后修改后缀为.bat,然后给自动任务计划调用即可。具体的创建任务计划创建方法我这里不再赘述。
shutdown -r -t 0