从32位到64位 让SQL Server性能猛增
即使是最漫不经心的观察者,他也会注意到微软的SQL Server世界中存在着两个SQL Server的实现:32位的版本和64位的版本。微软也以这样的方式发布大量其它服务器产品,公司的趋势是将来只提供64位的版本。例如,即将发布的Exchange Server 2007版就只有64位的版本;现在还有32位的版本,但是不被官方正式支持,微软说,32位的版本只会用做测试和开发的目的,不用作产品。
通过SQL Server 2005的发布,微软同时提供了32位和64位的版本,并且大力在那些最可能从中受益的客户中间推动64位版本的采用。那些进行数据挖掘,数据仓库和分析(例如矩阵)都可以充分利用64位的版本。就是说,人们或许还在疑惑SQL Server 64位版本是为谁或者什么准备的,客户如何获得它,要充分利用它还需要什么条件。
32位和64位版本的SQL Server之间的最大的差别,当然就是微软特别在64位Windows服务器上编译并优化了64位版本的SQL Server。因此,它也需要64位的处理器。SQL Server 2005 (和Windows Server 2003)都可以运行在64位的x64(Intel/AMD),以及Itanium (只有Intel)的平台。因此,市场上可以用来运行64位SQL Server的硬件已经存在一段时间,实际上已经在你的企业中了。
64位SQL Server提供的第一个主要优点就是直接处理大量内存的能力。32位的系统最多可以直接处理4GB的地址内存;要使用比32位系统更多的内存的惟一方法就是使用类似地址窗口扩展(Address Windowing Extension)的技术。它可以让你使用从32GB到64GB的RAM,但是消耗性能。实际上,在有限的将来,它不太可能会使用到这么多的内存——只有在缓存数据页的时候才有用,而不是真正进行工作的时候。
另一方面,64位的系统可以直接访问1024GB的物理内存,也就相当于SQL Server可以缓存这么多的数据,直接放在内存中,并且进行现场的操作,整整大了一个数量级别。在32位系统中需要持续很长时间的操作,或者需要在临时表中进行大量工作的任务,都可以在64位系统的内存中完成,速度要快得多,因为这里的分页和阻塞要少得多。
64位的环境还可以支持高达64个处理器。SQL Server最初编写的时候是为了尽可能地在实际的和虚拟的处理器上并行繁重的工作,在现有的32位系统中,执行的效率很高。如果你将现有的SQL Server工作量从32位4路系统中移植到64位16路系统中,这个工作不仅会扩展到多个单个的CPU上,而且还会执行得更加高效。
这里列出一些适合移植到64位系统的情形:
· 任何处理大量直接访问内存的SQL Server应用程序。例如,微软在他们的文档64位SQL Server的优势中列举的SAP的高级计划和优化。
· 运行分析服务。这也是最消耗内存的一项应用,特别是当你的数据库规模有几个GB或者是很多维的数据矩阵处理。
· 合并几个现有的32位数据库应用程序到一个64位的服务器上。因为以前存在的内存方面的阻碍消失了,这些应用程序可以同时运行在同一个机器上,并且仍然会获得以前从未有过的优良性能。
· 拥有大量并发用户的应用程序。每个现有的用户都需要用到一定数量的物理内存,所以可以访问的物理内存越多,可以保持并发的用户的数量也就越大,而且性能表现优秀。
还有一些情况下,移植到64位SQL Server并不是个好主意(至少不是立即):
· 不要只是因为移植而移植。移植到64位SQL Server仍然需要大量的计划和工作。除非你可以从中获得立即的和切实的收益,否则没有必要马上惹上这个麻烦。例如,如果你工作的数据库使用的是SQL Server的桌面引擎,并且你所用到的每样东西都能在1GB,或者甚至是2GB的内存中运行得很好,64位的系统也不会给你带来你没有的好处。另一方面,如果你很快超出了这些限制,那么开始为64位升级做个预算就是个好主意。
· 不要动,除非你准备好将SQL Server 2005综合服务作为你工作的一部分。原有的SQL Server 2000及其以前版本中的数据传输服务(DTS)系统没有在64位环境中继承。DTS被SSIS所替代——后者很明显比前者要更强大和更灵活——但是很多人都仍然在继续使用DTS包。总而言之,如果移植就在眼前,并且你还依赖着DTS包,那么预先作计划吧。熟悉SSIS,可以在移植到64位系统之前,转换或者重写这些包。
64位的平台已经成为服务器计算未来的标准平台。有些时候,还有些没有考虑的因素是应用程序,以及可得到的操作系统支持,和一致工作的因素。好消息就是,在这一点上,任何硬件在未来都会作为包的一部分升级到64位,用户可以在有空时跳跃到64位的操作系统上(还有64位的SQL )——如果他们还没有这样做的话。