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 ...
随机推荐
- 【温故知新】C#基于事件的异步模式(EAP)
在开发winform和调用asp.net的web service引用的时候,会出现许多命名为 MethodNameAsync 的方法. 例如: winform的按钮点击 this.button1.Cl ...
- springboot整合spring data jpa 动态查询
Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询,在实现动态查询时我们需要用到Criteria API,主要是以下三个: 1.Criteria ...
- 使用vmware虚拟机安装linux
- Java入门系列-24-实现网络通信
互联网上那么多设备,java 是如何与其他设备通信的呢?这次的内容是网络通信的基础,有了它咱们才能上网页.玩游戏.视频聊天. Socket 客户端套接字 Socket 客户端套接字,用于连接互联网提供 ...
- FZU2177——ytaaa——————【区间dp】
ytaaa Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- java.lang.NumberFormatException: For input string: "1" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang
java.lang.NumberFormatException: For input string: "1" at java.lang.NumberFormatException ...
- AngularJS中的动画实现
AngularJS 动画 AngularJS 提供了动画效果,可以配合 CSS 使用. AngularJS 使用动画需要引入 angular-animate.min.js 库. <script ...
- bitbucket 源代码托管
5个人以下可以免费使用,不限制仓库的数量; 国外的注册需要开启蓝灯FQ; 1.注册账号 maanshancss w1-g1@qq.com;创建仓库; 然后拷贝现有项目 然后提交 然后push; 2.写 ...
- Java内存溢出定位和解决方案(new)
引起内存溢出的原因有很多种,列举一下常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据:2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收:3.代码中存在死循环 ...
- java 中国网建实现发送短信验证码
现在中国网建上注册一个自己的账户, 然后里面有代码案例,也有相应的下载jar包的地址 package com.direct.note; import java.io.IOException; impo ...