求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
服务器优化--系列
 
火龙果软件    发布于 2013-9-30
 

当你开始注意到服务器的性能哪怕略微下降了一点,或者看到一台新服务器的运行速度比目前所用的服务器更快,本能的第一反应也许就是对基础架构来一次全面大改动。但是当你没有获得所需要的性能或者每当市面上出现新的服务器技术,就经常升级服务器,这是一项需要大笔投入的工作。下面是服务器优化的一系列问题和知识。

服务器优化(1)实现负载平衡

一、SQL Server Cluster vs. RAC

1. RAC

RAC,全称Real Application Clusters,译为“真正应用群集”, 是 Oracle 9i 开始采用的一项新技术,是高可用性的一种。

当一个客户端发送请求到某一台服务器的 listener(侦听器)后,这台服务器根据我们的负载均衡策略,会把请求发送给本机的 RAC 组件处理,也可能会发送给另外一台服务器的RAC组件处理,处理完请求后,RAC 会通过群集软件来访问该数据库的共享存储设备。

RAC的每个节点都可以实现Read/Write 的实时访问,因此带来性能的提升,相当于“负载均衡”。

2. SQL Server Cluster

SQL Server 的群集(cluster)最多可以部署16 个节点,但是,在任一时刻只有一个节点(称为主节点)在提供SQL Server 服务,其它节点都处于“休息”状态。当主节点发生故障导致SQL Server 服务停止时,listener 才通知下一个节点接管SQL Server 服务,因此该技术全称为Fail-over Cluster(故障转移群集)。

由于应用程序访问SQL Server必须通过VNN(虚拟网络名称,Viturl Network Name)访问,当节点发生故障转移时,应用程序的访问连接会自动转移到新的节点。这一点与RAC非常相似。

SQL Server 数据库群集技术的最大缺点,在于数据库文件(mdf/ndf/ldf)都必须保存在共享存储(shared storage),意味着数据实际上只有一份。这是群集架构中的“单一故障点”,一旦共享存储发生故障,数据库群集就完全失效。

3. SQL Server的其它高可用(High Available)技术

(1)数据库镜像

SQL Server 2005 sp1 为单个的database提供了镜像(Mirror)功能。主体(主节点)和镜像(即辅助节点,仅可以有1个)拥有各自的独立存储,意味着数据实际上是独立的2份。主体的数据可以同步提交到镜像(实时同步),也可以异步提交到镜像(主节点发出提交请求后无需等待镜像的回应)。辅助节点的副本可以通过建立快照(snapshot)实现只读访问。

如果添加第3台SQL Server 作为见证服务器(Witness),可以实现主体与镜像节点的自动故障转移。但是,应用程序需要能够识别转移后的节点IP地址,毕竟主体与镜像节点是不同的IP地址。

(2)日志传送

一个数据库可以通过日志传送(log shipping)将数据分发到无数个SQL Server实例。分发的这个数据库一般处于“正在恢复”的状态,也可以设置为“备用”状态以提供read-only访问。分发的过程是异步的,因此存在延时。当发生故障时,可以方便地将某个分发的数据库迅速提升为“活动的”数据库。

(3)可用性组

SQL Server 2012 提供了新的功能:可用性组(Availability Group)。主节点(Primary Node)和辅助副本(Secondary Replica,最多4个副本)拥有各自的独立存储。主节点的数据被单向复制到各个辅助节点,其中最多2个辅助节点可以实现同步提交,其余的辅助节点只能实现异步提交。主节点的数据可以实现Read/Write 访问;辅助节点可以直接提供3种访问模式:不可读、只读、意向读(仅允许部分访问)。

可用性组集中了其它3种高可用技术的优势:cluster的自动故障转移及对外唯一IP地址、Mirror的每个数据库独立副本与实时同步、log shipping的“备用”状态提供read-only访问。

二、SQL Server为何不实现RAC功能

既然RAC有诸多优势,SQL Server为何不实现RAC功能?

从纯粹的技术角度来看,可以肯定 Microsoft 完全有能力实现这项技术,甚至已经有部分第三方厂家开发了SQL Server的插件以实现RAC功能。那么Microsoft 为何要说“不”呢?大致可以分为以下几种原因:

1 . RAC的扩展程度有限

RAC 可以便于用户对数据库节点数量进行扩展,但是,各个节点之间必须实现数据实时的、多向的同步,而这种同步是以牺牲性能为代价的,因此,随着节点数量的增加,性能的扩展并不是线性的,甚至可能随着节点的增加而导致性能下降。SQL Server 2012 的可用性组技术最多只允许2个辅助节点实现单向的“同步提交”,也是基于这种因素而不得不采取的一种限制措施。

一般来说,RAC 在双机(2个节点)的时候性能最佳,双机性能大约是单机性能的1.8 倍。一般的工程经验可以按照1.6 倍性能进行设计。

在设计近期目标时,RAC 是一项很不错的选择。如果从长远角度来看,当数据量和负载越来越大时,RAC 也就越来越显得力不从心。这也是大多数的Oracle 客户(特别是大型客户)不愿意使用RAC 的主要原因。

2. RAC不符合“性价比”、“易学易用”原则

与SQL Server 相比,RAC 的强项在于它可以部署在高性能的小型机甚至大型机上,如果性能提供1.6倍,可以视为性能的大幅提升(但是,也意味着提升到极限了)。而SQL Server 仅可部署在PC Server 上,由于PC Server 的性能相对有限,即使通过双机部署将性能提升1.8 倍仍然不是最理想的目标。因此,从性价比角度考虑,部署尽可能多的PC Server 仍然比RAC 更具有竞争优势。

而且,部署和维护 RAC 并不是一项简单轻松的工作,其复杂程度远远大于SQL Server 常规技术,不符合Microsoft 一贯坚持的“易学易用”原则。

据了解,中国移动的部分省公司BI、网管、客服等模块已经采用DB2、SQL Server 等数据库,明确表明这些模块不可能使用RAC。另据报道,中国移动2009年发文,要求各省公司新建IT 系统中所需的数据库使用Syabase

http://tech.it168.com/a2009/1026/789/000000789847.shtml

3. Microsoft有替代方法

基于前述各项原则和理由,Microsoft有变通的方法实现负载平衡。下文会有详细讲述。

三、SQL Server的负载平衡规划

正是由于SQL Server 部署在PC Server 上,因此可以充分利用PC Server 的极高的性价比优势实现负载平衡。值得注意的是,这里使用了“平衡”,而不是“均衡”。

可以独立或同时实施下述方案与技术:

1. 规划设计----平衡分布

在系统规则时,就需要设计一定的策略,将数据库分布部署在不同的数据库(甚至不同的服务器)。

例如,工厂的流水线生产过程中的数据采集,可以根据车间与流水线的分布情况,部署多套SQL Server。

又如,一家从事鞋服销售的电商,可以根据产品类别(鞋、童装、成人套装、等),将不同的业务数据分布部署到多套SQL Server。

实现数据库分布部署之后,对于其中某些共通数据,既可以集中到某一套SQL Server,也可以在多套SQL Server 中通过复制(replicate)实现数据同步(如下图)。

SQL Server 的日志传送、可用组性等技术,实现了多个副本的read-only 访问,实际上也能承担负载平衡,但仅限于“读写分离”。

2. 技术实现----复制(replication)

复制是一组技术,它将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。使用复制,可以在局域网和广域网、拨号连接、无线连接和 Internet 上将数据分发到不同位置以及分发给远程或移动用户。http://msdn.microsoft.com/zh-cn/library/ms151198.aspx

SQL Server 主要通过以下3种复制,提供功能强大且灵活的系统,以便使企业范围的数据同步。

(1)事务复制:通常用于需要高吞吐量的服务器到服务器方案,包括:提高伸缩性和可用性、数据仓库和报告、集成多个站点的数据、集成异类数据以及减轻批处理的负荷。

(2)合并复制:主要是为可能存在数据冲突的移动应用程序或分步式服务器应用程序设计的。常见应用场景包括:与移动用户交换数据、POS(消费者销售点)应用程序以及集成来自多个站点的数据。

(3)快照复制:用于为事务复制和合并复制提供初始数据集;在适合数据完全刷新时也可以使用快照复制。

复制有多种方式,其中事务(对等)复制与合并复制可以实现负载平衡,但要考虑复制时存在的延迟。

(1)对等复制

对等复制可以同时在多个位置(服务器)修改同一条记录,这必然会带来冲突。

在程序设计之初,就应当尽可能地消除冲突。当冲突不可避免时,可以指定专门的写入区域,解决冲突,如下图的右侧所示。

(2)合并复制

合并复制允许不同站点自主工作,并在以后将更新合并成一个统一的结果。由于更新是在多个节点上进行的,同一数据可能由发布服务器和多个订阅服务器进行了更新。因此,在合并更新时可能会产生冲突,合并复制提供了多种处理冲突的方法,并在晚些时候合并更改和根据需要解决冲突。

四、案例

1. 基于大量数据处理的非SQL Server 案例

某大型通信公司的计费系统以省为单位组建数据库系统,全网由北京公司做交换池通信,各省的数据库都不尽相同的。其中,省公司的计费系统又分为后付费(全球通)和预付费(智能网)。

某门户网站,春运期间高峰时每秒有20万人同时在线,一天内共有1700万人次登录,日点击量高达15 亿次。为了在高峰期提高刷屏的效率,多家网站都推出了“抢票插件”。据未经证实的消息,该网站耗资5亿元,每天完成 200 万笔订单。(同样据未经证实的消息,“双十一”开闸的第一个小时内“支付宝”处理了598 万笔付款。)

2. 电商的SQL Server数据库

国内电商,例如ctrip、elong、VANCL,都可以见到SQL Server的成功案例。

例如:ctrip 每天都在通过门户站点收集着海量的业务数据,SQL Server 为支持庞大的客户端连接提供了技术支持。

http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=154

例如:VANCL 以 SQL Server 为基础来支撑公司的关键业务,保障订单高效、准确的处理,并随时监控库存和物流情况,为客户提供更加优异的购物体验。

http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=127

3. 券商的SQL Server数据库

国内的证券交易软件大多数采用金证公司(深圳市金证科技股份有限公司,股票代码600446.SH)开发的在线交易平台。据金证公司的公开资料显示:公司在券商营销服务系统方面耕耘16载,在50家建设了呼叫中心的券商中,就有33家由金证公司建设。金证公司推出的一体化营销服务平台已被中信证券、国泰君安(http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=78)、国信证券(http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=56)等13家大券商采用。金证公司最重要产品线之一金证一体化营销服务平台市场份额已达40%以上。

http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=22

本文结语: 不要把所有的鸡蛋都放在一个篮子里,这个篮子再大,能装下的鸡蛋也是有限的。宏观上,考虑多用几个篮子。

服务器优化(2)性能评测与负载预估

一、历史版本

在SQL Server 中运行以下查询,可得出版本号:

select @@version

查询结果示例如下:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 10:11:52   
Copyright (c) 1988-2008 Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

8.00.194.0           SQL Server 2000 RTM
8.00.384.0 SQL Server 2000 SP1
8.00.534.0 SQL Server 2000 SP2
8.00.760.0 SQL Server 2000 SP3/SP3a
8.00.2039 SQL Server 2000 SP4
 
9.00.1399 SQL Server 2005 RTM
9.00.2047 SQL Server 2005 SP1
9.00.3042 SQL Server 2005 SP2
9.00.4035 SQL Server 2005 SP3
9.00.5000 SQL Server 2005 SP4
 
10.00.1600 SQL Server 2008 RTM
10.00.2531 SQL Server 2008 SP1
10.00.4000 SQL Server 2008 SP2
10.00.5500 SQL Server 2008 SP3
 
10.50.1600 SQL Server 2008 R2 RTM
10.50.2500 SQL Server 2008 R2 SP1
10.50.4000 SQL Server 2008 R2 SP2
 
11.00.2100 SQL Server 2012 RTM
11.00.3000 SQL Server 2012 SP1
 
11.0.9120.5 SQL Server 2014 CTP1

二、TPC简介

1. TPC

TPC即事务处理性能委员会(Transaction Processing Performance Council),是由数十家会员组成创建的非盈利机构,也是国际权威的第三方性能评测机构,其功能是负责制定商务应用测试基准规范并监督、管理发布测试结果,其总部设立在美国,官方网址为http://www.tpc.org/default.asp。

TPC发布了TPC-A、TPC-B、TPC-C、TPC-D、TPC-E、TPC-H、TPC-R、TPC-W、TPC-APP等数套基准规范,其侧重点各有不同,有些基准规范已经过时并废弃不用,如TPC-A测试基准。

TPC组织不给出基准程序的代码,而只给出基准程序的标准规范。任何公司或个人都可以作为测试者按照规范开发、优化自己的测试系统,但为了保证测试结果的完整性和公正性,测试者都必须提交给TPC一套完整的测试报告:包括被测试系统的各部分配置说明、价格,以及原程序代码、测试结果等信息;该报告和系统由TPC分布在全球的审核员进行现场审核并最终发布。

2. TPC-C

TPC-C是TPC Benchmark C的简称,自1992年沿用至今,是一个OLTP测试基准,其意在衡量联机事务处理系统的性能和性价比。

TPC-C模拟了一个货物批发商的管理系统,如下图所示。该公司有W个仓库,每个仓库供应10个地区的货物,每个地区为3000名客户提供服务。每个仓库有10个终端,每个终端对应着一个地区,操作员在10×W个终端上向公司系统发送5种请求:新订单(New-Order)、付款(Payment)、发货(Delivery)、查询订单状态(Order-Status)、查询库存(Stock-Level)。W是一个可变的参数,可以更改W以获得最佳的测试结果。

TPC-C使用性能和价格度量,其中性能由tpmC(transactions per minute,tpm)衡量,C指TPC中的C基准程序。它的定义是每分钟内系统处理的新订单个数。新订单(New-Order)、付款(Payment)、发货(Delivery)、查询订单状态(Order-Status)、查询库存(Stock-Level)5种交易中,除付货交易是事后批处理,其余4种皆为联机交易。要注意的是,在处理新订单的同时,系统还要处理其他4类事务请求。通常而言,新订单请求不可能超出全部事务请求的45%,因此,当一个系统的性能为1000tpmC时,它每分钟实际处理的请求数是2000多个。

TPC-C还以系统性能价格比的方式体现,单位是$/tpmC,即以系统的总价格(单位是美元)/tpmC数值得出。

3. TPC-E

2007年3月TPC宣布批准了名为TPC-E的新标准以取代TPC-C标准。

http://server.it168.com/a2008/0910/204/000000204400.shtml

TPC-E的测试指标与TCP-C类似,时间单位从TPC-C中的以分钟计变为TPC-E中的以秒计。性能指标(tpsE, transactions per second E)是指系统在执行多种交易时,每秒钟可以处理多少交易,其指标值越大越好;性价比指标(美元/tpsE)是指系统价格与前一指标的比值,数值越小越好。

TPC-E对模型进行大刀阔斧的创新——模拟证券经纪公司(以NASDAQ为原型)而不是批发商的流量和交易模式,从C/S架构过渡到B/S架构,数据类型从原来的3种扩展到10种,事务类型从原来的5种增加到12种,数据表由原来的9个增加到了33个,数据库构成更加复杂,也更加符合实际应用,当然对服务器的性能要求也更高了。

 

4. TPC测试的硬件成本

由于TPC-C的模型比较简单,服务器在测试时只是做一些简单的数据查询、修改和删除操作;而在多核计算盛行的今天,针对这种应用,强大的服务器CPU容易处于等待数据的空闲状态,I/O因而成为严重瓶颈。为了提升I/O,保证测试性能,服务器厂商往往需要动用大量的内存和磁盘。比如IBM和惠普公司在获得最高分的TPC-C测试时都使用了7000块硬盘。这使得参加TPC-C测试所需要的成本高达千万美元。如此巨额成本大大提高了TPC-C的门槛,将很多小型服务器厂商拒之门外。而且,从用户角度来看,实际应用可能并不需要如此海量的内存和磁盘,TPC-C结果的适用性也受到了质疑。

而TPC-E则不同。由于数据库更加复杂,要执行的事务处理更多——TPC-E标准中定义的事务有12种,每个事务对应数据库管理系统中的一个或多个带输入和输出参数的存储过程,而且会涉及到不同表间的关联,这使得服务器CPU容易处在“有事可做”的状态,因而对内存和磁盘I/O的要求也相对小一些,从而大大降低了服务器厂商搭建硬件环境的成本。

三、SQL Server的TPC测试的部分结果

http://www.tpc.org/tpcc/results/tpcc_results.asp

http://www.tpc.org/tpce/results/tpce_results.asp

1. SQL Server 2000

tpmc: 67,754

Price/tpmC:2.36 USD

可用日期:02/14/2005

服务器: HP ProLiant DL380G4,Intel Xeon - 3.6 GHz,2CPU*超线程,12GB内存

数据库: Microsoft SQL Server 2000 Enterprise Edition SP3

操作系统:Microsoft Windows Server 2003 Enterprise Edition

2. SQL Server 2005

tpmc: 1,024,380

Price/tpmC:0.65 USD

可用日期:06/20/2011

服务器: HP ProLiant DL380 G7,Intel Xeon X5690 Hex-Core - 3.46 GHz,2CPU*6Core*超线程

数据库: Microsoft SQL Server 2005 Enterprise Edition x64 SP3

操作系统:Microsoft Windows Server 2008 R2 Enterprise Edition

tpsE: 268.00

Price/tpsE:795.21 USD

可用日期:12/11/07

服务器: Dell PE2900,Intel Xeon X5460 Quad-Core - 3.16 GHz,2CPU*4Core,48GB内存,232块硬盘

数据库: Microsoft SQL Server 2005 Enterprise Edition x64 SP2,db=1,666GB

操作系统:Microsoft Windows Server 2003 R2 Enterprise Edition x64

3. SQL Server 2008

tpsE: 817.15

Price/tpsE:319.15 USD

可用日期:07/31/09

服务器: IBM System x3650 M2,Intel Xeon X5570 Quad-Core - 2.93 GHz,2CPU*4core*超线程,96GB内存,392块磁盘

数据库: Microsoft SQL Server 2008 Enterprise Edition x64 SP1,db=3,163GB

操作系统:Microsoft Windows Server 2008 Enterprise Edition x64

4. SQL Server 2008 R2

tpsE: 1,284.14

Price/tpsE:250.00 USD

可用日期:05/04/11

服务器: HP ProLiant DL380 G7,Intel Xeon X5690 Hex-Core - 3.46 GHz,2CPU*6Core*超线程,192GB内存,84块硬盘

数据库: Microsoft SQL Server 2008 R2 Enterprise Edition x64,db=5,622GB

操作系统:Microsoft Windows Server 2008 R2 Enterprise Edition

5. SQL Server 2012

tpsE: 1,881.76

Price/tpsE:173.00 USD

可用日期:11/21/12

服务器: HP ProLiant DL380p Gen8,Intel Xeon E5-2690 - 2.90 GHz,2CPU*8Core*超线程,256GB内存,40块硬盘

数据库: Microsoft SQL Server 2012 Enterprise Edition , db=7,792 GB

操作系统:Microsoft Windows Server 2012 Standard Edition

四、数据库服务器处理性能估算

系统的建设,必须满足未来3~5年业务发展和管理的需求,所以下面对服务器性能指标的估算,将以满足未来3~5年的需要为基准。以下计算方法转载自 http://blog.csdn.net/educast/article/details/9322437

假定:

系统同时在线用户数为100人(U1);

平均每个用户每分钟发出2次业务请求(N1);

系统发出的业务请求中,更新、查询、统计各占1/3;

平均每次更新业务产生3个事务(T1);

平均每次查询业务产生8个事务(T2);平均每次统计业务产生13个事务(T3);

一天内忙时的处理量为平均值的5倍;

经验系数为1.6;(实际工程经验)

考虑服务器保留30%的冗余;

服务器需要的处理能力为:

TPC-C=U1*N1*(T1+T2+T3)/3*3*经验系数/冗余系数

则数据库服务器的处理性能估算为:

TPC-C= 100*2*(3+8+13)/3*5*1.6/0.7= 18,285 TPM

本文结语: 购买和配置服务器时,通过对服务器性能指标的估算,以满足长远的需要。

服务器优化(3)服务器端优化措施

一、硬件

如果条件允许,则尽可能使用性能更好的硬件设备。

1、CPU

CPU 的选型原则,一般先看主频的高低,然后考虑二级缓存的大小。

其次,注意 Windows 的电源选项。

2、内存

原则上,内存越多越好。

3、磁盘

磁盘是数据库系统的最大瓶颈。建议优先考虑 spindle ,再考虑 RAID。后文将有详细说明。

4、网卡

网卡选型时往往将带宽作为第一要素。实际上更应该注意到,降低网络延迟不仅仅在于提高带宽,高性能的低延迟网卡有助于提高网络性能。

Intel 是这样解释网络延迟的:

根据Intel发布的案例,纽约证交所数据骨干网使用万兆以太网RDMA技术,可实现每秒18~46微秒的延迟,平均延迟为26微秒。http://ftps.zdnet.com.cn/files/3/21643.pdf

二、Server Core

Server Core(服务器核心)是Windows Server 2008及后续版本提供的功能。它允许在服务器上安装极小的安装选项,从而为特定的服务提供一个可执行的、功能有限的、低维护的服务器环境,能有效地提高安全性和降低管理复杂度。Microsoft表示,Server Core可以实现最大程度的稳定性。关于 Windows Server Core 的安装,请参考《Windows 2008 服务器核心(Server Core)》 http://jimshu.blog.51cto.com/3171847/1091798

为减少GUI 对操作系统和应用程序的影响,提升性能与稳定性,可以考虑将 SQL Server 安装在 Server Core 上。

SQL Server 2012 的新特性之一,就是可以安装在 Server Core上。SQL Server 2012 之前的版本不支持 Server Core(实际上是Windows Server 2008不支持安装.Net Framework)。

三、消除应用软件的影响

一般建议将某台服务器作为专门的数据库服务器,并且尽可能避免在这台服务器上安装其它应用软件。

我在实践中曾经遇到以下3类软件对数据库产生严重影响。

1、防病毒软件

其中一个案例,数据库反应非常慢,感觉像deadlock。最后竟然发生了蓝屏。经过对蓝屏dump文件进行分析,19#处理器当时有12380个work item在等待,而某防病毒软件的进程运行已超过5分钟仍处于pending状态(正常情况下应该是各个进程轮流使用处理器),导致阻塞。最后联系该软件的厂家,得知厂家已经建议不要在服务器上安装运行此进程。

2、第三方的备份软件

其中一个案例,发现SQL Server性能持续下降的原因是内存不足。根据收集到的日志发现此问题的 tag: Ddk,总共 200MB 左右的非分页内存,Ddk 中占用了 167MB。通过命令 findstr /l /m Ddk C:\Windows\system32\drivers\*.sys ,找到 4 个驱动程序。其中一个为第三方的备份软件,停用该软件后恢复正常。

3、第三方的群集软件

由于 Microsoft Cluster Server(MSCS)必须安装在 Windows Server 的 enterprise edition,因此有些客户使用了第三方的群集软件。

其中一个案例,经过监视 Windows 计数器,发现 SQL Server 在访问磁盘时,磁盘I/O的读写速度被锁定在 8KB/s。

四、虚拟化

对于数据库服务器而言,如果将数据库服务器进行虚拟化,应当注意资源(内存、CPU、磁盘I/O、网卡等)的竞争。

其中最重要的是内存。VMware 是这样解释内存的:

根据上图所示,这台虚拟机(也称客户机,Guest)的最大可用内存为 configured,reservation 是保留给这台虚拟机专用的(其中 Touched memory 是指已经被使用的内存)。当物理机的内存已经全部分配完毕,而其它虚拟机还需要更多的动态内存时,这台虚拟机就会释放 reservation 与 configured 之间的那部分动态内存(因此这部分称为 swappable),内存中的数据会被转移到磁盘上的 VM swap file 。

由于 SQL Server 对内存非常敏感,特别是在从VM swap file 将内存数据重新加载到物理内存的时候会导致SQL Server出现短暂的“假死”状态,因此一般建议在虚拟化配置时将虚拟机设定为静态内存管理。

本文结语: 服务器的优化措施包括硬件、软件、操作系统、虚拟化各方面的优化。

服务器优化(4)资源调控器管理工作负荷

一、概述

资源调控器(Resorce Governor)是SQL Server 2008新增的一项功能。它的目的不是用来监视SQL Server的工作负载,而是用来限制某些用户访问SQL Server时所占用的CPU、内存资源。启动后,SQL Server的处理流程如下图所示。

资源调控器通常用于以下场景:

1. 服务器上的查询用尽

在这种情况下,资源消耗比较大的查询会占用大多数或所有服务器资源。例如,销售部做一张销售分析的大型报表,可能导致其它的业务反应非常缓慢。

2. 不可预测的工作负荷执行

在这种情况下,相同服务器上的并行应用程序将具有不同大小和类型的工作负荷。例如,两个数据仓库应用程序或 OLTP 和数据仓库应用程序的混合。这些应用程序彼此不是孤立的,产生的资源争用将导致不可预测的工作负荷执行。

3. 设置工作负荷优先级

在这种情况下,允许一个工作负荷的执行速度快于另一个工作负荷,或者在存在资源争用的情况下保证完成一个工作负荷。使用资源调控器可以为工作负荷分配相对重要性。

二、启用资源调控器

1. 使用SSMS

在启用之后,如果需要禁用资源调控器,则在上图中清除“启用资源调控器”选项。

2. 使用T-SQL

ALTER RESOURCE GOVERNOR RECONFIGURE

如需禁用,则运行以下命令

ALTER RESOURCE GOVERNOR DISABLE

三、资源池

资源调控器预定义两个资源池:内部池和默认池。用户可以新建资源池。

1. 内部池

内部池表示由 SQL Server 自身消耗的资源。 这个池始终只包含内部组,在任何情况下都不允许更改池。 不限制内部池的资源消耗。 池中的所有工作负荷均视为服务器函数的关键内容,资源调控器允许内部池在与其他池的限制发生冲突时争用资源。

注意:不从总体资源使用情况中减去内部池和内部组资源使用情况。 使用可用的总体资源计算百分比。

2. 默认池

默认的池是第一个预定义的用户池。 在进行任何配置之前,默认池只包含默认组。 不能创建或删除默认池,但可以更改。 默认池除了包含默认组,还可以包含用户定义的组。

注意:可以更改默认组,但不能从默认池中移出。

3. 用户定义的资源池

资源调控器提供用于创建、更改和删除资源池的 DDL 语句。http://technet.microsoft.com/zh-cn/library/hh510189.aspx

或者使用SSMS新建资源池。

四、工作负荷组

工作负荷组仅仅是一个与用户会话相关联的名称。它不是指查询工作负荷,而是指一个正在执行查询的登录。它只负责建立连接的标识,创建工作负荷组后,资源调控器就可以将连接分配到合适的资源池。

资源调控器还提供了用于创建、更改和删除工作负荷组的 DDL 语句。 http://technet.microsoft.com/zh-cn/library/hh510228.aspx

或者使用SSMS创建工作组负荷。

五、分类器函数

http://technet.microsoft.com/zh-cn/library/hh510208.aspx

1. 创建分类器函数

资源调控器支持对传入会话的分类。 分类基于函数中包含的一组用户编写的条件。 函数逻辑的结果使资源调控器可以将会话归入现有工作负荷组类。

注意:内部工作负荷组中填入的是仅供内部使用的请求。 您不能更改用于路由这些请求的标准,也不能将请求归入内部工作负荷组类。

您可以在master数据库中编写一个标量函数,在其中包含用于将传入会话分配给工作负荷组的逻辑。http://technet.microsoft.com/zh-cn/library/cc645892.aspx

例如,需要将登录名为“ZhangS”的用户列入Reporting工作负荷组。注意:工作负荷组的名称对大小写敏感。

USE master
GO
CREATE FUNCTION dbo.fn_ResourceGovernorClassifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @group sysname
IF SUSER_SNAME() = 'ZhangS'
SET @group = 'Reporting'
RETURN @group
END
GO

2. 注册分类器函数并更新资源调控器配置

将分类器函数连接到资源调控器。创建分类器函数并应用配置更改后,资源调控器分类器将使用此函数返回的工作负荷组名称将新请求发送到相应的工作负荷组。

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.fn_ResourceGovernorClassifier)
ALTER RESOURCE GOVERNOR RECONFIGURE

或者使用SSMS

六、资源调控器视图

http://technet.microsoft.com/zh-cn/library/bb895339(v=SQL.100).aspx

例如:

SELECT * FROM sys.resource_governor_resource_pools
SELECT * FROM sys.resource_governor_workload_groups
SELECT * FROM sys.resource_governor_configuration

七、限制

1. 版本限制

资源调控器仅适用于企业版、开发版、评估版。

2. 功能限制

资源管理仅限于 SQL Server 数据库引擎,资源调控器不能用于 Analysis Services、Integration Services 和 Reporting Services。

资源调控器无法调控 I/O,希望下一个版本的 SQL Server 增加支持。

3. 局限性

一个资源调控器只可以调控该实例本身的连接。

资源调控器可以管理 OLTP 工作负荷,但通常持续时间非常短的查询类型总是在 CPU 上停留很短时间而不足以应用带宽控制。这样会使返回的 CPU 使用率的统计信息有偏差。

本文结语: 资源调控器可以对实例内部的工作负荷进行调控,但调控的内容仅限于CPU和内存。

服务器优化(5)数据库版本的选型

一、核心版本

1. 发行版本

产品在上市时,面对不同的客户需求,推出不同的发行版本(Edition)。就像生活中购买汽车一样,有低配版、标配版、豪华版的划分。各种Edition的核心功能基本上没有区别,只是在功能扩展、运行性能、用户体验等方面会有些差异

由于有些Edition“阉割”了部分功能,因此价格上很有优势。

一般来说,SQL Server 的核心版本是指上市公开销售的主流Edition,一般“低配版”是指标准版(Standard),“豪华版”是指企业版(Enterprise)。人们在比较数据库性能的时候,常见的误区是拿SQL Server 的“低配版”(每套仅数万元)跟其它数据库的“豪华版”(每套在百万元或更高)进行性能比拼。

除了核心版本,还有移动版(Compact)、工作组版(Workgroup)、评估版、速成版、开发版等。

2. 核心版本的变化

SQL Server 2008 的核心版本分为企业版、标准版。

SQL Server 2008 R2 将企业版拆分为数据中心版和企业版,因此核心版本分为数据中心版、企业版、标准版。

SQL Server 2012 的核心版本分为企业版、BI(商业智能)版、标准版。

3. 各种发行版本的区别

(1)数据中心版

SQL Server 2008 R2 将前一版本的企业版拆分,拆分后的数据中心版包含了所有的功能,并且没有任何的硬件限制。

拆分后的SQL Server 2008 R2 企业版则限制了几项功能:

a. 硬件限制。限8个CPU,限2TB内存

b. 功能限制。StreamInsight仅支持标准版。(数据中心版则支持StreamInsight的Premium edition)

(2)企业版

除了SQL Server 2008 R2 之外,其它的版本中企业版都是核心版本中的最高版本,适用于海量数据、大量并发用户的特定业务场景。企业版包括了所有的功能,并且没有硬件限制。相比于其它的“低配版”,企业版具有以下优势:

a. 充分利用硬件优势。

b. 针对特定场景的一些增强功能。

(3)BI 版

BI版是SQL Server 2012 才有的一种版本。

(4)标准版

标准版仅适用于数据量小、并发用户少、业务功能简单的业务场景,在这种场景下,客户不需要发挥SQL Server 的全部能力。有以下限制。

a. 硬件限制。限4个CPU、64GB内存,不支持IA64处理器架构。

b. 主要的功能限制。没有表和索引分区、数据压缩、并行索引、资源调控器、增强的预读和扫描、索引视图、数据库快照等功能,数据库群集仅支持2节点,镜像仅限于单线程同步。

二、评估(Evaluation)版

评估版即试用版,具有企业版的全部特性和所有功能,但是不可以在生产环境中使用,而且有效期只有180天。可以在官网下载这个版本。

三、开发(Developer)版

开发版的功能与企业版一样,没有任何硬件与功能限制,而且开发版的价格几乎是“白菜价”。在正规的开发场景中,应当为每位开发者在本机安装一套SQL Server 开发版,避免连接到正式的生产数据库。而在国内的开发实践中,经常发生DBA、程序员直接连接到生产数据库后发生误删数据甚至误删数据库的悲剧。

开发版仅授权用于单机的开发环境,不可以用在生产环境,也就是说不能用于正式运营的业务数据库。 基于此场景,开发版安装之后默认不启用Named Pipe、TCP/IP等协议。

四、速成(Express)版

速成版是SQL Server 的一个免费版本,通常用于满足嵌入式应用程序的需求,也能满足基于服务器的应用程序的基本数据存储需求,并且可以用于生产环境。可以在官网下载这个版本。主要有以下限制:

a. 硬件限制。限1个CPU、1GB内存。

b. 主要的功能限制。数据库限制10GB(SQL Server 2008及之前的版本,限制为4GB),缺少数据库群集、镜像、SSAS、SSIS等功能。

根据不同的客户需求,速成版还提供3种安装包:

a. Express。仅提供数据库引擎。

b. Express with Advanced Tool。除了数据库引擎,还提供了SSMS的图形管理界面。

c. Express with Advanced Services。除了数据库引擎、SSMS,还提供SSRS。

本文结语: 不要拿SQL Server 标准版的性能说事。标准版就像奇瑞QQ,Express版则是无需上牌的电动车,企业版才是豪车。

服务器优化(6)WSRM管理多个实例

一、多实例的资源竞争

从SQL Server 2000开始,允许在一台服务器上安装多个SQL Server实例。其中只有一个可以是“默认实例”,实例的名称为MSSQLSERVER;其余的实例都必须是“命名实例”。

在一台服务器上安装多个SQL Server实例时,可以为不同的实例分配资源。资源调控器在这里不适用,因为资源调控器仅基于单个实例。因此,需要使用WSRM(Windows System Resource Manager)。

二、安装WSRM

从Windows Server 2008开始,WSRM就成为了Windows的内置功能。

安装WSRM时必须同时选择安装“Windows内部数据库”。

三、使用WSRM

1. 打开WSRM

在“管理工具”中打开“Windows 系统资源管理器”。

在“连接到计算机”对话窗口选择“此计算机”。

2. 新建进程匹配条件

依次展开“Windows 系统资源管理器”、“进程匹配条件”。在右键菜单中选择“新建进程匹配条件”。

新建一个名为“MSSQLSERVER”的条件。然后单击“添加按钮”添加一个规则。

 在“添加规则”窗口,单击“选择”按钮选择一个服务。

在“添加 已注册的服务”对话窗口,选择默认实例。

完成上述操作后,再以类似的步骤新建一个名为“SQLEXPRESS”的条件,在“添加 已注册的服务”时选择名为SQLEXPRESS的命名实例。

3. 新建资源分配策略

展开“资源分配策略” 节点,在右键菜单中选择“新建资源分配策略”。

新建一个名为“BalanceInstance”的策略。然后单击“添加”按钮添加一个进程匹配条件。

在“添加或编辑资源分配”窗口,在“进程匹配条件”下拉列表中选择一个进程匹配条件,并为其分配资源,例如,45%的CPU。

然后再添加第二个进程匹配条件。这样就把2个实例都分配了资源。如下图。

4. 设为管理策略

在“资源分配策略”的详细列表窗格,选择上一步新建的资源分配策略,在右键菜单中选择“设置为管理策略”。

设置完成之后,这个资源分配策略的右侧会显示“{管理}”的标识。

本文结语: 资源调控器只能在某个实例内部调控工作负荷。WSRM则基于服务器,为服务器上的多个实例分配CPU和内存的百分比。

相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
 
分享到
 
 


MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...