SQL Server ->> Memory Allocation Mechanism and Performance Analysis(内存分配机制与性能分析)之 -- Minimum server memory与Maximum server memory
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的更多相关文章
- memcached学习——memcached的内存分配机制Slab Allocation、内存使用机制LRU、常用监控记录(四)
内存分配机制Slab Allocation 本文参考博客:https://my.oschina.net/bieber/blog/505458 Memcached的内存分配是以slabs为单位的,会根据 ...
- 你不知道的Eclipse用法:使用Allocation tracker跟踪Android应用内存分配
Android Tools中的DDMS带有一个很不错的跟踪内存分配的工具Allocation tracker.通过Alloction tracker,不仅知道分配了哪类对象,还可以知道在哪个线程.哪个 ...
- Memory Allocation with COBOL
Generally, the use of a table/array (Static Memory) is most common in COBOL modules in an applicatio ...
- A Reusable Aspect for Memory Allocation Checking
The checking logic would be refactored into an aspect file, as follows: after(void * s) : (call($ ma ...
- Memory Allocation in the MySQL Server
https://dev.mysql.com/doc/internals/en/memory-allocation-mysql-server.html MySQL Internals Manual / ...
- Advanced Memory Allocation 内存分配进阶[转]
May 01, 2003 By Gianluca Insolvibile in Embedded Software Call some useful fuctions of the GNU C l ...
- SQL Server内存性能分析
内存概念: Working Set = Private Bytes + Shared Memory Working Set:某个进程的地址空间中,存放在物理内存的那一部分 Private Bytes: ...
- .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 ...
- 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 ...
随机推荐
- WinForm之GDI画图步骤
Graphics g = this.CreateGraphics(); //这句是创建画布g,根据窗体得到窗体的画布 Pen p = new Pen(Color.Red, 2); //这句是创建一个红 ...
- em,rem,px的实际应用
看了好多的文章,就只是在看他们的换算,没有实际做出例子所以一直很疑惑,不知道到底是怎么写的.今天写了一个demo.务必彻底弄清楚. 先说三者的区别: 首先是我们常见的px. px: em:相对长度单位 ...
- 实验Complex
#include<iostream> #include<cmath> using namespace std; class Complex { public: Complex ...
- (转)基于CentOS 7安装Zabbix 3.4和Zabbix4.0
原文:https://blog.csdn.net/leshami/article/details/78708049 CentOS 7环境下Zabbix4.0的安装和配置实例-----------htt ...
- android 拍照和从相册选择组件
android 拍照及从相册选择组件 单独封装到一个 activity 中便于更好的复用 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和 ...
- Java入门系列-23-NIO(使用缓冲区和通道对文件操作)
NIO 是什么 java.nio全称java non-blocking(非阻塞) IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(bo ...
- step6: item与pipeline
目的:提取内容进行格式化输出,类似于字典 编写item文件 class JobBoleArticleItem(scrapy.Item): title = scrapy.Field() #支持传进任何数 ...
- git 检查是否有commit到本地但还没push的代码
使用 git status 命令可以得到以下结果 $ git status On branch dev_getTicketCnt Your branch is ahead of 'origin/mas ...
- cs端调用webApi
public class Httphelper { public static string Post1(string url, string postString) { using (WebClie ...
- spring web.xml基本配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...