2.1 规划处理器子系统
处理器(Processor)是计算机的运算核心和控制核心。常用的个人计算机和服务器使用的中央处理器(Central Processing Unit,简称CPU)是一种微处理器。
2.1.1 X86 与 X64 处理器架构
计算机在最底层执行的是机器指令,根据指令集的不同可以将处理器划分为不同的架构平台。可以运行 SQL Server 2014 的处理器架构平台有:X86、X64。
X86 平台兼容 Intel 的 i386 32 位指令集,数值被送进 32 位寄存器进行相加运算。SQL Server 最低支持的 X86 处理器类型是 Intel Pentium III 或者兼容处理器。
X64 平台使用 64 位指令集,最早出现的是 AMD 公司于1999年推出的 AMD64 处理器系列,后来Intel 公司也推出了兼容 AMD64 的 Intel EM64T 处理器系列。由于 AMD64 与 Intel EM64T 基本上一致,很多软硬件产品都使用来中立的词汇来表明对两种平台同时兼容,因此称之为 X64。
与 X86 相比,X64 平台使用了增强的总线结构,可以将更多的数据传递给缓存和处理器,而且对于多处理器(超过64个处理器)的并行处理技术有了提高,因此 X64 的性能相当出色。SQL Server 最低支持的 X64 处理器类型是 AMD Opteron、AMD Athlon 64,以及支持 Intel EM64T 的 Intel Xeon、Intel Pentium IV 等。
从2010年起,微软发布的服务器产品基本上仅支持 X64 平台,例如 Windows Server 2008 R2、Exchange 2010、SharePoint 2010、Lync 2010 等。应当尽可能地安装和使用64位的 SQL Server。
除了上述2款处理器架构平台,还有以下几款处理器架构平台。
◆ Alpha 处理器最早由 DEC 公司设计制造,Compaq 公司收购 DEC 公司后于2001年宣布 Alpha 处理器将逐步转移到 Intel 公司的 Itanium(安腾)架构之上。HP 公司并购 Compaq 后,于2004年发布了最后一款 Alpha 新品。SQL Server 2000 及之前的版本都支持这款处理器。但微软在1999年停止销售支持 Alpha 处理器的 Windows NT 操作系统,Windows 2000 也在 RC2 版本之后就不再支持这款处理器。
◆ IA64 的处理器类型是指安腾处理器。它是 Intel 公司与 HP 公司联合研制的一款处理器,与 X64 不兼容。Windows 2000 高级服务器限量版(Advanced Server Limited Edition)开始支持这款处理器。由于 Itanium 的市场占有率不佳,微软在2012年发布的新产品(Windows Server 2012、SQL Server 2012 和 Visual Studio 2012)均不再支持 Itanium 处理器。
◆ ARM(Advanced RISC Machines)处理器主要用于可携带设备,它具有低成本、高性能、低功耗的特点,可以在平板电脑上运行 Windows 8 RT 版及后续产品的操作系统。但 SQL Server 目前不支持 ARM 处理器。
处理器的主频,即处理器内核工作时的时钟频率,它是处理器性能的一个重要指标。在安装 SQL Server 时,安装程序会检查计算机的处理器类型以及频率。下表列出了各版本的 SQL Server 所要求的最低频率。
版本 | X86处理器 | X64处理器 | IA64处理器 |
SQL Server 2005 | 600 MHz | 1.0 GHz | 1.0 GHz |
SQL Server 2008 | 1.0 GHz | 1.4 GHz | 1.0 GHz |
SQL Server 2008 R2 | 1.0 GHz | 1.4 GHz | 1.0 GHz |
SQL Server 2012 | 1.0 GHz | 1.4 GHz | 不支持 |
SQL Server 2014 | 1.0 GHz | 1.4 GHz | 不支持 |
提示:
在X64操作系统有一个 WOW64(Windows-on-Windows 64位)子系统。它在64位操作系统上为现有的32位应用程序提供一个32位的仿真器,这个模拟环境可以使大多数的32位应用程序无需修改就运行在64位操作系统上。
WOW64 仅仅是为了满足兼容性要求而提供的,32位应用程序在 WOW64 中运行时可能会遇到性能问题。
2.1.2 NUMA
当单个处理器的频率达到其极限时,一种流行的提高性能的方法就是添加更多的处理器,其中一种系统架构是 SMP(Symmetric Multi-Processing,对称多处理)架构。在这种架构中,所有的处理器都是相同的,它们平等地访问一个集中的内存,并且共享内存总线和 I/O 总线。
当多个处理器同时请求访问同一个资源(例如同一段内存地址)时,需要有相应的机制去解决资源竞争的问题。因此,当处理器数量很多时,或者执行的多个并行任务之间有复杂的逻辑关联时,单纯增加处理器的数量并不能带来明显的性能提升。
SMP 架构的主要特征是共享系统中的资源(内存、I/O等),由于每一个共享环节都可能成为瓶颈(尤其是内存),导致了它的扩展能力非常有限。一般 SMP 架构使用2至4个 CPU,最多8个 CPU。
另一种多处理器架构为 MPP(Massive Parallel Processing,大规模并行处理)。在这种架构中,资源(处理器、内存、I/O等)被分为多个 SMP 节点,节点中的处理器只能访问同一个节点中的资源,在访问其它节点的资源时需要通过节点外部的节点互联网络进行连接。MPP 的主要特征是节点之间不共享资源,往往可以实现数百个节点、上千个处理器并行处理。
由于 MPP 架构需要在不同的节点中传递数据,因此当 OLTP 的事务规模较小时,MPP 的效率会比 SMP 差一些。但是,MPP 架构不存在内存总线的竞争,当大型程序的处理要求大于共享总线时,或者操作之间的关联很少,MPP 架构就显现出优势。
SQL Server PDW 版本就采用了 MPP 架构,每个计算节点都有属于自己的存储节点。PDW 可以满足加载企业级数据仓库的性能需求,而且方便用户通过增加节点实现线性扩展。
在 OLTP 处理过程中,SMP 架构的主要瓶颈通常在于内存。NUMA(Non-Uniform Memory Access,非一致性内存访问)架构在内存访问方面结合了 SMP 和 MPP 的优点,所有节点中的处理器即可以访问本地节点的内存,也可以访问远程节点的内存(即处理器可以访问整个系统的内存)。由于访问本地内存速度要比访问远程节点的内存要快,所以称为“非一致”内存访问 。
NUMA 在理论上可以无限扩展,使处理器子系统具有较高的 OLTP 处理能力。SQL Server 2000 SP4 就已经提供了对 NUMA 的支持。
2.1.3 超线程
SQL Server 使用操作系统的线程来执行并发任务,线程管理由操作系统内核控制。当一个线程完成退出CPU,其他线程调度占用该CPU时,将发生一个上下文切换(Context Switch),这个切换需要付出一定的代价,应当尽量避免这种切换。
超线程(Hyper-Threading)是英特尔2002 年发布的一种技术。采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分,单个 CPU 就像两颗 CPU 一样在同一时间执行两个线程。
虽然采用超线程技术能同时执行两个线程,但它的性能并不等于两颗 CPU 的性能,理论上超线程可以换来 15%~30% 的效能提升。实际上,对于某些程序或对于单线程的程序而言,超线程反而会降低效能。除此之外,超线程技术还需要操作系统的配合,Windows XP 和 Windows 2003 及后续版本支持超线程技术。
对于 SQL Server 系统而言,SQL Server 自身已经具备一套极其有效的调度管理机制来处理自己的操作系统队列和线程,因此,仅建议在物理 CPU 负载很高的情况下才使用超线程,并且事先必须在超线程启动和关闭这两种情况下测试 SQL Server 的性能。如果每个物理处理器的 Context Switches/sec 计数器的值高于 5000,则表示超线程对性能的影响已经非常严重。
提示:
超线程与双核处理器是不同的概念。双核处理器的概念就是将两颗处理器的芯片,通过全新的封装技术,整合成为一颗处理器,在这一颗处理器中拥有两颗核心,真正地实现了多处理器协同工作。双核处理器的核心内的资源都是独立的,而且也可以交换使用资源,核心与核心之间沟通的延迟远比多个单核心处理器同时运行好。
2.1.4 规划处理器的数量
处理器分为物理处理器和逻辑处理器。逻辑处理器的数值是物理处理器(插槽)数量与核数的乘积,例如,4个物理处理器,每个处理器10核,那么逻辑处理器就是40个。如果启用了超线程,逻辑处理器的数量将翻倍,即80个逻辑处理器。
计算机上安装的逻辑处理器不一定都能被 SQL Server 检测到并被使用,因为受到以下限制:
◆ 操作系统的不同版本限制了物理处理器的插槽数量。例如,Windows Server 2008 标准版限制为4个插槽,企业版限制为8个插槽,数据中心版最大支持64个插槽。Windows Server 2012 标准版和数据中心版都限制为4个插槽。
◆ 操作系统同时也限制了逻辑处理器的数量。例如,Windows Server 2008 只接受64个逻辑处理器,直到 Windows 7 和 Windows Server 2008 R2 才允许超过64个逻辑处理器。Windows Server 2012 最大支持640逻辑处理器(如果启用Hyper-V,则最大支持320个逻辑处理器)。
◆ SQL Server 产品检测到逻辑处理器的数量有限制。例如,SQL Server 2008 能最多同时检测到64个逻辑处理器。SQL Server 2008 R2 能最多同时检测到256个逻辑处理器。
◆ 从 SQL Server 2012 开始按“每核”模式授权,不同的版本有一些技术限制。例如,标准版限制为4个插槽或16核,取二者中的较小值。
除了上述限制以外,如果是按照“每处理器”或者“每核”模式购买许可,在部署SQL Server时可能需要手动限制逻辑处理器的数量。
处理器的内核数也会影响到 SQL Server 安装程序。例如,SQL Server 2005 安装程序在遇到以下任何一种情形时会报错而退出:
◆ 逻辑处理器和物理插槽的比率不是 2 的幂。例如,计算机有单个的3核处理器和插槽。
◆ 物理的内核数不是 2 的幂。
◆ 总的 CPU 数为奇数。例如,有9个 CPU。
2.1.5 规划处理器的负荷
使用性能监视器监视“%Processor Time”计数器可以获悉处理器的负荷,通过这个计数器可以判定逻辑处理器的使用情况。一般认为平均负荷不宜超过30%,最高不能超过50%。
此外,还要检查该计数器的峰值水平。一般认为在10到15分钟内,CPU的使用率不应持续超过70%。如果超过80%,则意味着需要升级处理器,或者需要添加更多的处理器。
电源计划可以达到节能的目的,但也会影响处理器的性能。建议根据工作负荷的具体情况设置合理的电源计划。
本文出自 “SQL Server 管理员指南” 博客,谢绝转载!