当前位置:Gxlcms > 数据库问题 > SQL Server 2014里的IO资源调控器

SQL Server 2014里的IO资源调控器

时间:2021-07-01 10:21:17 帮助过:3人阅读

在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

SQL Server 2014里的IO资源调控器

标签:

人气教程排行