适用于:SQL Server 2016 (13.x) 及更高版本
了解如何在 SQL Server 机器学习服务中创建和使用资源池来管理 Python 和 R 工作负载。
此过程包括多个步骤:
- 查看所有现有资源池的状态。 务必要了解哪些服务在使用现有资源。
- 修改服务器资源池。
- 为外部进程创建新资源池。
- 创建分类函数来标识外部脚本请求。
- 验证新的外部资源池是否正在从指定的客户端或帐户捕获 R 或 Python 作业。
查看现有资源池的状态
- 使用以下语句检查分配到服务器默认池的资源。 - SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'- 示例结果 - pool_id - name - min_cpu_percent - max_cpu_percent - min_memory_percent - max_memory_percent - cap_cpu_percent - min_iops_per_volume - max_iops_per_volume - 2 - 默认值 - 0 - 100 - 0 - 100 - 100 - 0 - 0 
- 检查分配到默认外部资源池的资源。 - SELECT * FROM sys.resource_governor_external_resource_pools WHERE name = 'default'- 示例结果 - external_pool_id - name - max_cpu_percent - max_memory_percent - max_processes - 版本 - 2 - 默认值 - 100 - 20 - 0 - 2 
- 使用这些服务器默认设置时,外部运行时可能无法获得足够的资源来完成大多数任务。 若要改善资源,必须按如下所述修改服务器资源用量: - 减少数据库引擎可以使用的最大计算机内存。 
- 增加外部进程可以使用的最大计算机内存。 
 
修改服务器资源用量
- 在 Management Studio 中运行以下语句,将 SQL Server 内存用量限制为“最大服务器内存”设置中的值的 60% 。 - ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);
- 请运行以下语句,将外部进程的内存用量限制为计算机资源总量的 40%。 - ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);
- 若要实施这些更改,必须按如下所示重新配置并重新启动资源调控器: - ALTER RESOURCE GOVERNOR RECONFIGURE;- 注意 - 这些设置只是建议你最初使用的设置;应该根据其他服务器进程机器学习任务,以确定如何适当平衡环境和工作负载的设置。 
创建用户定义的外部资源池
- 对 Resource Governor 配置的所有更改将在整个服务器上强制执行。 这些更改会影响使用服务器默认池的工作负载,以及使用外部池的工作负载。 - 若要更细致地控制哪些工作负载优先获得资源,可以新建用户定义的外部资源池。 定义一个分类函数并将其分配给外部资源池。 “EXTERNAL”是新的关键字。 - 创建新的用户定义的外部资源池。 在以下示例中,池命名为 ds_ep。 - CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);
- 创建名为 - ds_wg的工作负荷组用于管理会话请求。 对于 SQL 查询,将使用默认池;对于所有外部进程查询,将使用- ds_ep池。- CREATE WORKLOAD GROUP ds_wg WITH (importance = medium) USING "default", EXTERNAL "ds_ep";- 每当请求无法分类,或者发生其他任何分类失败时,请求将分配到默认组。 
有关详细信息,请参阅资源调控器工作负荷组和 CREATE WORKLOAD GROUP (Transact-SQL)。
为机器学习创建分类函数
分类函数检查传入的任务。 它确定任务是否可以使用当前资源池来运行。 不符合分类函数条件的任务将分配回到服务器的默认资源池。
- 首先,指定资源调控器应使用分类器函数来确定资源池。 可将“null”指定为分类器函数的占位符。 - ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL); ALTER RESOURCE GOVERNOR RECONFIGURE;- 有关详细信息,请参阅 ALTER RESOURCE GOVERNOR (Transact-SQL)。 
- 在每个资源池的分类器函数中,定义应分配到资源池的语句或传入请求的类型。 - 例如,如果发送请求的应用程序是“Microsoft R Host”、“RStudio”或“Mashup”,下面的函数返回分配到用户定义的外部资源池的架构的名称;否则,它返回默认资源池。 - USE master GO CREATE FUNCTION is_ds_apps() RETURNS sysname WITH schemabinding AS BEGIN IF program_name() in ('Microsoft R Host', 'RStudio', 'Mashup') RETURN 'ds_wg'; RETURN 'default' END; GO
- 创建该函数后,请重新配置资源组,将新的分类器函数分配到前面定义的外部资源组。 - ALTER RESOURCE GOVERNOR WITH (classifier_function = dbo.is_ds_apps); ALTER RESOURCE GOVERNOR RECONFIGURE; GO
验证新资源池和相关性
检查每个工作负载组的服务器内存配置和 CPU。 查看以下内容,验证是否已进行实例资源更改:
- SQL Server 服务器的默认池
- 外部进程的默认资源池
- 外部进程的用户定义池
- 运行以下语句以查看所有工作负载组: - SELECT * FROM sys.resource_governor_workload_groups;- 示例结果 - group_id - name - importance - request_max_memory_grant_percent - request_max_cpu_time_sec - request_memory_grant_timeout_sec - max_dop - group_max_requests pool_id - pool_idd - external_pool_id - 1 - 内部 - 中型 - 25 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 默认值 - 中型 - 25 - 0 - 0 - 0 - 0 - 2 - 2 - 256 - ds_wg - 中型 - 25 - 0 - 0 - 0 - 0 - 2 - 256 
- 使用新的目录视图 sys.resource_governor_external_resource_pools (Transact-SQL) 查看所有外部资源池。 - SELECT * FROM sys.resource_governor_external_resource_pools;- 示例结果 - external_pool_id - name - max_cpu_percent - max_memory_percent - max_processes - 版本 - 2 - 默认值 - 100 - 20 - 0 - 2 - 256 - ds_ep - 100 - 40 - 0 - 1 - 有关详细信息,请参阅资源调控器目录视图 (Transact-SQL)。 
- 运行以下语句返回有关已关联到外部资源池的计算机资源的信息(如果适用): - SELECT * FROM sys.resource_governor_external_resource_pool_affinity;- 由于池是使用 AUTO 相关性创建的,因此不会显示任何信息。 有关详细信息,请参阅 sys.dm_resource_governor_resource_pool_affinity (Transact-SQL)。 
后续步骤
有关管理服务器资源的详细信息,请参阅:
有关机器学习资源管理的概述,请参阅: