SQL Server 的内存分类
第一类、
根据申请方式分:
commit 型
它是指先reserve申请一大块,再通过commit提交后得到的空间。这种方式申请到的空间可以启用 awe !
stolen型
与commit 相对应!它不用reserve只是直接申请。它不能申请 AWE 扩展出的内存。
第二类、
根据申请空间的大小分:
single page allocation(buffer pool)型:
如果要申请的空间大小小于8KB SQL Server会慷慨的分给8KB(一个数据页)!
multiple page allocation(MemToLeave)型:
如果申请的页面内存大于8KB 、它申请多 SQL Server 就给它多少!
-----------------------------------------------------------------------------------------------------------------------------------------------
总结:
1、database cache 由于都是数据页、所以它存储在single page allocation(buffer pool)里
2、connection 它存储在哪这个它自己说了不算,要看network package size 的脸色、
network package size默认是4KB所以connection 默认存储在single page allocation(buffer pool)里,不幸的是
network package size 的大小是可以通过 sp_configure 调整的。所以connection 也可能存储在multiple page allocation中
3、 general (锁的数据结构、事务上下文、表格索引的元数据)它们也是动态的,如果它们比较小就存储在single page allocation中
如果你把语句写的比较长它们就存储在multiple page allocation 中
4、第三方的代码、SQL server是不知道它有多长的、所以把它存储在mulitple page allocation 中。
5、线程、因为每个线程的数据结构大小最小为512KB、所以把它存储在mulitple page allocation 中。
下面说明一下内存的去向、
(以下以32位系统 4G内存为例,256 线程)
1、multiple page allocation:
之所以又叫 MemToLeave 是因为SQL Server 在启动时把这块地址预留了一下、预留多少
是这样算出来的。 256 + threads*0.5MB ; threads 是指最大线程数、可以通过sp_configure查看。
根据上面表达式可以算出 multiple page allocation = 384MB;当sql server的mulitple page allocation
到达384MB时、sql server 也就再也没有办法申请这种内存了。
2、single page allocation :
multiple page allocation 的大小确定后 、single page allocation 的大小也就知道了
single page allocation = (2G - 384MB) = 1664MB 、也就是 single page allocation 的最大值
SQL server 刚刚启动时用不了 1664MB、当sql server 使用量达到 1664MB 或 max server memory
参数所指定的值时、sql server就再也不能申请这种内存了、single page allocation 的值也就被限制了下来。
然、
如果内存大于 4G 也就说用户太的内存也就大于2G、且开启了 AWE 的话、多余的内存也是可以被使用上的。
前面说了AWE 的内存只可以通过 reserve\commit 方式供database cache 使用,别的用不了这块内存,这
样 singel page allocation 的stolen 最多可以用 1664MB ,database cache 可以用AWE 扩展出来的空间。
然、
如果在64的机器上装 32位的SQL Server 、因为64位的操作系统不用32位应用程序的地址空间、所以啊SQL
server 最高可用4G; 所以 single page allocation = (4G-384) = 3664MB;
SQL server 用最近最少使用算法淘汰内存中的页面。
SQL Server 的内存分类的更多相关文章
- 浅谈SQL Server 对于内存的管理
简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...
- (转)浅谈SQL Server 对于内存的管理
简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...
- Performance Monitor3:监控SQL Server的内存压力
SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度.一个好的数据库系统,必定在内存中缓 ...
- SQL Server占用内存的认识
SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer).执行缓存(Procedure Cache).以及SQL Server引擎程序.SQL Server引擎程序所占用缓存 ...
- SQL Server 2012 内存管理 (memory management) 改进
SQL Server 2012 的内存管理和以前的版本相比,有以下的一些变化. 一.内存分配器的变化 SQL Server 2012以前的版本,比如SQL Server 2008 R2等, 有sing ...
- SQL Server 2014内存优化表的使用场景
SQL Server 2014内存优化表的使用场景 最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表是从SQL Server 2014开始引入,可能大家对内存优化表 ...
- SQL Server 2008内存及I/O性能监控
来源: it168 发布时间: 2011-04-12 11:04 阅读: 10820 次 推荐: 1 原文链接 [收藏] 以下均是针对Window 32位系统环境下,64位的不在下面 ...
- 优化SQL Server的内存占用之执行缓存
在论坛上常见有朋友抱怨,说SQL Server太吃内存了.这里笔者根据经验简单介绍一下内存相关的调优知识 首先说明一下SQL Server内存占用由哪几部分组成.SQL Server占用的内存主要 ...
- SQL Server“吃内存”的解决
现象:Web服务器中SQL Server占用内存非常高,加内存后,SQL Server又吃掉新加的内存,好像内存永远不够用一样. 分析:其实这并不一定是由于SQL Server活动过度造成的,在启动S ...
随机推荐
- python笔记之itertools模块
python笔记之itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生 ...
- python bottle 框架开发任务管理系统 V_1.0版
经过1-2个星期的开发,现在开发了个半成品(UI现在比较烂,因为我的前端本来就很差,将就下吧),大概功能如下:用户功能(添加.删除.修改),添加部门功能,任务管理功能(添加.删除.修改,详细).项目管 ...
- nodejs 如何使用upgrade,并且C/B 发送消息
1 const http = require('http'); const querystring = require("querystring"); var postData = ...
- 【Xamarin挖墙脚系列:关闭 OS X El Capitan 中 SIP 安全设置功能】
比如需要修改内核配置文件: com.apple.Boot.plist 那么我们需要解锁权限. 禁止SIP模式,那么就可以修改此文件了. 在 OS X El Capitan 中有一个跟安全相关的模式叫 ...
- Unix/Linux环境C编程入门教程(33) 命令和鼠标管理用户和组
Linux是一个多用户.多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务.UNIX系统具有稳定.高效.安全.方便.功能强大等诸多优点,自20世纪70年代开始便运行在许多大型和小型计算 ...
- Farming
Problem Description You have a big farm, and you want to grow vegetables in it. You're too lazy to s ...
- [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数
如何获取参数:http://www.cnblogs.com/anytao/archive/2009/04/23/anytao-mvc-02-actionauthorize.html 由问题引出 在AS ...
- .Net插件编程模型:MEF和MAF[转载]
.Net插件编程模型:MEF和MAF MEF和MAF都是C#下的插件编程框架,我们通过它们只需简单的配置下源代码就能轻松的实现插件编程概念,设计出可扩展的程序.这真是件美妙的事情! 今天抽了一点时间, ...
- mvc 日历控件
第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...
- 实现怎样支持Android重力感应器Sensor编程
添加当重力变化时的处理函数 在创建监听器时调用的函数 doSomething(x, y, z) 是自己定义的方法. 当手机倾斜方向改变时,监听器会调用该方法. 我们要做的,就是填充该方法,用于在重力发 ...