SQL Server 2005新性能简述
 

不可否认,说到真正的企业特性,尤其是在高可用性和灾难恢复方面,SQL Server总是比不上Oracle数据库。Oracle凭借联机重建索引、基于快照的恢复和故障替换时进行日志传送等特性,能够满足24×7的关键业务型操作,而SQL Server要是没有第三方解决方案的帮助,则无法提供真正的零数据丢失。对不需要上述这些保护的客户而言,SQL Server提供了可靠稳定的数据库,而且许可费比较低。不过与维护有关的停机却是个不争的事实。

现在,这种状况已发生了变化。经过五年多的修改后,SQL Server 2005不但克服了高可用性和灾难恢复方面的缺点,还几乎在各个方面都有了全面改进:管理任务得到了简化;监控和诊断功能得到了增强;默认的锁定配置、数据加密及其他新特性增强了安全。如今,分析服务(Analysis Services)、报表服务(Reporting Services)和数据挖掘(Data Mining)全面集成,而且已经很成熟。数据转换服务(DTS)已从头到尾经过了改写,已逐渐成为更强大、更灵活的SQL服务器集成服务(SSIS)。与Visual Studio和.Net/CLR的集成,把SQL Server的内部机制展现给了.Net开发人员、把.Net的内部机制展现给了SQL开发人员。这意味着,现在就可以利用.Net的强大功能,用于存储过程、数据流和数据转换、商业智能等应用。

SQL Server 2005还承诺能够提高性能。除了让数据库管理员对数据库进行分区、实现负载均衡外,微软还在改进内存管理、索引策略和查询优化方面进行了大量工作。用户会看到这种区别的。

目前的SQL开发人员和数据库管理员需要一段时间才能充分认识到SQL Server 2005出现的许多变化。高可用性方面的一个关键特性:数据库镜像(database mirroring)实际上仍只是“测试版本”。微软还有一些工作要做,特别是在集成及完善SQL Server的许多工具方面。不过,微软的彻底修改缩小了SQL Server与Oracle之间的差距,SQL Server由此成为一个真正的竞争者,哪怕是在大型数据库和要求极高的企业环境这一领域。

图1 SSIS的新的控制流容器其功能远远超过了DTS的功能,它让你可以对操作进行分类、按顺序执行。

SSIS一瞥

集成工具集的全面变化给数据库管理员带来了受人欢迎的挑战。

优点:新的建模范例、流控制容器和.Net集成扩充了功能;软件包易于编写、存储及部署;复杂操作执行起来比以往快得多。

缺点:比较复杂的工具集有些地方难以学会;没有与Management Studio集成。

移动数据的新方法

SSIS是经过改写的用于移动及操纵数据的一组工具,它不但提供了比数据转换服务(DTS)大为改进的性能、可靠性和功能,而且提供了许多新的预制任务,可以用于减少执行最常见的一些操作所需的代码数量,其中包括备份数据库、为表重建索引以及进行完整性检查。更为重要的是,SSIS完全改变了DTS使用的建模范例(modeling paradigm),以逻辑方式把其基本模块划分成不同的控制流和数据流部分。

控制流容器以图形化方式表示了操作,不然,开发人员需要编写大量代码,花费大量时间来进行调试。用新容器(即Sequence、For Loop和Foreach等容器)执行的有些操作根本无法用DTS来执行,要么就是管理起来太困难。

SSIS还把范围扩大到了不同平台,而不仅仅是不同数据库。譬如说,DTS提供了联机分析处理(OLAP)方面的有限的可见性,实际上根本不提供数据挖掘方面的可见性,而SSIS原本就支持这些可见性。这意味着,可以运行数据挖掘查询、处理慢慢变化的维度,并把数据发送到用户喜欢的任何地方(甚至可以发送到报表服务工具)。实际上,SSIS充当了SQL服务器分析服务(SSAS)、SQL服务器解析服务(SSRS)以及符合面向对象数据库连接性(ODBC)的任何数据源之间的桥梁。

软件包配置是得到大幅改进的另一个方面。这种配置让用户可以定义软件包的某些元素:文件位置、数据库连接和特殊登录等元素,它们可以从外部数据源(如XML文件)读取、运行时加以运用。这项功能让用户可以非常迅速地部署软件包,因为不必改变它们就可以把它们从一个系统移动到另一系统;用户只要改变配置里面的动态元素,软件包就会在新服务器上运行。

最后,但并非最不重要的一点是,新的.Net集成功能把SSIS从DTS对功能有限的VBscript的依赖当中解放出来,让代码编写人员能够使用功能丰富的VB.net。正是由于这个原因,文件和字符串处理、数学运算和Win32调用大大简化、速度大大加快。

读者朋友可能已经预料到,功能和灵活性都增强的SSIS是以变得更复杂为代价的。SSIS摆在人们面前的是似乎困难重重的学习过程,不过一旦学会如何使用之后,SSIS会改变你处理数据的方式。以往无法联系的系统现在可以完美集成,还可以利用.Net的全面功能。复杂数据把操作导入数据仓库和分散的系统只用耗用一小部分时间来创建、执行及支持。其他复杂任务的执行速度也会大大加快,这意味着,可以更容易及时完成项目,项目也不会因功能有限的DTS以及必须把诸多操作组合起来而被耽搁。

图2 Management Studio整合了OLTP和OLAP管理与开发,它使用报表服务在数据库上提供详细报表。

管理一瞥

管理工具的动态变化不会让用户完全满意。

优点:监控、改进的复制、联机恢复及其他功能提高了可用性、加快了灾难恢复;动态管理视图件和监控方面的改进为了解数据库操作提供了更好的可视性;安全方面的改进包括:支持Windows口令政策、加强了对模式变更的控制以及本地加密。

缺点:Management Studio存在性能和稳定性问题; Profiler没有与SSMS合并。 还没有正式支持镜像功能。

大大加强管理功能

微软还对管理工具进行了一些重大改进,用新的SQL Server Management Studio(SSMS)取代了企业管理器和查询分析器。SSMS既可以用做数据库命令行——可以用来执行诸如创建数据库和管理用户账户之类的任务;又可以用作编写数据库代码的工具。SSIS和Profiler没有被整合到SSMS里面。

这些改变不会让用户完全感到满意。首先,执行通常的查询任务,譬如浏览执行计划,甚至只是执行查询,速度都要慢得多。查询在运行时,屏幕几乎没有多大反应,查询执行计划所用的时间也要长得多,有时还会导致窗口停止。微软还改变了执行计划的布局,所以比较大的计划浏览起来会困难得多。许多用户偏爱的键盘快捷键也被取消了,现在要是用鼠标右键点击视图(过去这项操作可以让你编辑视图),会把你直接引向查询生成器。许多数据库管理员不会喜欢这样。

不过与总体上更丰富的管理功能相比,这些不便之处并不重要。微软在一个方面取得了出人意料的成功,那就是SQL错误日志管理。SSMS不但可以显示SQL错误日志,还能够把它们与Windows NT事件日志结合起来放在同一窗口显示,让数据库管理员在一个地方就能浏览所有相关信息。另外值得一提的是Profiler的改进之处:现在它可以结合SQL跟踪日志和Perfmon日志。这就大大简化了把性能计数器和特定查询关联起来。实际上,如今要找到用户想搜寻的具体内容轻而易举,因为只要点击Perfmon日志里面的性能峰值,它就会自动把用户带到Profiler日志里面的相关地方。

SQL的新管理功能其核心是动态管理视图(DMV)和函数,这样系统管理员就能更加深入地了解数据库操作。过去微软把数据库的较深层面隐藏起来,可是要满足管理大型数据库的需求,势必需要为数据库管理员赋予更大的控制权。DMV为了解内存、索引使用、表统计信息、服务器统计信息和安全等信息提供了更大的可见性。现在只要用鼠标轻轻一点,就能看到以往所没有的众多信息。

此外,数据库管理员可以得到详细数据库和服务器统计信息方面的现成报表,其中包括模式更改、内存和索引使用、资源耗用、分块及其他许多信息。SSMS依赖SSRS实现这项功能,不过如果在忙碌的服务器或者拥有大量对象的大型数据库上调用报表,有时候SSMS会陷入停顿。让人有点失望的还有,微软也没有提供报表定义语言(RDL)代码。因而,用户没法改变现成报表(canned report)的布局,也无法像通常使用SSRS那样添加自己的报表或者创建订阅内容。不过,可以把报表手动导出到Excel或者PDF。

SQL Server 2005的一个重要设计目标就是提高默认状态下的安全系数。为了缩小被攻击范围,最危险的一些特性都被禁用,除非数据库管理员启用它们。这有所帮助,不过对有经验的数据库管理员来说帮助不大。他们基本上会编写锁定脚本,觉得安装时加以运行不是很麻烦。安全方面真正重要的改进则是密码管理和权限分配方面。现在可以设置原始SQL密码来顾及Windows密码政策,这意味着用户可以要求SQL密码拥有与Windows账户同样的密码强度、失效日期、历史、锁定阈值、锁定时间及生命期等政策,甚至可以要求用户在下次登录时更改密码。安全方面的其他重要改进还包括:加强了对模式变更的控制(下文会有所讨论)、能够对数据进行列级加密。

#p#SQL Server 2005还提供了激动人心的一些新特性,以提高可用性、加强灾难恢复。在高可用性方面,微软已经推出了数据库镜像功能,并且对复制功能做了一些重要改变。现在,模式方面的更改会自动复制到订阅者处。数据库管理员再也用不着手工运行代码来实现这操作。出现故障后,再也用不着重新启动快照;网络出现故障或者其他小失误后,快照会自动恢复,这样就可以大大加快高可用性场景的投入使用。另外,逻辑记录复制功能可确保高可用性场景更加稳定一致,排除了订阅者端的逻辑错误。这项功能让用户可以定义可一起复制或者单独复制的父数据和子数据。

镜像功能让用户可以指定另一台服务器上的某个数据库与主数据库保持同步。这样一来,万一主服务器出现故障,就可以自动切换至镜像服务器,从而提供了SQL Server的第一个零数据丢失高可用性场景。这种配置对应用和网络来说开销很大,所以用户需要进行全面测试,但这项功能终究摆在了人们面前。不过要注意:镜像功能还称不上是这个版本的一项生产特性。微软交付的SQL Server 2005禁用了镜像功能,这项特性未得到支持。

镜像功能在测试过程中表现稳定,遇到故障时,能够顺利地替换容量为100GB的数据库。不过,对镜像进行监控的功能仍非常原始,它只包括少量的DMV和性能计数器,所以要查明多少数据已被复制、辅助系统与主系统相差多少或者复制成本多少不是特别容易。很难了解这个过程会不会让一些人感到不满。

至于灾难恢复,SQL Server 2005大幅减少了恢复备份所需要的时间。一旦有对象,新的联机恢复功能让用户可以开始在数据库里面工作。有了SQL Server 2000,必须在提供给用户之前恢复整个数据库。考虑到完全恢复数TB容量的数据库所用时间,有没有联机恢复功能,可能意味着是正常开展工作,还是停顿数小时。

同样,用户现在可以解决受损的数据库,而且对用户影响比较小。页级恢复功能(Page-level restore)让用户可以恢复受损的一个页,而不会影响数据库其余部分的可用性。

开发一瞥

新的工具和构件为开发人员提供了更强大的功能,又没有太多难题。

优点:CLR集成让开发人员可以利用.Net语言用于存储过程和SSIS软件包; 新的T-SQL构件和改进之处增强了功能,同时简化了代码编写; 本地XML存储功能让开发人员能够结合XML文档和关系数据。

缺点:Management Studio缺乏重要的代码编辑功能,如智能感知功能;界面反应不够迅即使得Management Studio作为运行许多复杂查询的工具而言缺乏效率;有些DMV需要比不推荐的DMV更长、更复杂的查询。

为新时代而开发

代码方面的改进可以分为两个基本类别:一类面向开发人员,另一类面向数据库管理员。除了.Net/CLR集成功能外,通用表达式(CTE)对开发人员来说大概最重要。除了可轻松自如地解决递归查询问题外,CTE还可以让开发人员使用联机查询定义来取代视图或者导出表(derived table),从而简化代码。

CTE不但简化了复杂查询,还可以执行与导出表同样的操作,所以实施起来不需要任何额外开销。

另一个重要改进就是TOP子句。TOP子句原本可以让用户定义:只返回一定数量的结果集(譬如按收入排名的美国前十名销售人员),现在它可以把某个参数作为一个变量。虽然这听上去没什么大不了,却是属于较小变化能给开发工作带来巨大变化的情况之一。简而言之,用户现在可以加入变量,让用户迅速报告TOP 10或者TOP 100(或者其他任意数),用不着把静态值(譬如TOP 10)加入到代码里面。

便于开发的其他方面包括:排序、随机数据抽样、行列转换(pivot/unpivot)、同义词、大大改进的错误处理机制以及代码安全上下文。许多开发人员还会对SQL Server 2005的原始XML存储功能大唱赞歌。说到关系数据库的XML处理功能,SQL Server 2000的功能限于把XML“分割”成关系数据,这个笨拙的过程无法保留XML的层次结构。现在,可以把XML导入到列当中,不但可以执行原始XML查询,还可以为它建立索引,以便快速检索。

数据库管理员同样可以享受到代码方面的变革带来的好处。许多编码方面的变化为管理员从命令行提供了通过Management Studio无法得到的管理功能。特别是数据定义语言(DDL)不但会改变数据库管理员处理工作的方式,还会帮助他们的CEO在晚上睡得安稳许多。一旦数据库模式出现了变化,DDL就会引发警报,而且几乎可以根据服务器或者数据库里面的任何对象类型来加以定义,从而有助于避免出现不需要的更改。

在任何繁忙的生产环境,建立索引总是一个重要问题。数据库管理员需要维护数据库;生产经理们不希望生产业务被中断。联机索引功能让数据库管理员无须使数据库处于离线状态,就可以创建或者重建索引。索引与表并行创建,然后一旦创建完毕,就可以加以应用。当然,用户一定要留意资源,不过这项特性将为必须要求24×7生产的公司大大提高可用性。数据库管理员现在还可以控制索引操作使用的锁定级别。

不是以往的OLAP

SQL Server 2005的商业智能工具套件包括:SQL服务器分析服务(SSAS)、SQL服务器数据挖掘(SSDM)和SQL服务器报表服务(SSRS),它们终于都是为了共同满足商业智能需求而设计的。如今的SSAS性能相当好,这归功于易用性方面的诸多改进。新的商业智能向导(Business Intelligence Wizard)随带了解决一些常见问题的现成解决方案。货币兑换、半累积度量和基于时间的计算只是该向导能处理的几个例子。

SSAS有一个非常重要的结构变化:统一维度模型(UDM)。除非你在使用它,否则很难完全掌握UDM,不过它基本上为客户程序如Excel和许多异构数据源之间架起了一座桥梁。或者用更简单的话来说,它位于用户和这些数据源之间,为用户显示所请求数据的视图。UDM为操作SSAS的方式带来了几个重要变化。其中之一就是,现在可以拥有多个事实表(fact table);实际上,整个关系模式出现在用户面前。有了UDM,就不需要虚拟多维数据集和虚拟维度,不但提供了增强型功能,还提供了大大简化的操作模型。

最让人喜欢的一项新特性就是主动缓存(proactive caching)。这项机制让用户可以设置确定数据何时刷新的度量。设置度量有好几种办法,不过比较好的一种办法就是定义基本数据变化时、就刷新多维数据集。数据在分区级进行刷新,平衡性能和延迟有许多选择。

SQL服务器数据挖掘已经从试验阶段发展成为一种成熟的应用。SQL Server 2000有两种挖掘算法:简单聚类和简单决策树,SQL Server 2005却有十种算法。它还有25种新的视图和可视化查询编辑器。所有这些工具大大简化了开发及使用挖掘模型。这倒不是说微软已完全实现了这个目标:把数据挖掘功能交到非专业人员手里,但远比使用第三方挖掘工具来得方便。

把商业智能软件包结合起来的是SSRS。利用这个新版本,微软摈弃了编写及分发报表的大部分麻烦。报表生成器(Report Builder)也许是最重要的改进,这种新的Web界面让最终用户可以编写及发布自己的报表。管理员发布报表模型(这基本上定义了管理员想要用户能够用来编写报表的数据),用户就可以遵照向导界面,逐步创建自己喜欢的任何报表。从某种意义来说,这些报表比传统的SSRS报表更丰富,因为它们随带已经内置的无限挖掘功能,这是以往设计的报表根本没有的功能。

报表生成器的控件让开发人员可以把报表嵌入到应用里面。除了这项人们需要的功能外,报表生成器还包括支持定制控件的功能,让开发人员(最有可能是第三方开发商)扩展SSRS的功能。

SSRS还包括比较次要的改进,最终用户会觉得有所帮助。其中之一就是多值参数,它让用户可以把多个值(譬如多个销售区域)传递到单一参数里面。这项功能以前有赖于把定界元素传递到单一参数里面,然后对它们进行分析,传送到数据库里面的单个实体。另外一些改进包括:交互式分类,让用户可以改变报表里面列的分类标准;以及日历选择器,让用户可以从弹出式日历选择日期,而不是必须输入日期。

对开发人员来说,SSRS可以直接处理SSAS和SSIS,把它们都作为数据源来使用。这向前迈进了一大步,因为当前的SSRS用户可以采用已经到位的流程,以众多方式生成众多报表。单单SSIS集成功能就让用户能够从多个数据源获取数据,包括从不同的数据库、Web服务、RSS新闻源、SSAS和数据挖掘库等合并而来的数据。正可谓机遇无限。

SQL Server还缺什么?

这个版本还缺少了什么功能?许多开发人员和数据库管理员曾盼望用智能感知功能(IntelliSense)用于T-SQL代码编写。许多人还希望有某种集中代码库。我们仍然有模板,不过这些模板通常驻留在客户端上;数据库管理员和开发人员无法轻松地从集中联机资源当中获取。SSIS比DTS有了大量改进,不过仍不是实际的抽取、转换和加载(ETL)服务器,这意味着它仍使用启动软件包的服务器的资源。这是许多数据库管理员抱怨的原因之一,不过当前的体系结构也具有一些优点。对此,SQL数据库管理员已学会了如何忍受,并找到了变通方法。最后,微软还没有针对Oracle的网格解决方案拿出相应的解决办法。网格方案让用户可以聚合多个数据库服务器用于负载均衡和故障替换,并作为一个群组加以管理。这是Oralce仍可以声称较之SQL Server的最后一个重大优点。

那么谁应当升级?何时进行升级?应当马上考虑升级的公司——假定它们的应用系统已符合使用新版本的标准、迁移不会使支持合同作废——是这样一些公司:需要真正的24×7可用性、高度依赖数据转换服务(DTS),或者需要遵从《萨班斯-奥克斯利法案》的审查要求。

如果你根本无法忍受由于维护或者其他任何原因而出现停机,就应当立即进行这种升级。SQL Server 2005在复制方面的改进、联机重建索引、局部恢复以及很快推出的数据库镜像会减轻一些压力。

如果你目前在使用的DTS到了极限,改用SSIS会最终简化业务,不过可能不会像你喜欢的那样简单。所以,合理规划必不可少。最佳办法就是,部署一台专用的SSIS服务器,然后一次升级一个软件包。这种方法让你有机会在空闲时升级及测试。

如果你担心的是法规遵从,那么新的安全特性和DDL触发器会非常迅速地让数据库符合规范。不过,实施密码策略可能会给你的环境带来一些不便,所以你必须进行相应规划。

对于没有这些迫切问题的公司来说,SQL Server 2005也有其他许多理由让你考虑使用它。从管理到开发,你只要挑出各个环节面临的问题,SQL Server 2005就很可能有助于缓解问题。

SQL Server 2005是一款出色的版本,它会让微软在高端数据库市场获得一些真正的尊重。如今,SQL Server的工具在管理、监控尤其是在开发等各个方面几乎都领先于Oracle和DB2——而在这三家开发商当中,微软似乎对改进这些方面最为关注。也许另外两家厂商应当开始修炼内功了。

图3 分析服务拥有更整洁的界面,可以加快开发报表及商业智能应用。它现在利用Visual Studio进行开发。

商业智能一瞥

分析服务、数据挖掘和报表服务终于被设计成可以协同工作。

优点:新的统一维度模型使得分析服务成为连接众多异构数据源的桥梁; 数据挖掘功能日渐成熟,拥有更丰富的一系列挖掘算法和视图;报表服务现在让最终用户可以创建自己的报表、让开发人员可以把报表嵌入到应用里面;复杂的多维数据集执行起来良好、可靠。

缺点:Management Studio支持编写商业智能代码,但不支持报表;新界面带来了有点难度的学习曲线,特别是对高级特性而言。

(责任编辑:铭铭)