第一类、

根据申请方式分:

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 的内存分类的更多相关文章

  1. 浅谈SQL Server 对于内存的管理

    简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...

  2. (转)浅谈SQL Server 对于内存的管理

    简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...

  3. Performance Monitor3:监控SQL Server的内存压力

    SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度.一个好的数据库系统,必定在内存中缓 ...

  4. SQL Server占用内存的认识

    SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer).执行缓存(Procedure Cache).以及SQL Server引擎程序.SQL Server引擎程序所占用缓存 ...

  5. SQL Server 2012 内存管理 (memory management) 改进

    SQL Server 2012 的内存管理和以前的版本相比,有以下的一些变化. 一.内存分配器的变化 SQL Server 2012以前的版本,比如SQL Server 2008 R2等, 有sing ...

  6. SQL Server 2014内存优化表的使用场景

    SQL Server 2014内存优化表的使用场景 最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表是从SQL Server 2014开始引入,可能大家对内存优化表 ...

  7. SQL Server 2008内存及I/O性能监控

    来源: it168  发布时间: 2011-04-12 11:04  阅读: 10820 次  推荐: 1   原文链接   [收藏]   以下均是针对Window 32位系统环境下,64位的不在下面 ...

  8. 优化SQL Server的内存占用之执行缓存

    在论坛上常见有朋友抱怨,说SQL Server太吃内存了.这里笔者根据经验简单介绍一下内存相关的调优知识   首先说明一下SQL Server内存占用由哪几部分组成.SQL Server占用的内存主要 ...

  9. SQL Server“吃内存”的解决

    现象:Web服务器中SQL Server占用内存非常高,加内存后,SQL Server又吃掉新加的内存,好像内存永远不够用一样. 分析:其实这并不一定是由于SQL Server活动过度造成的,在启动S ...

随机推荐

  1. python 多线程、多进程

    一.首先说下多线程.多进程用途及异同点,另外还涉及到队列的,memcache.redis的操作等: 1.在python中,如果一个程序是IO密集的操作,使用多线程:运算密集的操作使用多进程. 但是,其 ...

  2. ajax请求解析springmvc返回的json数据

    需要使用的框架 spring3.0 jquery1.9.0(简化ajax开发的js库) Jackson(json处理器):jackson-core-asl-1.9.2.jar,jackson-mapp ...

  3. Java iText5.5.1 绘制PDF表格

    iText下载链接:http://sourceforge.net/projects/itext/files/ 会有两个文件夹:extrajars中的extrajars-2.3.jar文件用于解决中文不 ...

  4. BZOJ NOI十连测 第二测 T1

    出题人居然是个哲学家.. 26%的程序,太SB了...本来我的想法也是二分+贪心,但是贪心是个怪怪的SX贪心.. #include<algorithm> #include<cstdi ...

  5. NFC应用(二)读写器模式

    NFC第二种应用场境就是所谓的读写器模式.既然有卡,当然就会有读写器,这两种模式是配合在一起使用的.两个卡放一起不能通信,两个读写器模式的设备也不能通信. NFC读写器一般支持以下一种或多种协议:Mi ...

  6. 创业不要在IT业内创(市场太小,而且都喜欢自己折腾、没有花钱的习惯)

    精神是好的.但是,我看了你的产品和网站:你选的创业方向基本是死路一条,我劝你该放弃就放弃.我判断你的思路还局限在IT行业内,创业不要在IT业内创,要走出去,睁开眼看看别人的世界,自己体会.我不是打击你 ...

  7. Linux APP源码级编译安装

    首先需要了解下tar包. 以下文章作出解释了: http://www.cnblogs.com/laipDIDI/articles/2214270.html http://baike.baidu.com ...

  8. 中间容器 - JTabbedPane的用法的最简举例

    摘自并整理http://blog.csdn.net/liu_zhen_wei/article/details/6445345 JTabbedPane的用法的最简举例 package com.wst.b ...

  9. SQL递归查询实现跟帖盖楼效果

    网易新闻的盖楼乐趣多,某一天也想实现诸如网易新闻跟帖盖楼的功能,无奈技术不佳(基础不牢),网上搜索了资料才发现SQL查询方法有一种叫递归查询,整理如下: 一.查询出 id = 1 的所有子结点 wit ...

  10. 格而知之4:寻找EXC_BAD_ACCESS

    EXC_BAD_ACCESS算是一个比较常见的错误,大部分情况下,它出现在某个对象还未初始化或已被释放后,还去试图访问这个对象的时候,即是在出现悬挂指针的时候(当然也有非悬挂指针导致的EXC_BAD_ ...