配置SQL Server 2008的资源调控器实现负载均衡

原文:配置SQL Server 2008的资源调控器实现负载均衡

转自:http://www.ithov.com/server/93267.shtml

1、为什么引入“资源调控器”?

  在SQL Server 2008之前,数据库引擎曾尝试为所有并发用户提供均衡的性能,这使我们几乎无法控制分配给用户或工作负载的优先级,而且随着并发登录的增加会雪上加霜。“资源调控器”有助于防止性能问题,并识别正在使用的应用程序。“资源调控器”可以控制分配给会话的CPU和内存,并进一步设置应用程序能够使用的最大和最小的CPU百分比和内存,以及允许的最大并行度。尽管资源调控器目前还有一些不足之处,但它对于处理许多常见的资源问题已经足够了。

2、创建“资源池”

  配置“资源调控器”是从创建“资源池”开始的。在SQL Server 2008中使用CREATE RESOURCE pool命令来创建资源池,从而通过它来分配会话,并设置其占用系统资源的最大和最小百分比。

  比如使用下面命令以根据CPU百分比限制来创建3个资源池:

CREATE RESOURCE pool LowPriorityAppspool WITH (MAX_CPU_PERCENT = 20);
  CREATE RESOURCE pool MediumPriorityAppspool WITH (MAX_CPU_PERCENT = 60);
  CREATE RESOURCE pool HighPriorityAppspool WITH (MAX_CPU_PERCENT = 100);

这些命令中使用的CPU百分比不是硬性限制。例如,如果操作系统上只有一个低优先级应用程序在运行,那么它将能够使用整个CPU。基于CPU百分比的资源调控只有在并行需求重叠时才会发挥作用。

  另外,在“资源调控器”中,最多可以建立2O个资源池,其中18个可以进行配置。在另外两个资源池中,一个分配给内部进程,如清理类操作;另一个供没有分配给其它池的会话使用的默认池。因此,不应过早创建太多资源池,应该谨慎考虑哪些池是必要的。

3、创建工作负载组

  对现有资源进行分组以后,我们需要创建创建工作负载组以实现对分配给这些资源池的应用程序分组。在SQL Server 2008中使用CREATE WORKLOAD GROUP命令创建工作负载组。

  下面列举几个CREATE WORKLOAD GROUP命令应用实例:

CREATE WORKLOAD GROUP
  UnidentnifiedApplications
  USING LowPriorityAppspool;

  CREATE WORKLOAD GROUP
  WellBehavedAccessApplications
  USING MediumPriorityAppspool;

  CREATE WORKLOAD GROUP
  PoorlyBehavedAccessApplications
  USING LowPriorityAppspool;

  CREATE WORKLOAD GROUP
  WellBehavedExcelApplications
  USING MediumPriorityAppspool;

  CREATE WORKLOAD GROUP
  CriticalCorporateApplications
  USING HighPriorityAppspool;

上面实例我们创建了5个工作负载组,它们被分配给3个资源池。Access和Excel应用程序被分配给不同的资源池,这样,我们可以在未来根据一个资源池对分配给另一个资源池的资源进行更改。为性能较差的Access应用程序和无法识别的其它应用程序分配较少的资源。我们为已经识别的对工作至关重要的应用程分配具有最高的资源分配的优先级。

4、查看“资源调控器”配置

  创建了工作负载组并将其分配给资源池以后,它们不会立即开始工作。要确定还需要进行什么配置才能使“资源调控器”正常运行,可以查看当前的“资源调控器”配置,这些信息在一个新的动态管理视图中显示。

  (1).查看“资源调控器”配置信息

  执行命令:

SELECT * FROM sys.dm_resource_governor_configuration;

命令执行完毕就会输出“资源调控器”的配置信息。需要注意的是:此输出信息是在SQL Server Management Studio(SSMS)的Results选项卡中显示的。最左边一列显示的值1是输出的行号。

  此输出信息告诉我们两个信息:

  第一、is_reconfiguration_pending标记表示在你所做的更改生效之前,需要执行命令:ALTER RESOURCE GOVERNOR RECONFIGURE。运行这条命令之后,is_reconfiguration_pending的值就变成0。

  第二、classifier_function_id的值为0,表示没有分配分类器函数。分类器函数用于决定一个会话应该放在哪个工作负载组中。

  (2).查看资源池配置信息

  执行下面的命令来查看资源池配置:

SELECT * FROM sys.dm_resource_governor_resource_pools;

命令执行完毕后会看到资源池的相关信息。需要注意的是:,在执行重新配置命令之前,这个输出信息中只显示内部资源池和默认资源池。

  可以使用下面这个命令查看工作负载池配置:

SELECT * FROM sys.dm_resource_governor_workload_groups;

5、应用程序实现分类

  配置“资源调控器”的最后一步是确定想要控制的会话。这可以利用分类器函数来实现,分类器将会话分配给特定的工作负载组。

  (1).应用APP_NAME()函数分类

  分类器函数必须返回一个SYSNAME类型的值,这个值当前是NVARCHAR(128)的别称。对于本文来说,我们根据应用程序名称函数(APP_NAME())来决定会话应该归入哪一个工作负载组,这个函数返回应用程序的连接字符串中指定的值。笔者特别喜欢选择这个选项,因为它支持对正在运行的应用程序进行分类,在对会话进行分类时还有其它几个选项可供选择我们后面再说。

  构建应用程序时通常不会在连接字符串中指定应用程序名称,但把应用程序名称添加到连接字符串或在应用程序配置文件中指定该值是很重要的。这种方法在“资源调控器”之外也很有用,因为应用程序名称会出现在SQL Server Profiler创建的跟踪记录中,能够用来筛选跟踪记录中的事件。通过连接字符串访问应用程序名称也有助于在隔离与应用程序相关的问题时跟踪对SQL Server的访问。不过,有些设计不太好的应用程序具有硬编码的连接字符串,这时它们不适合使用这种方法。硬编码连接字符串是一种应该避免的做法。

  在使用中笔者还发现,按名称对应用程序进行分类是识别连接服务器的未知应用程序的一个好的起点。在这种情况下,“资源调控器”的好处在于,未知应用程序将被放在低优先级的资源池里,随后我们能够快速识别正在使用的应用程序。这项功能可帮助你确定谁正在使用你的系统。

  (2).其他分类函数和属性

  除了使用APP_NAME()函数可进行会话分类外,也可以使用许多其它函数来实现,比如HOST_NAME()、SUSER_NAME()、SUSER_SNAME()、IS_SRVROLEMEMBER()和IS_MEMBER()。

  如果决定使用HOST_NAME()或APP_NAME()作为分级器函数,一定要注意用户可能更改这些函数。不过在实际中,笔者发现APP_NAME()很好用。

  此外,在决定如何分类时,还可以使用一些属性。L0GINPROPERTY()函数现在包含两个可在分类函数中使用的属性(DefaultDatabase和DefauItLanguage)。而且L0GINPROPERTY()函数提供了对连接所用网络协议的访问,还支持访问验证方案、本地IP地址、TCP端口和客户端IP地址。ORIGINAL_DB_NAME()函数也很有用,因为它可以返回会话在首次连接时提供的数据库名称,而不是默认数据库。这些属性支持基于任何这类值进行分类。例如,可以基于用户通常使用的数据库把连接分配给工作负载组。

  (3).分类前必要的测试

  在使用分类器函数之前对其进行测试是很重要的,否则系统可能无响应。例如,可以在SSMS中执行以下命令来测试APP_NAME()分类器函数:

SELECT APP_NAME();

  因为分类器函数无法识别SSMS,因此执行命令:

SELECT dbo.UserClassifier();

如果不修改分类器函数而直接启用它,SSMS将在低优先级应用程序资源池中运行。也可以使用分类器函数在数据库表中查找工作负载组名称,而不是将所有应用程序名称硬编码到该函数中。通常,在访问数据库表来查找工作负载组时,性能不会受到太大影响,因为数据库表不会很大,能够被快速缓存,并且只有在建立连接之后才能使用该函数制定分类决策。

  现在可以使用以下命令实现分类器函数:

 ALTER RESOURCE GOVERNOR
  WITH (CLASSIFIER_FUNCTION = dbo.UserCIassifier);

然后必须重新配置“资源调控器”,使挂起的配置生效。这可以使用以下命令来完成:

ALTER RESOURCE GOVERNOR RECONFIGURE;

至此,“资源调控器”配置就完成了。然后需要确保“资源调控器”能够按预期工作。如果未对分类器函数进行良好的测试,系统可能不会响应新的登录操作,可能需要使用专用管理员连接(DAC)来获取对SQL Server的访问。如果还没有配置DAC,可以以单用户模式重启服务器。在以单用户模式运行时,连接不会受到“资源调控器”约束,因此可以禁用资源调控器,直到问题修复。

(4).改变分类器函数的注意事项

  如果需要改变分类器函数,必须首先禁用“资源调控器”,因为无法在“资源调控器”正在运行时对其进行更改。可以运行以下命令来禁用当前的分类器函数:

ALTER RESOURCE GOVERNOR
  WITH (CLASSIFIER_FUNCTION = NULL);

需要注意的是:“资源调控器”更改应该由组织中最资深的DBA(数据库管理员)来执行,以免由于错误配置“资源调控器”而引起问题。

6、监控和配置资源的其它技术

  除了“资源调控器”,我们也可以通过系统监控(perfmon exe)工具来监控SQL Server分配的CPU资源。当添加想要监控的计数器时,SQL Server:Resource pool Stats对象会显示已配置的每个资源池的实例。

  一些类似的与实例相关的选择已被添加到SQL Server:Workload Group Stats计数器,相关的值也可通过查询sys.dm_os_performance_counters视图获得。

  为了进行更仔细的监控,SQL Server中还添加了其它一些事件,包括CPU Threshold Exceeded、PreConnectStarting和PreConnect:Completed事件。如果想要使用.NET代码以编程方式控制“资源调控器”,可以使用已经添加到SQL Server Management Objects(SMO)中的ResourceGovernor类。

  通常情况下,我们比较关注配置资源池时最大的CPU百分比,因为必须非常谨慎地配置最小百分比。如果将最小值配置得太高,很容易过度限制系统的资源利用率,尤其是内存的最小百分比不宜过高。

总结:

  需要说明的是,我们并不能利用“资源调控器”及时降低刚发现的严重影响系统性能的查询的优先级,因为在连接会话时,工作负载组和资源池就已经分配完成。所以,在配置“资源调控器”前做好统筹安排是非常必要的。虽然“资源调控器”并不是尽善尽美,但对于DBA任不失为一个实现资源的负载均衡的利器。

时间: 2024-10-27 09:12:11

配置SQL Server 2008的资源调控器实现负载均衡的相关文章

如何在SQL Server 2014中用资源调控器压制你的存储?_MsSql

在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入,但提供的功能还是有所限制:你只能限制CPU时间(这个已经很棒了),还有你能限制查询(从每个独立的查询)内存量. 但作为DBA的你,你经常会进行一些数据库维护操作,例如索引重建,DBCC CHECKDB操作等.我们都知道,这些操作会在你的存储里带来大量的IOPS直至峰值.如果在7 * 24在线的数据

如何在SQL Server 2014中用资源调控器压制你的存储?

在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入,但提供的功能还是有所限制:你只能限制CPU时间(这个已经很棒了),还有你能限制查询(从每个独立的查询)内存量. 但作为DBA的你,你经常会进行一些数据库维护操作,例如索引重建,DBCC CHECKDB操作等.我们都知道,这些操作会在你的存储里带来大量的IOPS直至峰值.如果在7 * 24在线的数据

《数据库基础及实践技术——SQL Server 2008》一2.3 配置SQL Server 2008

2.3 配置SQL Server 2008 成功安装好SQL Server 2008后,根据需要可以对SQL Server 2008的服务器端和客户端进行适当的配置,以更符合用户的要求.本节介绍使用配置管理器工具配置SQL Server 2008的方法. SQL Server配置管理器(SQL Server Configuration Manager)综合了服务管理器.服务器网络实用工具和客户端网络实用工具的功能. 单击"开始"→"Microsoft SQL Server 2

配置SQL Server 2008 R2 Reporting Services

原文:配置SQL Server 2008 R2 Reporting Services 记录如何在本地配置SQL Server 2008 R2 Reporting Services,笔者环境为Windows 7 64位 + SQL Server 2008 R2   一.准备工作 其实准备工作很简单,只需通过Microsoft SQL Server 2008 R2 -> Configuration Tools -> SQL Server Configuration Manager 打开几个Wind

SQL Server 2008中数据收集器和管理数据仓库

08年8月份发布的SQL Server 2008充满了许多新特性.其中一个新特性就是数据收集器.与这一新特性相关联的是管理数据仓库(MDW).数据收集器功能非常强大,数据库管理员借助这一工具,能够收集不同来源的统计数据,而管理数据仓库就是用来存放存储这些数据. 一.什么是数据收集器? 数据收集器是SQL Server 服务器上的一个核心组件,它收集来自多种来源的数据,并将收集的数据存储在称为管理数据仓库的关系数据库中.数据采集器使用SSIS和SQL 代理的作业来实现这一功能. 数据收集器按照不同

SQL Server 2008在对象资源管理器中隐藏系统对象

环境:SQLServer 2008 R2 问题:在对象资源管理器中隐藏系统对象 解决: 对象资 源管理器的"数据库"节点包含系统对象,如系统数据库.使用"工具"/"选项"页可以隐藏系统对象.某 些系统对象(如系统函数和系统数据类型)并不受此设置的影响. 在对象资源管理器中隐藏系统对象 1.在"工具"菜单上,单击"选项". 2.在"环境/常规"页上,选中"在对象资源管理器中 隐藏

MyEclipse 配置SQL Server 2008数据库驱动操作步骤_mssql2008

1.在环境变量中,在classpath下添加sqljdbc.jar的路径(可直接复制sqljdbc.jar到jdk目录下) 2.设置SQLEXPRESS服务器,启动TCP/IP服务(若已开启跳过此步),重启服务器 3.在MyEclipse中,Window --> Preferences --> Java --> Installed JRES 点击Edit,进入之后添加现有jar,选择之前的sqljdbc.jar 4.配置完成,在新建一个web工程的时候会自动添加此数据库连接 5.选择一个

最新的WINDOWS SERVER 8或者WINDOWS SERVER 2008最多支持多少台服务器负载均衡?

问题描述 据说windowsserver2003最多只支持32台服务器,不知道新的系统有没有这个限制?

SQL Server 2008在数据仓库方面的一些优点

SQL Server 2008提供了一个全面的和可扩展的数据仓库平台,它可以用一个单独的分析存储进行强大的分析,以满足成千上万的用户在几兆字节的数据中的需求.下面是SQL Server 2008中在数据仓库方面的一些优点. 数据压缩 数据仓库中的数据容量随着操作系统数目的快速增加而在持续增长.内嵌在SQL Server 2008中的数据压缩使得公司可以更有效的存储数据,同时还提高了性能,因为降低了I/O 要求. 备份压缩 保持一直在线做基于磁盘的备份是花费很昂贵的,并且很耗时.有了SQL Ser