SQLServer存储引擎——内存

SQLServer存储引擎之内存篇:

  (1)SQL SERVER 内存结构

          技术分享

                                          SQL SERVER 内存结构简图

  SQL SERVER 内存空间主要可分为两部分:

  

  (1.1)可执行代码(Executable Code)

   主要包括SQL SERVER 实例中的一些EXE和DLL文件

  (0)SQL SERVER 引擎(SQL SERVER ENGINE),SQL SERVER 数据库的主程序;

  (1)服务端网络库(SERVER NET-LIBRARY),用于与客户端网络库通讯,将TDS包交给开放数据服务(OPEN DATA SERVICES),关于SQL SERVER访问的内容会在《SQL SERVER 体系架构》中作介绍;

  (2)开放数据服务(OPEN DATA SERVICES),用于将TDS包中的SQL 语句还原,交给关系引擎,关于关系引擎的内容会在《SQL SERVER 关系引擎》中作介绍; 

  (3)分布式查询(DISTRIBUTED QUERIES),用于支持从异构数据源中访问数据(也包括从SQL SERVER到SQL SERVER),这里加载访问异构数据源的OLE DB PROVIDER;

  (4)扩展存储过程(EXTENDED STORED PROCEDURES),在后续版本中将彻底用CLR集成来取代扩展存储过程;

  (5)OLE自动化(OLE AUTOMATION),用于SQL SERVER引用OLE自动化对象,事实上也是扩展存储过程,单独列出只是因为其功能特殊性;

 

  (1.2)、缓冲池(Buffer Pool)

  (0)系统级数据结构(SYSTEM-LEVEL DATA STRUCTURES),数据实例上的全局信息,包括数据库描述、锁、正在引用的对象及数据库等; 

  (1)连接上下文(CONNECTION CONTEXT),有点类似WEB应用程序中SESSION的概念,包含当前数据库连接及状态,存储过程的参数、游标的当前位置、所引用的表等; 

  (2)过程缓存(PROCEDURE CACHE),所有存储过程或SQL语句的执行计划,如果SQL语句存在相应的执行计划,则直接使用该执行计划,无须再次编译SQL语句。性能计数器PLAN CACHE中的缓存命中率(CACHE HIT RATIO)就是指的这里。

  (3)数据缓存(DATA CACHE), 用于数据库数据或索引页的读写,性能计数器BUFFER MANAGER中的缓存命中率(BUFFER CACHE HIT RATIO)就是指的这里。在物理内存充足的情况下,通常这个值会高于90%乃至更高,只有很少的数据页需要去物理读,如果低于90%可能是需要扩展物理内存了; 

  (4)日志缓存(LOG CACHE),用于数据库日志页的读写,每一次的DML都会在这里生成相应的REDO日志操作,如果回滚事务的话,还会根据REDO日志生成相应的反向REDO日志;

  只有过程缓存、数据缓存、日志缓存的大小是由SQL SERVER根据性能需要动态管理的,而其他内存空间则是随着用户请求的发起在变化。

 

  (2)SQL SERVER内存管理

  (2.1)进程地址空间

                                            技术分享

                                                    进程地址空间结构图

    (0)VAS(Virtual Address Space):进程地址空间或者叫虚拟地址空间,也即是内存寻址空间,32位的CPU与操作系统(以下简称32系统),寻址空间为2的32次方,即4G; 

    (1)3GB:32位WINDOWS系统上4G的寻址空间,应用程序只有2G的访问权(即用户模拟地址空间),剩下的2G留给操作系统自己(即内核模拟地址空间),通过打开3GB选项,可以让应用程序寻址3G的地址空间; 

    (2)PAE(Physical Addressing Extensions):物理地址扩展,将32位WINDOWS系统的寻址空间提升到2的36次方,即64G,AWE(Address Windows Extension)是地址窗口扩展插件或者叫API,应用程序可以通过AWE使用PAE的地址空间(先打开操作系统的PAE,再实现应用程序的AWE);

 

  (2.2)SQL SERVER内存管理

    (0)SQL SERVER的缓冲池统一以8k作为内存块大小,大于8k的大内存块是被独立管理的,从缓冲池外通过操作系统直接分配; 

    (1)AWE内存只能用于数据缓存,其他内存组件是无法使用AWE内存的; 

    (2)锁定内存页(Lock Pages In Memory),将这个操作系统策略指定给启动SQL SERVER服务的用户,以阻止SQL SERVER从物理内存到page file的交换。在打开AWE时,对于除local system以外的SQL Server服务启动用户,必须要显式分配lock pages in memory的权限;

    (3)SQL SERVER随着用户连接和请求的增加,会不断去获取物理内存,直至达到目标内存(TARGET MEMORY)和最大服务器内存(MAX SERVER MEMORY)中较小的一个。如果SQL SERVER服务器上操作系统没有自由内存,或其他应用程序有内存压力存在,SQL SERVER会调整其目标内存大小,也会释放物理内存,但不会释放到低于最小服务器内存(MIN SERVER MEMORY);如果没有其他内存压力,SQL SERVER在繁忙时获取的内存不会在空闲时主动释放。

 

--------------------------------------------------------------------------------------  

原文转自:http://qianzhang.blog.51cto.com/317608/1217346

--------------------------------------------------------------------------------------

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。