第一类、

根据申请方式分:

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. MySQL--连接属性

    The capability flags are used by the client and server to indicate which features they support and w ...

  2. How to use Request js (Node js Module) pools

    Can someone explain how to use the request.js pool hash? The github notes say this about pools: pool ...

  3. Android应用开发中Intent的作用及使用方法

    Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意 ...

  4. NFC应用(三)点对点(P2P)通信

    点对点(P2P)模式允许两个NFC设备之间建立通信链接并交换数据,与读写器.卡模式不一样的就是,P2P模式下数据交互是双向的. P2P遵循ISO18092规范,建立链接后使用NDEF(NFC Data ...

  5. 《MATLAB数据分析与挖掘实战》赠书活动

    <MATLAB数据分析与挖掘实战>是泰迪科技在数据挖掘领域探索10余年经验总结与华南师大.韩山师院.广东工大.广技师   等高校资深讲师联合倾力打造的巅峰之作.全书以实践和实用为宗旨,深度 ...

  6. C pointers

    指向整型数组指针int (*p)[10] = matrix;增加这个指针的值使它指向下一个整型数组 指向整型指针int *pi = &matrix[0][0];int *pi = &m ...

  7. 在国内使用cnpm代替npm

    npm是Node.js的模块依赖管理工具,由于使用npm安装包是从国外服务器下载,在国内很容易受到网络的影响,速度非常慢,因此可以选用cnpm.cnpm可以使用淘宝团队提供的淘宝npm镜像,你可以用此 ...

  8. 华为Java笔试题

    华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...

  9. SSH框架-unexpected token: * near line 1, column 8 [select * from tb_chaper where course_id = 2];报错解决方法

    SSH项目,访问jsp页面出现报错,控制台显示报错信息: org.springframework.orm.hibernate3.HibernateQueryException: unexpected ...

  10. ORACLE物理存储结构

    1.查看数据库实例基本信息: SQL> SELECT DBID,NAME,CREATED,LOG_MODE,OPEN_MODE,FORCE_LOGGING,CURRENT_SCN,FLASHBA ...