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 gpasswd

    gpasswd命令 功能:管理组用法:gpasswd[-a user][-d user][-A user,...][-M user,...][-r][-R]groupname参数:-a:添加用户到组- ...

  2. 根据word模版导入word中用户填写的数据

    背景 客户有个需求:从word格式文档中读项目关键信息到数据库中,如:第一个表格中的联系人,项目名之类的信息,word中的格式不是固定的,可以会有些改动. 分析 方案1:读取第一个表格,然后再读取表格 ...

  3. openerp学习笔记 模块结构分析

    以OpenERP7.0中的 hr_expense 模块为例: 如图中代码所示: __init__.py :和普通 Python 模块中的__init__.py 作用相同,主要用于引用模块根目录下的.p ...

  4. 如何在cmd窗口里快速且正确打开任意位置路径(各版本windows系统都适合)(图文详解)(博主推荐)

    问题的由来 有时候,我们很苦恼,总是先系统键 + R,然后再去手动敲.尤其对win7系统比较麻烦 解决办法 方法一:复制路径(这点对win10系统做得好,直接可以复制) ,win7系统的话可能还需要设 ...

  5. nginx文件访问403问题

    配置测试环境nginx时,增加了一个新的用户用来上传资源,所以想着就直接把静态资源放在新用户的home目录.为此,还特地设置了相应目录的所有用户都可以读取. chmod 755 /home/tom/s ...

  6. Android如何避免输入法弹出时遮挡住按钮或输入框

    在AndroidManifest.xml中为对应的activity添加android:windowSoftInputMode="adjustResize" 在AndroidMani ...

  7. PHP发送返回404状态码

    1. 默认的由Apache自动处理的404 修改Aache的配置文件 httpd.conf 中的 ErrorDocument 404 /404.html 或者使用 .htaccess文件,同时有要把 ...

  8. 深入redis内部--事件处理机制

    1. redis事件的定义 /* State of an event based program */ typedef struct aeEventLoop { int maxfd; /* highe ...

  9. IIS调试技术之 Debug Diagnostic (调试诊断)

    IIS 调试技术之 Debug Diagnostic (调试诊断) 1      概述 1.1  文档简介 系统出现错误或崩溃,免不了要进行调试.调试能进行的前提是错误能重现,但实际上要重现一个错误有 ...

  10. ,SQL语句关键词以及实例

    1.select:功能:查找,语法:select 列名 from 表名(注:可以一次从一个表中查询多个列或者从多个表名中查询资料) 实例:select Name from Table1,返回Table ...