SQL Server扩展:纵向 or 横向?

日期: 2013-09-05 作者:Basit Farooq翻译:冯昀辉 来源:TechTarget中国 英文

扩展性是系统通过增加额外的资源,无需从根本上改变系统设计上架构就能支持更多负载工作量的能力。我们应当区分扩展性和可靠性,因为可靠性是系统无故障体验或者同时无停机管理工作的能力。那么,接下来我们将一起看看通过硬件基础架构增加SQL Server扩展性的可选方案。 SQL Server扩展可选方案 为了改善我们SQL Server基础设施扩展能力,我们基本上有两种可选方案:纵向扩展(scale up)和横向扩展(scale out)。

纵向扩展的做法是给现有服务器添加新资源,比如处理器和内存。也就是说,我们可以通过增加额外的处理器和内存获得性能提升。但是,每单位成本获得的性能将明显递减,因为高端硬……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

扩展性是系统通过增加额外的资源,无需从根本上改变系统设计上架构就能支持更多负载工作量的能力。我们应当区分扩展性和可靠性,因为可靠性是系统无故障体验或者同时无停机管理工作的能力。那么,接下来我们将一起看看通过硬件基础架构增加SQL Server扩展性的可选方案。

SQL Server扩展可选方案

为了改善我们SQL Server基础设施扩展能力,我们基本上有两种可选方案:纵向扩展(scale up)和横向扩展(scale out)。

纵向扩展的做法是给现有服务器添加新资源,比如处理器和内存。也就是说,我们可以通过增加额外的处理器和内存获得性能提升。但是,每单位成本获得的性能将明显递减,因为高端硬件可能会更昂贵。

横向扩展是给现有基础架构中增加新服务器,这样的方式也增加了系统资源,因为数据可以跨这些新服务器做分区或复制。新服务器与原服务器共同协作,分担该系统特定部分的处理。例如,我们可以对现有双节点的双活模式(active-active)SQL Server集群增加另外两台SQL Server节点,实现横向扩展获得性能提升。这些新的SQL Server服务器将使我们集群环境性能翻倍,因为负载现在被分布到四个节点上了,而不是原来的两个节点。

选择纵向扩展还是横向扩展

在为新建数据中心考虑企业架构时,我们必须对每个场景考虑选择纵向扩展还是横向扩展。例如,考虑你选择双活模式SQL Server集群的场景,有两个节点,每个节点有两个处理器。这种SQL Server集群生产环境在最近几个月出现了性能问题,问题的出现与最近业务增长有关。经过调研,你决定扩展该SQL Server集群环境。在这种情况下,我们必须决定要采用现有四个处理器的集群环境并给每个节点增加两个处理器达到分别四个共八个处理器(纵向扩展),或者再增加两个各有两个处理器的节点(横向扩展)。

选择纵向扩展还是横向扩展需要考虑以下几个因素:

  • 横向扩展比纵向扩展需要更少的停机时间。如果你选择横向扩展,你只需要给现有SQL Server基础架构中增加新的服务器,而如果你选择纵向扩展,你要通过给现有SQL Server服务器添加硬件资源(比如:CPU、内存和磁盘)来改善你的基础架构,这当然需要一定的停机时间。
  • 横向扩展可以提供更好的可用性,因为一旦某一台服务器出故障,整个系统仍然可以继续运行。
  • 横向扩展可以给你的系统增加更多内存,而无需64位架构。
  • 横向扩展架构可能会很昂贵,因为它需要给更多的服务器供电和制冷,增加了数据中心的运营成本。这种方式还增加了软件授权的成本,需要给多增加的服务器上的软件购买授权。此外,所有这些额外的服务器必须由数据库管理员、网络管理员和存储管理员共同纳入管理,增加了一定的劳动力成本。

SQL Server扩展性思考

在选择哪种扩展方案之前,要确保你已经通过应用和数据库优化从现有SQL Server基础架构中获得了最佳性能。你可以通过调优解决大部分性能和扩展性问题。例如,如果系统瓶颈在处理器和内存水平上,这可能是由于应用或者数据库设计不良引起的。在这种情况下,对SQL Server基础设施做扩展不是最佳解决方案。

作出决定之前,以下几点你需要过一遍:

  • 在纵向扩展或横向扩展之前先对应用和数据库代码进行优化。我经常遇到运行不佳的系统,其中应用程序和数据库代码没有解锁资源,比如对不再需要使用的表继续占用。低效的锁可能导致严重的性能问题。
  • 要优化应用程序和数据库设计。如果应用程序数据库使用了低效的索引或者数据库设计不良,SQL Server通常会遇到处理器、内存和磁盘IO瓶颈。
  • 数据库中归档历史和报表数据。要考虑对大数据库表做分区,这样可以提供更好的性能。
  • 定期检查应用程序和数据库代码,要尽量尽早识别SQL Server扩展性问题,而不是更迟,这样你可以修改应用和数据库设计,缓解性能和扩展性问题。
  • 在独立分开的磁盘上创建数据库和日志文件,确保它们不会竞争磁盘空间和磁盘访问。你可以把文件放到连接不同磁盘控制器的磁盘子系统上来进一步减少磁盘IO瓶颈的可能性。此外,把临时数据库放到独立于用户数据库的磁盘驱动器上可以改进磁盘IO性能。

作者

Basit Farooq
Basit Farooq

资深数据库管理员、培训师和技术撰稿人,具有十多年微软SQL Server平台的开发、技术培训和数据库管理的经验。

相关推荐

  • 了解Azure SQL数据库扩展性

    SQL Database支持两种扩展方式,但是横向扩容一般更具有挑战性。在本文中,我们将简单介绍Azure SQL Database实现纵向扩展和横向扩展的方法。

  • SQL Server数据库横向扩展技巧

    一些应用程序的增长速度会超过一台服务器的处理极限,因此纵向扩展并不能解决问题。这时应该选择横向扩展SQL Server。

  • 进行SQL Server纵向扩展的必备条件

    对数据库进行扩展的时候,我们一般会考虑两种方案,即scale-up(纵向扩展)和scale-out(横向扩展),今天我们先来看一下前者。