SQL Server 内存和换页(Paging)
在进程开始执行时,进程首先申请虚拟地址空间VAS(Virtural Address Space),VAS是进程能够访问的地址空间,由于VAS不是真正的物理内存空间,操作系统必须将VAS隐射到物理内存空间,进程才能存储进程上下文(process context),真正执行下去。VAS可能比物理内存大很多,VAS存放的数据信息不一定都在物理内存中,OS会根据其使用情况,决定什么时候将数据存储在物理内存中,什么时候存放在Paging File里。
进程运行在物理内存地址空间PAS(Physical Address Space)中,进程执行时所需的信息也存放在物理内存中,操作系统通过为VAS和PAS建立mapping 关系来为进程提供物理内存。进程只需要申请VAS,物理内存由OS动态分配。
虚拟内存管理器VMM(Virtual Memory Manager)通过管理每个进程的VAS来管理物理内存。在进程需要内存时提供VAS,将所需的部分物理内存映射到VAS。
Working Set:为了有效使用物理内存,物理内存不是一次性全部提供给进程,而是分多次提供,在进程真正执行时分配物理内存,在执行完成之后,回收物理内存,供其它进程使用。Working Set是进程上下文(process context)拥有的物理内存页面的集合,即当前进程拥有的物理内存页面的集合。
Page Fault:VMM会在必要时从VAS中回收物理内存,将驻留在物理内存中的数据存储在硬盘上的Paging File中,这样能保证数据不丢失,同时释放的物理内存页面供其它进程使用。当进程再次需要内存时,VMM会从Paging File中查找数据,分配空闲的物理内存页面,将数据写入物理内存页面中,然后将新的物理内存页面映射到进程需要操作的VAS中,获得所需的数据和内存空间,进程的Working Set增加一个物理内存页面,这就是一次Page Fault,即访问一个存在于VAS中,但是不存在于当前process的working set的物理内存页面。

- VAS:Virtual Address Space,是App能够申请访问的最大地址空间。
- Physical Memory:对SQL Server 来说,频繁访问的数据对象长时间驻留在Physical Memory中,才能达到最优的性能。
- Reserved Memory:申请将VAS的一段地址空间Reserve。保留的只是VAS上的一段地址,而不是真正的Physical memory。
- Committed Memory:对Reserved的部分 Memory Page 进行Commit,Commit 操作是建立VAS 和 Physical memory 之间的映射,因此Committed Memory将隐射到实际的Physical Memory中。即App正式在物理内存中申请一段空间。
- VAS中存储的数据不一定存储在Physical Memory中,Windows 根据App的使用情况,决定存放在 physical memory 或 page file。如果存储在Page file中,App在访问时,必须进行一个Disk IO动作,称作 Paging In/Out(换进或换出)。
- 分两步来Reserve 和 Commit 内存,通过推迟页面的提交来减少物理内存的使用。
- Workset 是 Committed Memory的一部分,是Process在运行时使用的物理内存。
- Page Fault:App访问一个处于Reserved Memory中的Page,但是该page不存在于Workset,就会发生一次Page Fault。如果目标Page 存在于Page File(Disk File),那么OS会进行一次IO,将目标Page从Disk读取到Workset中,称作Hard falut;如果目标Page存在于committed memory,那么只需要将目标Page重定向到Workset中,称作Soft Fault,Soft Fault对性能的影响微乎其微。
- 手绘一张图:SQL Server 是预先 Reserved 一块大的内存,在使用的时候,一块一块的提交Commit,而committed Memory 在访问时转换为物理中,可以理解,committed memory 是SQL Server使用的物理内存,能够向物理内存Page中写入数据和读取数据。
当SQL Server出现内存压力时,需要关注操作系统的的Committed Memroy, Available Memory和 Hard Fault。
1, Commit memory是将reserverd memory(virtual memory) 转换为 physical memory,是app真正使用的物理内存。
OS 能够Commit的最大内存空间是所有Physical memory+ Page File(缓存文件),如果Committed Memroy接近最大内存空间,那么说明系统的内存使用已经接近极限。如果Page File不能自动增长,系统将不能提供更多的内存空间。
2, Page File 是文件缓存,OS用于临时存储内存中Page的Disk File。如果内存不足,那么 OS会将部分page 存储在Page File中,产生一次Disk File的Write 操作;如果App需要用到Page File中的Page,那么OS会将目标Page从Page File中读取到内存中,产生一次Disk File的Read操作。如果Page File的%Uage高,说明App实际需要的内存和committed memory的差距较大,App需要频繁的将Page存储到Disk File中。
Page Fault:Hard Page Fault是指OS将目标Page从Page File读取到物理内存中,由于会产生一次Disk IO,对App的性能影响较大。Soft Page Fault 是指目标Page存在于物理内存中,只是需要重定向到Workset中,对App的性能影响微乎其微。
对于一个性能良好的SQL Server 系统来说,Hard Page Fault 应该保持在一个较小的数值,Disk 的 Paging 动作越少越好。系统存在足够的内存,会使目标Page能够长时间的驻留在物理内存中,而不需要频繁的进行Disk的Paging动作。
如果内存不足,OS和 SQL Server 会在物理内存和文件缓存之间做大量的Paging 动作(Page的换进和换出),这会导致大量的Disk IO,使得Disk IO比较繁忙;OS要做Paging 动作,所带来的Disk IO的动作必须运行在核心态下,所以会核心态的CPU时间会升高,而用户态的CPU时间反而不会很高。一般情况下,用户态的CPU时间很高说明SQL Server 正在全力工作。
SQL Server 内存和换页(Paging)的更多相关文章
- Sql Server 内存相关计数器以及内存压力诊断
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中 ...
- SQL SERVER 内存分配及常见内存问题 简介
一.问题: 1.SQL Server 所占用内存数量从启动以后就不断地增加: 首先,作为成熟的产品,内存溢出的机会微乎其微.对此要了解SQL SERVER与windows是如何协调.共享内存.并且SQ ...
- SQL Server内存性能分析
内存概念: Working Set = Private Bytes + Shared Memory Working Set:某个进程的地址空间中,存放在物理内存的那一部分 Private Bytes: ...
- SQL SERVER 内存分配及常见内存问题(1)——简介
原文:SQL SERVER 内存分配及常见内存问题(1)--简介 一.问题: 1.SQL Server 所占用内存数量从启动以后就不断地增加: 首先,作为成熟的产品,内存溢出的机会微乎其微.对此要了解 ...
- SQL Server内存遭遇操作系统进程压榨案例
场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...
- SQL SERVER 内存学习系列(二)-DMV查看内存信息
内存管理在SQL Server中有一个三级结构.底部是内存节点,这是最低级的分配器,用于SQL Server的内存.第二个层次是由内存Clerk组成,这是用来访问内存节点和缓存存储,缓存存储则用于缓存 ...
- SQL SERVER 内存学习系列(一)
最近帮客户解决发布订阅的问题时,突然遇到这样一个问题发布订阅中报下面的错误,另外执行alter table 操作时也会报错 : 问题很奇怪发布订阅和CLR有什么关系?memtoleave内存是个啥?回 ...
- 人人都是 DBA(IV)SQL Server 内存管理
SQL Server 的内存管理是一个庞大的主题,涉及特别多的概念和技术,例如常见的 Plan Cache.Buffer Pool.Memory Clerks 等.本文仅是管中窥豹,描述常见的内存管理 ...
- SQL Server内存理解的误区
SQL Server内存理解 内存的读写速度要远远大于磁盘,对于数据库而言,会充分利用内存的这种优势,将数据尽可能多地从磁盘缓存到内存中,从而使数据库可以直接从内存中读写数据,减少对机械磁盘的IO请求 ...
随机推荐
- 北美Developer生存发展攻略
http://www.followmedoit.com/bbs/forum.php?mod=viewthread&tid=49&extra=page%3D1 在北美,做PM不易,而做D ...
- jprofiler9.2注册码
jprofiler9.2注册码 2016-08-23 18:11 3658人阅读 评论(2) 收藏 举报 L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620 L- ...
- 利用Jquey.hover来实现 鼠标移入出现删除按钮,鼠标移出删除消失
Html代码 <div class="box"><div class="bmbox" onclick="$('.box:first' ...
- 2243. [SDOI2011]染色【树链剖分】
Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如 ...
- 全局唯一Id:雪花算法
雪花算法-snowflake 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有 ...
- Day3JavaScript(一)JavaScript初识以及bom操作
JavaScript简介 什么是JavaScript 弱类型,动态类型,基于原型的直译性的编程语言.1995年netscape(网景)在导航者浏览器中设计完成. JavaScript的特点 1.与HT ...
- 第一部分 OpenStack及其构成简介
一.云计算 云计算是一种计算模型,它将诸如运算能力.存储.网络和软件等资源抽象成为服务,以便让用户通过互联网远程享用,付费的形式也如同传统公共服务设施一样.因需而定.提供方便.动态改变和无限的虚拟 ...
- python基础整理4——面向对象装饰器惰性器及高级模块
面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...
- 文件操作示例脚本 tcl
linux 下,经常会对用到文件操作,下面是一个用 tcl 写的文件操作示例脚本: 其中 set f01 [open "fix.tcl" w] 命令表示 打开或者新建一个文件“fi ...
- MHA实践操作
1.MHA部署解读: 1.1MHA Manager可以部署在一台slave上.MHA Manager探测集群的node节点,当发现master出现故障的时候,它可以自动将具有最新数据的slave提升为 ...