Minimum server memory与Maximum server memory是SQL Server下配置实例级别最大和最小可用内存(注意不等于物理内存)的服务器配置选项。它们是管理SQL Server内存的途径之一。

Minimum server memory与Maximum server memory

Minimum server memory(MB): 最小服务器内存。一旦超过这个线就不会再把内存换回去。但是也不是说SQL Server一启动马上就申请这么多的内存。

Maximum server memory(MB): 默认是2147483647。这个值一旦设置马上生效,无需重启SQL Server服务。

配置Minimum server memory与Maximum server memory的方法

SSMS的UI界面或者调用存储过程sp_configure

USE master;
EXEC sp_configure 'show advanced option', 1;
RECONFIGURE;
exec sp_configure 'min server memory (MB)', 5120;
exec sp_configure 'max server memory (MB)', 10240;
RECONFIGURE WITH OVERRIDE;

如果你把这个Maximum server memory(MB)设置得太小,容易出现SQL Server没有足够的内存分配给新的连接。一旦出现这种情况,你很可能不得不用DAC连接去设置Maximum server memory(MB)。所以说设置这个东西需要谨慎,评估好本机服务器的情况。

Server Memory在SQL Server 2008和SQL Server 2012下所代表(包含)的内存类型的不同

  SQL Server 2005/2008 SQL Server 2012及以后
Buffer Pool ● ●
Single Page Allocation ● ●
Multi Page Allocation ○ ●
CLR Allocation ○ ●
SQL Server内部线程使用的栈 ○ ○
其他SQL Server内部模块,如扩展存储过程、sp_OA创建的OLE对象、Linked Server Provider使用的内存页面 ○ ○

合理配置SQL Server内存

在配置SQL Server之前需要了解清楚

1)Windows操作系统出了SQL Server外是否还有其他重要的应用程序,比如Web服务器

2)SQL Server当前实例是否是服务器上唯一一个SQL Server实例

服务器内存大小 预留给Windows的内存大小 预留给其他应用程序的内存大小 Max Server Memory大小
4G 1G XXXX  
8G 2G XXXX  
大于8G 3~4G XXXX  

设置Max Server Memory大小的意思是避免出现SQL Server和其他应用程序出现互相争抢内存的情形,毕竟SQL Server是那种非常喜欢内存的应用程序。比如你把Web服务器和SQL Server数据库服务器放在同一台机器上,结果SQL Server把大部分内存都吃了,导致Web服务器没有足够的内存运行代码指令去数据库中获取数据,这样也没意义。Minimum Server Memory一般不建议设置,因为就算你设置了,别的进程缺内存Windows还是会让你让出内存。设置这个还不赋予SQL Server服务账号Locked pages in memory权限。

按照微软自己的说法(Effects of min and max server memory),SQL Server会按需向Windows申请内存。在达到Minimum server memory设置的内存量之前不会释放任何内存。缓冲池不会让内存分配低于Minimum server memory设置值,也不会超过Maximum server memory设置值。我对这点优点怀疑,特此做了个实验。实验是这样的。我把Minimum server memory设置成1500MB,然后重启SQL Server服务。通过Windows的任务管理器观察到SQL Server服务进程的内存占用量一路攀升到1.2左右停止。这个应该就是SQL Server初始化申请的内存量吧。然后我运行了一条脚本(返回大约数十亿数据量的查询)去让SQL Server去申请更多的内存。通过任务管理器观察到SQL Server服务进程的内存占用量攀升到了1.6G左右。同时打开浏览器去打开十几个页面(像腾讯体育、优酷)这类网站去让浏览器用尽操作系统的可用内存。这个时候我停掉了脚本。我观察到SQL Server在接下来1分钟内内存下降到0.9-1.1G间。我关闭所有的页面。过了数十秒。SQL Server进程的内存占用量下降到只有200MB。我不知道怎么解释微软在上面链接中说的。有一点不同的是文章中应用的SQL Server版本是2008,而我测试的SQL Server版本是2014。

这么看来微软和一些书上说的一旦SQL Server获得的内存到达Minimum server memory线后就不会让出内存是指在没有任何其他的应用程序遇到内存压力的情况下的结论吧。既然Minimum server memor没办法保证SQL Server的内存不被其他的进程抢去,我觉得Minimum server memory确实没太多意义。

SQL Server ->> Memory Allocation Mechanism and Performance Analysis(内存分配机制与性能分析)之 -- Minimum server memory与Maximum server memory的更多相关文章

  1. memcached学习——memcached的内存分配机制Slab Allocation、内存使用机制LRU、常用监控记录(四)

    内存分配机制Slab Allocation 本文参考博客:https://my.oschina.net/bieber/blog/505458 Memcached的内存分配是以slabs为单位的,会根据 ...

  2. 你不知道的Eclipse用法:使用Allocation tracker跟踪Android应用内存分配

    Android Tools中的DDMS带有一个很不错的跟踪内存分配的工具Allocation tracker.通过Alloction tracker,不仅知道分配了哪类对象,还可以知道在哪个线程.哪个 ...

  3. Memory Allocation with COBOL

    Generally, the use of a table/array (Static Memory) is most common in COBOL modules in an applicatio ...

  4. A Reusable Aspect for Memory Allocation Checking

    The checking logic would be refactored into an aspect file, as follows: after(void * s) : (call($ ma ...

  5. Memory Allocation in the MySQL Server

    https://dev.mysql.com/doc/internals/en/memory-allocation-mysql-server.html MySQL Internals Manual  / ...

  6. Advanced Memory Allocation 内存分配进阶[转]

    May 01, 2003  By Gianluca Insolvibile  in Embedded Software Call some useful fuctions of the GNU C l ...

  7. SQL Server内存性能分析

    内存概念: Working Set = Private Bytes + Shared Memory Working Set:某个进程的地址空间中,存放在物理内存的那一部分 Private Bytes: ...

  8. .NET Memory Allocation Profiling with Visual Studio 2012

    .NET Memory Allocation Profiling with Visual Studio 2012 This post was written by Stephen Toub, a fr ...

  9. linux 下tomcat出现 Native memory allocation (malloc) failed to allocate 1915224064 bytes for committing reserved memory问题

    ## There is insufficient memory for the Java Runtime Environment to continue.# Native memory allocat ...

随机推荐

  1. linux 安装python

    wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz #下载安装包 tar zxvf Python-3.6.0.tgz #解压 . ...

  2. plsql起别名出现???乱码,需要配置环境变量

    NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  3. Unity5 2D Animation

    1. 所有的动画保存在 .anim 后缀的文件里.2. Animation 标签用来编辑一堆 Animation clip,每一个clip是一个图片序列,也就是动图.动画的最小控制单位就是clip,一 ...

  4. (转)nginx 常用模块整理

    原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...

  5. 026-log4j配置文件模板

    模板一: ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender lo ...

  6. 用C语言实现Ping程序功能---转

    ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这 ...

  7. Java给树加子节点个数统计

    通过后台实现 private List<Photo> getChildren(Photo photo) { List<Photo> children = new ArrayLi ...

  8. 使用YUM安装MySQL 5.5(适用于CentOS6.2/5.8及Fedora 17/16平台)

    目前CentOS/Red Hat (RHEL) 6.2官方自带的mysql版本为5.1,mysql5.5已经出来了. 相比mysql5.1,mysql5.5不仅在多个方面进行了改进: 性能上有了很大提 ...

  9. 编译器错误消息: CS0012: 类型“System.Object”在未被引用的程序集中定义。必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。

    编译器错误消息: CS0012: 类型“System.Object”在未被引用的程序集中定义.必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neu ...

  10. 使用union合并查询

    语法: select …..from 表1 union select ……from 表2 2. 合并查询的特点 ① 合并的表中的列的个数.数据类型必须相同或向兼容. ② union默认去掉重复值,如果 ...