如何合理设置Sqlserver的服务器最大内存值

2017/9/17 22:38:06 人评论 次浏览 分类:服务器


服务器的内存资源是有限的,windows服务器上面运行的SQLServer 的默认的服务器最大内存是2147483647MB,当然这个也不表示 Sqlserver霸占着这么多的内存,它是动态的,如果其他应用程序需要,也会释放内存。但是如果是使用这个默认值,就会一直处于内存满格的状态,看起来随时内存不足的样子。

其实一般情况下,SQLServer 的动态内存的管理是没什么问题的,但是由于服务器长期不关机释放资源,加上服务器的其他应用程序的运行,内存会越来越不够,最终会出现内存溢出的错误。如果我们不知道服务器最大内存该如何合理设置,那么就无法掌控服务器的内存。

我在百度上花了一天的时候寻找和了解内存以及服务器维护设置相关的资料,找到的结果并不理想,给出的数据库服务器最大内存配置值的计算公式也不具备合理性,只是DBA的经验得出的值。后面我归纳了比较合理的公式,希望对大家有所帮助。

设置最大内存的时候要考虑目前系统运行的所有应用以及当前服务器数据库占用的内存的大小。

参考设置的最大内存值公式:

参考设置的最大内存值(M) = 服务器总内存  -  (  CurrUsedMemory  - CurrDBMemory + ReserveMemoryForOtherApp )


其中:
CurrDBMemory :当前数据库已经使用的内存值,可以通过下面的sql查询出来

Go
SELECT  
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB_工作集
FROM sys.dm_os_process_memory;  

ReserveMemoryForOtherApp:预留备用内存总内存是8G以上的服务器一般可以预留1600M,这里是为了给服务器的其他应用需要的预留的,如果4G内存可以少留点,800M一般也是足够。
CurrUsedMemory :当前已经使用的内存,这里可以通过任务管理器或者资源监视器可以得到。

关键的是预留内存的把控,根据服务器上运行的应用程序的占用情况决定,理论上,预留够给应用程序的,其他的应该都留给数据库。

其实前面已经说了,理论上不设置服务器最大内存值的话,其实是不会对系统的运行带来影响的,如果在开始的时候设置了合理的服务器最大内存值,那么后面就可以知道服务器其他应用程序占用内存的情况,以及内存消耗增速的情况,作为服务器运维人员了解这些情况就可以确定服务器的定期重启的周期等等。




相关资讯

  • 如何理解阿里云ECS的10%15%CPU性能基线

    我们经常在阿里云的优惠活动中看到一些性价比很高的云服务器 ECS,不过也经常看到有“10%基准 CPU 性能”或“15%基准 CPU 性能”之类的提示,那么到底这个 10%15%CPU 性能基线是什么意思呢?其实,只需要我们弄懂以下几个基本概念之后应该就差不多了解 10%15%CPU 性能基线是什…

    2019/8/17 16:46:50
  • 阿里云Ubuntu报sudo: unable to resolve host的错误

    Ubuntu 环境在每次执行命令的时候,会报如下错误:sudo: unable to resolve host iZbp1be5wmfo9n347gkgn8Z

    2018/2/15 14:52:01
  • VirtualBox出现UUID does not match the value和stored in the media registry的解决方案

    出现UUID does not match the value的这个错误,一般是在转移VirtualBox的磁盘时候,比如更换虚拟磁盘的目录的时候,或者是之前备份现在需要启动,又或者虚拟磁盘占用的空间比较大的时候需要转移到其他磁盘驱动器。这种情况,需要释放删除挂载的磁盘,之后再重新挂载该硬盘即可…

    2017/10/19 20:18:27
  • Centos 7 系统安装gnome可视化图形界面

    安装Graphical Administration Tools 不成功,出现“group graphical-admin-tools does not have any packages to install”和“Group graohical-admin-tools does have 1 conditional packages,which mayget installed.”的提示。

    2017/10/19 18:58:52