第一类、

根据申请方式分:

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 create routine 权限的一些说明

    1.如果用户有create routine 权限那么他就可以创建procedure | function . 2.如果用户创建了procedure | function 那么mysql 会自动赋予它对 ...

  2. mac终端 使用摘要

    Root  (拥有对此计算机的所有权限) 查看当前用户:who 切换到root(默认系统是不会使用root的):sudo -s  然后输入密码 更改密码:passwd

  3. Windows7里的“计算器”你真的会用吗?

    “计算器”是不同Windows版本中的必备工具,虽然功能单一,但的确是人们日常工作中不可缺少的辅助工具,本文就来谈谈它的使用. 一.标准型和科学型两种面板 我们既可从Windows附件菜单中启动它,也 ...

  4. T-SQL 脚本

    1.USE语句 USE语句用于设置当前数据库,如果没有USE语句,那么就由执行脚本的任何用户来确定执行脚本时当前数据库是正确的.如果只是一个通用脚本,那么省去USE语句实际上可能更有益.通常,如果在脚 ...

  5. jQuery UI 之 EasyUI 快速入门

    jQuery EasyUI 基础 转载自(http://www.shouce.ren/api/view/a/3350) jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面 ...

  6. UESTC_韩爷的情书 2015 UESTC Training for Graph Theory<Problem H>

    H - 韩爷的情书 Time Limit: 6000/2000MS (Java/Others)     Memory Limit: 262144/262144KB (Java/Others) Subm ...

  7. 解决cognos以远程db2数据库为数据源的连接失败问题

    问题现象为使用远程的db2来创建数据源时,测试连接时不通,好多人都说是驱动问题,将db2cc.jar拷贝到某lib目录下,实验不通: 在看到某哥们的博客时最后提了一句,说需要将数据库catalog到本 ...

  8. wget命令3(转载)

    Wget下载终极用法和15个详细的例子 Wget是一种很好用的因特网下载工具,他具有的很多特性是其他工具所不能比拟的,再者他是一个轻量级可配置的下载工具. 本文结合例子介绍Windows下wget的多 ...

  9. 对中级Linux 用户非常有用的20 个命令

    也许你已经发现第一篇文章非常的有用,这篇文章是继对初级Linux用户非常有用的20个命令的一个延伸. 第一篇文章的目的是为新手准备的而这篇文章则是为了Linux的中高级用户.在这里你将学会如何进行自定 ...

  10. JS封装cookie操作函数实例(设置、读取、删除)

    本文实例讲述了JS封装cookie操作函数.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...