SQL Server 2014里的缓存池扩展

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

在今天的文章里我想谈下SQL Server 2014里引入的缓存池扩展(Buffer Pool Extensions)。我们都知道,在SQL Server里,缓存池是主要的内存消耗者。当你从你存储里读取数据时,数据会在缓存池里缓存。SQL Server在计划缓存里缓存执行计划,也是缓存池的一部分。你拥有的物理内存越多,你的缓存池就会越大(通过【最大服务器内存】设置配置)。

很多SQL Server用户会碰到数据库服务器里物理内存受限的问题:所有内存槽都被占用了,因此你如何想给物理服务器增加额外的内存?当然,你可以迁移到更大的服务器,但那是另外一回事……这个特定问题的解决方案是SQL Server 2014里引入的缓存池扩展。在缓存池扩展的帮助下,SQL Server在内存层级里引入了另外一层。我们来看下面的图片:

 

如你所见,在顶部是缓存池本身,它是非常快的(根据响应时间(latency times)),在底部你会看到我们的传统存储,它是比较慢的。缓存池扩展刚好落户在2者之间——传统缓存池和我们存储之间。缓存池苦熬占本身是包含一个简单文件(所谓的扩展文件(Extension File)),它应该存储在非常快的存储上——例如SSD硬盘。扩展文件大体上和Windows系统的页文件一样。不用在你的数据库服务器增加额外的物理内存,你只要配置在SSD硬盘上配置扩展——就可以了!

在我讨论配置并启用缓存池扩展前,我想简单谈下缓存池扩展的架构和背后的设计。SQL Server传统的缓存池总是在干净页和脏页间区分的。干净页就是内存里的内容和存储里的内容一样的页。脏页是在内存里改变的页,但还没有写回到存储。大约每分钟所谓的检查点(CHECKPOINT)过程会把脏页写回到存储,意味着脏页变成了干净页。

如果SQL Server的缓存池陷入内存压力,缓存池扩展本身就会被使用。内存压力指的是SQL Server需要比当前可用更多的内存。在那个情况下,缓存会从缓存池驱逐页,那些页是最近刚使用过的。SQL Server这里使用的是近期最少使用算法(Least Recently Used Policy (LRU))。如果现在你配置了扩展文件,SQL Server会把这些页写到扩展文件,而不是把它们直接写入我们缓慢的存储。如果页是脏的,这些页也会并发写入物理存储(通过异步I/O操作)。因此当你使用缓存池扩展时,你不会丢失任何数据。到一定时间点你的扩展文件也会完全存满。在那个情况下SQL Server又会从扩展文件驱逐老页(也是通过LRU算法),最后把它们写入传统存储。扩展文件充当缓存池和存储本身之间的额外一层。

现在我们来看下在SQL Server 2014里如何配置缓存池扩展。SQL Server这里提供你ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION命令。我们来详细看下如何使用它:

复制代码
1 USE master
2 GO 
3 
4 EXEC sp_configure 'show advanced options', 1
5 RECONFIGURE WITH OVERRIDE
6 GO
复制代码

 

复制代码
1 ALTER SERVER CONFIGURATION
2 SET BUFFER POOL EXTENSION ON
3 (
4    FILENAME = 'd:\ExtensionFile.BPE',
5    SIZE = 1 GB
6 )
7 GO
复制代码

这里你会碰到的第1个限制是扩展文件必须和缓存池本身一样的大小,如果你指定了比它小的文件大小,你会从SQL Server收到如下的错误信息:

Msg 868, Level 16, State 1, Line 1
Buffer pool extension size must be larger than the current memory allocation threshold 1596 MB. Buffer pool extension is not enabled.

下一个你肯定会碰到的限制是,在SQL Server运行期间,你不能修改扩展文件的大小。例如,当你想修改扩展文件到更大的大小,你需要停用缓存池扩展,然后再次启用。在此操作期间,你的性能会下降,因为你刚刚停用了SQL Server一个重要的缓存层!

当你计划为你的生产环境部署缓存池扩展时,你一定要意识到这点!!!

另外你不能缩小扩展文件的大小,文件必须要比先前的大。不然你还会收到如下的错误信息:

Msg 868, Level 16, State 1, Line 3
Buffer pool extension size must be larger than the current memory allocation threshold 4096 MB. Buffer pool extension is not enabled.

缓存池扩展的整个配置也可以通过DMV sys.dm_os_buffer_pool_extension_configuration来查询到。

什么时候你应该使用缓存池扩展?微软建议在你的服务器工作负荷是少读多写(write-heavy)时,例如OLTP工作负荷。当你处理DWH/BI相关的工作复核时,你不应该考虑缓存池扩展——这里启用扩展文件没任何意义。并且当我们讨论扩展文件时,你应该为它配置好非常快的SSD!传统旋转硬盘(机械硬盘)就算了吧!



本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/4641593.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
15天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
2月前
|
SQL 缓存 关系型数据库
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
65 0
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
96 0
|
25天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
15天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
2天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
6 0
|
10天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
24 0
|
15天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
19天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
21 1