SQL Server 2014里的IO资源调控器
在本文中,我们将来看看SQL Server 2014在资源调控器方面增加了哪些新的功能。资源调控器(Resource Governor)是从SQL Server 2008开始出现的一项功能。它是用于管理 SQL Server 工作负荷和系统资源使用情况的功能。 在SQL Server 2014之前,资源调控器只能限制某些用户访问SQL Server所占用的CPU带宽、内存资源。但是随着虚拟化和云技术的发展,IO的控制有了很大的需求。IaaS(Infrastructure as a Service),即基础设施服务提供商需要通过对IO资源池的资源设定,控制每个客户需要的资源。这可以保证性能不会受其他客户的影响,同时也可以基于用户的资源请求设定不同的SLA或者数据库服务。另一个需求是IT管理员或者数据库管理员希望可以将OLTP工作负载与维护操作进行隔离。比如重建索引是一种常见的操作,因为要扫描整个索引或者表,会导致大量的IO请求。通过使用IO资源管理可以限制这些操作的IO负载,从而保证OLTP的并发和性能不受影响。使整个服务器环境更加的稳固。
在SQL Server 2014中,根据客户的请求,增加了对IO资源的控制来解决这些问题。
资源调控器中资源池,工作负荷组,分类的概念和之前无异。
下面是SQL Server 2014增加的新特性:
- Resource Pools 在对CPU/Memory的控制基础上增加了对卷(per volume Disk Partition逻辑分区)的IOPs控制,可以针对卷设置最大和最小的IOPS,从而实现更复杂的资源控制。
- 可以对单个磁盘分区设置 maximum outstanding IO (在实例级别). 使用这个特性可以更好的调整磁盘子系统的负载。
- 在DMV sys.dm_resource_governor_resource_pools和sys.dm_resource_governor_configuration中新增了栏位可以查询IO的使用和配置。另外新增加了DMV
sys.dm_resource_governor_resource_pool_volumes,可以捕获IO跨不同分区的使用情况。
具体请参考:
http://msdn.microsoft.com/en-us/library/bb934023.aspx
http://msdn.microsoft.com/en-us/library/bb934099.aspx
http://msdn.microsoft.com/en-us/library/dn358348.aspx
- 新增加了两个新的XEvents (file_write_enqueued, file_read_enqueued),可以对于IO资源管理队列的IO请求。
- 最后我们增加了性能监视指标SQLServer:Resource Pool Stats包括Disk Read IO/sec, Disk Read Bytes/sec, Avg Disk Read IO (ms), Disk Write IO/sec, Disk Write
Bytes/sec, Avg Disk Write IO (ms), Disk Read IO Throttled/sec, Disk Write IO Throttled/sec等。
当一个用户成功登录到SQL Server,如果IO资源调控被设置的话,数据库引擎将会调用分类函数去判断当前登录用户属于哪一个工作负荷组。当此用户执行一条SQL语句产生对IO的读写时,数据库引擎不会将此IO读写请求直接发送给OS,取而代之的是将此IO请求放到一个队列中,SQL IO资源管理会根据当前用户的设置和已有资源的使用情况从队列中取出相应的IO请求发送给OS进行执行,以实现对IO资源的管理与控制。
我们以下面为例说明如何在一个SQL Server实例中使用IO资源调控器。
假设我们有一台数据库主机或者运行在私有云上的整合数据库,我们需要根据多个客户的要求放多个数据库,这样可以实现资源的有效利用同时节省成本。如果客户的一个数据库运行IO密集型的工作负载,这样会导致整个磁盘的IO性能,从而影响其他用户的操作。
为了简化我们的演示,假设有两个用户需要访问此数据库,其中一个用户为IT管理人员,需要定期的备份数据库以保重数据安全,还有一个用户为财务人员,需要读取数据以生成报表。我们为这两个用户创建两个资源池和一个可以将用户会话映射到对应资源池的分类器函数。会话为用户backup被映射到资源池GroupBackup,会话为用户report映射到资源池GroupReport。为了使演示清晰明了,我们将资源池GroupBackup最小和最大IOPS设定为1,将资源池GroupReport最小和最大IOPS设定为2。
1 use master; 2 3 go 4 5 -- Create 3 workload groups for different category of users or application 6 7 CREATE WORKLOAD GROUP 8 GroupAdmin; 9 10 CREATE WORKLOAD GROUP 11 GroupBackup; 12 13 CREATE WORKLOAD GROUP 14 GroupReports; 15 16 -- Create classifier function 17 18 CREATE FUNCTION dbo.rgclassifier() RETURNS sysname 19 WITH SCHEMABINDING 20 AS 21 BEGIN 22 23 DECLARE @grp_name sysname 24 25 IF (SUSER_NAME() = 'admin') 26 27 SET @grp_name = 'GroupAdmin' 28 29 IF (SUSER_NAME() = 'backup') 30 31 SET @grp_name = 'GroupBackup' 32 33 IF (SUSER_NAME() = 'report' )--or APP_NAME() LIKE '%REPORT 34 SERVER%') 35 36 SET @grp_name = 'GroupReports' 37 38 RETURN @grp_name 39 40 END; 41 42 GO 43 44 -- Register the classifier function with Resource Governor 45 46 ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION 47 = dbo.rgclassifier); 48 GO 49 50 -- Start Resource Governor 51 52 ALTER RESOURCE GOVERNOR RECONFIGURE; 53 GO 54 55 -- Create resource pools and map it to workload groups 56 57 CREATE RESOURCE POOL 58 PoolAdmin 59 WITH ( 60 MIN_IOPS_PER_VOLUME = 100, 61 MAX_IOPS_PER_VOLUME = 100 62 ); 63 64 CREATE RESOURCE POOL PoolBackup 65 WITH ( 66 MIN_IOPS_PER_VOLUME = 1, 67 MAX_IOPS_PER_VOLUME = 1 68 ); 69 70 CREATE RESOURCE POOL PoolReports 71 WITH ( 72 MIN_IOPS_PER_VOLUME = 2, 73 MAX_IOPS_PER_VOLUME = 2 74 ); 75 76 ALTER WORKLOAD GROUP 77 GroupAdmin 78 79 USING PoolAdmin; 80 81 ALTER WORKLOAD GROUP 82 GroupBackup 83 84 USING PoolBackup; 85 86 ALTER WORKLOAD GROUP 87 GroupReports 88 89 USING PoolReports; 90 91 ALTER RESOURCE GOVERNOR RECONFIGURE; 92 93 GO
通过这个配置,SQL Server将会限制IO资源池的负载,从而满足2个IOPS给用户Report,1个IOPS给用户Backup。通过设置IO资源调控器对客户设置最大的工作负载限制,一方面可以达到预测的性能,同时还会保护其他的用户性能不受影响。
限制:
IO资源调控器主要是针对物理IO(磁盘读写)的限制,对逻辑IO(内存)是不起作用的。此外,IO资源调控器也只会限制用户完成任务产生的读写IO。对于一些SQL
Server 发起的IO,是源于SQL本身的后台进程,例如:checkpoint, lazy writer。这部分的IO都在默认的INTERNAL工作负荷组中,是无法被限制的。所以IO资源调控器对IO的控制主要的两个应用场景为限制重建索引和备份带来的大量磁盘开销。
原文链接:http://blogs.msdn.com/b/apgcdsd/archive/2014/12/13/sql-2014-5-io.aspx
注:此文章为WoodyTu学习MS SQL技术,收集整理相关文档撰写,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,有了您的支持才能激发作者更大的写作热情,非常感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?