配置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-12-24 16:55:26

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

配置SQL Server 2008服务器

怎么配置SQL Server 2008服务器_百度经验 http://jingyan.baidu.com/article/9faa7231a922c1473c28cb23.html 1.验证安装是否成功 1 通常情况下,如果安装过程中没有出现错误提示,既可以认为安装成功.但是,为了检验安装是否正确,也可以采用一些验证方法.例如,可以检查SQL Server 2008的服务和工具是否存在,应该自动生成的系统共数据库和样本数据库是否存在,以及有关文件和目录是否正确等. 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 打开几个Window

win 7 下配置SQl server 2008 ODBC 错误的解决办法(端口1433 不通)

win 7安装SQl server 2008 下配置ODBC总是提示类似错误: 上图提示说明可能端口有问题,网上解决办法很多,经过自己的测试筛选解决办法如下: 1. 我们知道sqlserver2008通过端口 1433 连接到主机 localhost 的所以要保证端口1433开放 2.要保证防火墙通过1433端口或者关闭防火墙 3.在运行里 telnet 127.0.0.1 1433  测试提示如下错误    说明要到控制面板\程序\打开或关闭windows功能里勾选 Telnet服务器和客户端

配置 SQL Server 2008 Email 发送以及 Job 的 Notification通知功能

SQL Server 2008配置邮件的过程就不写了,网上的案例太多了. http://www.cnblogs.com/woodytu/p/5154526.html 这个案例就不错. 主要写下配置完后的错误处理: 数据库邮件故障微软官网: 1. sql server 2008 阻止了对组件‘Database Mail XPS’ 在 msdb 数据库中运行如下代码: EXEC sys.sp_configure N'show advanced options', 1 RECONFIGURE WITH

配置SQL Server 2008 镜像

第一步检查基础环境 由于在非域环境内,所以需要做的检查相对来说多很多,下面按照演示环境,逐个测试下面的条件: Windows 账号. 网络是否能联通,并且端口可用. 主体服务器和镜像服务器的磁盘配置是否正确. SQL Server版本.补丁是否满足镜像要求. SQL Server数据库的恢复模式.兼容级别. SQL Server上是否有常规的备份作业,特别是日志备份. 主体服务器和镜像服务器的SQLServer能否互通. 主体服务器和镜像服务器中是否有共享文件夹. 检查磁盘配置是否正确,两台数据

SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了.windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了. 本篇主要描述个人集群搭建中遇到的坑和一些注意事项,以及2016无域负载均衡的简单体验测试. 搭建体验 基础环境 想要不使用域环境来搭建AlwaysON 必须使用windows 2016 和sql server2016 本篇我使用3台虚拟机(主

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

(4.19)SQL server 2008一些常见配置之一(基本配置,权限配置、远程访问配置和内存配置。)

本系列转自一至4转自:甲子黎叔个人公众号,文章系列 SQL server 2008一些常见配置之一(基本配置) SQL server服务器配置主要有:权限配置.远程访问配置(网络配置).内存配置.接口配置.SSRS报表服务器配置等,今天一起学习最基本的配置:权限配置.远程访问配置和内存配置. 实操环境: 操作系统:windows2008 SQL server服务器:Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)   Apr  2 2

Sql server 2008 R2 配置管理工具服务显示远程过程调用失败:0x800706be

今天在其他电脑配置 SQl server 2008 R2,安装完成后,发现打开配置管理工具服务 :显示远程过程调用失败:0x800706be 这样的错误提示 之前并没有遇到过这种问题,猜想,可能是这台电脑之前安装了 visual studio 2012,内置的SQl server 2012与之冲突,导致新的2008 R2 版本过低导致. 解决方法如下: 有软件管理器的打开软件管理器,没有的进入控制面板的程序卸载,将"Microsoft SQL Server 2012 Express LocalD