第一类、

根据申请方式分:

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. 谈谈自己对于Auth2.0的见解

    Auth的原理网上有很多,我这里就不在赘述了. 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这 ...

  2. Android进阶练习一

    1.有序广播: https://github.com/wuzhuojun/BroadcastExample 说明: 在manifest.xml设置的广播是静态注册,只要软件安装在手机上广播就能够生效. ...

  3. JavaScript事件处理

    客户端javascript程序采用了异步事件驱动程序,在这种程序设计风格下,当文档,浏览器,元素,或与之相关的对象发生某些有趣的事件时,web浏览器就会产生事件.事件本身不是javascript对象. ...

  4. debian gnome 3插件

    1.gnome 配置-安装插件 http://maxubuntu.blogspot.com/2012/09/debian-gnome3.html hunagqf|hunaqf2|hunaqf3 2.快 ...

  5. Qt中一些常用的格式转换

    转自:http://blog.csdn.NET/yh_1988/article/details/7190356 用Qt经常头痛于一些格式不能通用的问题 在此记录备用 1 (20120112)QStri ...

  6. T-SQL 基于列的逻辑表达式 (CASE)

    CASE简介 基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后.由于这里讲的是T-SQL ...

  7. jQuery 获取 URL信息

    jQuery获取URL信息有很多方法,但是使用这个插件就非常爽了. 托管地址在:http://github.com/allmarkedup/jQuery-URL-Parser // http: //l ...

  8. Perl Symbolic Reference

    看一些模块的代码,很多时候通过*glob的方式来改变变量或者函数,这种方法称为Symbolic reference. 首先看一下*glob的结构,这个在之前的博文已经讲过,不做细述: SV = PVG ...

  9. 【转】android 电池(一):锂电池基本原理篇

    关键词:android  电池关机充电 androidboot.mode charger 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...

  10. 【转】nand flash坏块管理OOB,BBT,ECC

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...