SQLServer存储引擎——02.内存
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在繁忙时获取的内存不会在空闲时主动释放。
SQLServer存储引擎——02.内存的更多相关文章
- SQLServer存储引擎——03.日志
3. SQLServer存储引擎之日志篇 (3.1)日志结构 (3.1.1)物理日志 (0)物理日志即数据库的.ldf文件, 当然后缀名是可以自定义的,默认是.ldf (1)一个SqlServer数据 ...
- SQLServer存储引擎——05.索引的结构和分类
5. SQLServer存储引擎——索引的结构和分类 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有 ...
- SQLServer存储引擎——01.数据库如何读写数据
一.引言 在SQL Server数据库中,数据是如何被读写的?日志里都有些什么?和数据页之间是什么关系?数据页又是如何存放数据的?索引又是用来干嘛的? 一起看看SQL Server的存储引擎. 二.S ...
- innodb存储引擎之内存
1.innoDB存储引擎体系架构 如上图所示,innoDB存储是基于磁盘存储的,并且其中的记录以页的方式进行管理,但为什么要引入一个内存池呢? 其目的就是为了协调CUP速度与磁盘速度的鸿沟,基于磁盘的 ...
- SQLServer存储引擎——04.数据
4. SQL SERVER存储引擎之数据篇 (4.1)文件 (0)主数据文件.mdf初始文件大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB: (1)SQL SERVER ...
- SQLServer存储引擎——06.索引的遍历与维护
一.遍历 索引树的每个节点都是一个页面. 索引树有三种类型的节点:根节点.中间节点.叶子节点. (1) 根节点与中间节点一样,只包含下一层节点的入口值与入口指针,它们称为索引节点: (2) 叶子节点包 ...
- Atitit.数据库存储引擎的原理与attilax 总结
Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...
- Atitit.数据库存储引擎的原理与attilax 总结
Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
随机推荐
- untra edit 自动补全
选择“高级-配置-编辑器-自动完成”,勾选“自动显示‘自动完成’对话框”,并在其中定义好“当输入x个字符”时,自动补全.
- Oracle 12C 新特性之 db默认字符集AL32UTF8、PDB支持不同字符集
一. db默认字符集AL32UTF8Specify the database character set when you create the database. Starting from Ora ...
- Java 虚拟机-Java内存区域
简要介绍Java的内存区域: 运行时数据区域 HotSpot虚拟机对象 一.概览 二.运行时数据区域 2.1 程序计数器 Program Counter Register,代表当前线程所执行的字节码的 ...
- bzoj 2142 礼物——扩展lucas模板
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142 没给P的范围,但说 pi ^ ci<=1e5,一看就是扩展lucas. 学习材料 ...
- PostgreSQL 备份和恢复
备份和恢复有三种不同的基本方法来备份PostgreSQL数据SQL转储文件系统级备份File system level backup连续归档 1. SQL转储 pg_dump dbname > ...
- Delphi BLE 控件
TBluetoothLEDevice LDevice.Address;//"00:11:22:DD:EE:FF". LDevice.DeviceName//Mi LDevice.I ...
- LAMP 2.8 php.ini配置文件详解
修改php配置文件,但有时候我们并不知道 php.ini 所在路径,这时候就需要通过命令来查一查在哪里. /usr/local/php/bin/php -i |head 看那一行 Loaded Con ...
- bitcode编译错误
xcode编译引用的静态库可能会出现编译错误: does not contain bitcode. You must rebuild it with bitcode enabled (Xcode se ...
- lombok与spring的恩怨
下面是lombok按照 Java Bean 的规范生成的 下面是spring mvc里jackson 需要的 xXxx问题还是顺势而为吧
- JavaScript中数值和对象
一.创建对象并将其初始化 a.使用new创建对象和方法 <<!DOCTYPE html> <html> <head> <mete http-equiv ...