BPE特性

BPE特性

背景

在我们已有的较大的项目上,当数据库比较大且基于数据库开发定制的报表较多的情形下,业务高峰的IO波动非常大。基于这个情况,我们想从数据库的特性出发,sql server 2014开始就发布过一个新特性Buffer Pool Extension (BPE),该特性说白就是内存不够,SSD来凑,我们生产环境使用的2017版,版本上是支持,觉的可以小范围试用。
主要收益如下
  • 增加随机I / O吞吐量
  • 减少I / O延迟
  • 增加交易吞吐量
  • 更大的混合缓冲池提高了读取性能
  • 可以利用当前和未来的低成本内存驱动器的缓存体系结构

操作步骤

--查看当前设置
SELECT [path], state_description, current_size_in_kb,
CAST(current_size_in_kb/1048576.0 AS DECIMAL(10,2)) AS [Size (GB)]
FROM sys.dm_os_buffer_pool_extension_configuration;
 
--设置 Max memory 
EXEC sys.sp_configure 'show advanced options', '1'  RECONFIGURE WITH OVERRIDE;
GO
EXEC sys.sp_configure 'max server memory (MB)', '28672';
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sys.sp_configure 'show advanced options', '0'  RECONFIGURE WITH OVERRIDE;
GO

--启用 BPE  使用1:8比例设置
ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION ON (FILENAME = 'F:BP_Extension.BPE', SIZE = 224 GB);
 
--再次查看启用后的效果
SELECT [path], state_description, current_size_in_kb,
CAST(current_size_in_kb/1048576.0 AS DECIMAL(10,2)) AS [Size (GB)]
FROM sys.dm_os_buffer_pool_extension_configuration;
 
--查看有哪些语句使用了BPE
SELECT DB_NAME(database_id) AS [Database Name], COUNT(page_id) AS [Page Count],
CAST(COUNT(*)/128.0 AS DECIMAL(10, 2)) AS [Buffer size(MB)],
AVG(read_microsec) AS [Avg Read Time (microseconds)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id <> 32767
AND is_in_bpool_extension = 1
GROUP BY DB_NAME(database_id)
ORDER BY [Buffer size(MB)] DESC;
 
--如果需禁用BPE
ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION OFF;
 
 

注意事项

  1. BPE只支持64位的2014以及已上的版本;
  2. 标准版版BPE只支持Max Memory的1:4,企业版最大可支持1:32,设置BPE小于Max memory 会出错误提示;
  3. BPE设置最好遵循官方的最佳实践设置,1:4或1:8是一个比较好的选择;
  4. BPE目标是改进类似于oltp的工作负载系统,写次数非常多的系统可能无法利用这一特性。
  5. BPE不过是一个文件,尽可能放在快的磁盘中。当然,如果条件允许你可以优先选择增加更多的内存;
  6. 一旦投入生产,请避免对文件进行配置更改或关闭功能。这些活动可能会对服务器性能产生负面影响,因为禁用该功能后,缓冲池的大小会大大减少。禁用后,在重新启动SQL Server实例之前,不会回收用于支持该功能的内存。但是,如果重新启用该功能,则将在不重新启动实例的情况下重新使用内存。
 

参考

原文地址:https://www.cnblogs.com/jil-wen/p/12486478.html