要建设稳定运行的虚拟化SQL Server系统,关键是确保虚拟化管理软件配置能提供数据库所需的资源。SQL Server是CPU密集型技术,因此支撑它的虚拟机需要能获得充足的处理器资源,同时不能引起与其它虚拟机的资源争用。 SQL Server虚拟化往往比较复杂,因为有很多因素要考虑,包括控制CPU分配和资源利用率,还要配置SQL Server虚拟机的内容来保障可扩展性,避免运行处理任务时内存不足带来问题。微软公司的Hyper-V虚拟化软件提供了帮助满足这些工作需求的工具,至少可以满足组织在使用该技术时需要的配置工作。 首先,Hyper-V包含许多不同的设置项,可以用来控制每个虚拟机CPU资源分配,如图1所示: 在Hyper-V中设置控制虚拟机资源分配 图1:在Hyper-V中设置控制虚拟机资源分配 默认情况下,Hyper-V管理器只给虚拟机分配一个处理器,所以要给SQL Server虚拟机提供合适数量的CPU,要考虑该服务器未来规划负载以及SQL Server授权情况。还有,为了确保虚拟SQL Server获得足够的CPU资源,你可以使用“虚拟机保护”设置选项,选择保护特定虚拟机可用资源的百分比。 有多种方法可以避免虚拟SQL Server产生CPU资源竞争。例如,你可以调整“虚拟机限制”和“相对权重”设置(在资源控制面板中),控制SQL Server虚拟机的CPU资源消耗情况。另一种方案是对相邻虚拟机应用保护,避免其它虚拟机过度消耗资源。不过,这种方案也有点麻烦,因为虚拟机可能会被迁移到其它主机。 此外,Windows Server 2016引入了托管资源保护机制,如果虚拟机占用太多现有硬件资源,该机制会强制停止。它能对CPU消耗进行主机级别的监控,如果虚拟机开始消耗过多CPU资源,该功能会自动调节处理器资源。 想要使用虚拟化SQL Server的IT团队还应该关注虚拟机的内存配置,图2中Hyper-V提供了内存配置选项。 在Hyper-V中设置控制虚拟机资源分配 图2:Hyper-V针对虚拟机的内存配置选项 微软的hypervisor提供了两种方式使用内容:动态内存分配和静态配置。动态内存是Hyper-V的特色,专为提升系统物理内存使用效率而设计,它把内存设计为共享资源,可以在不同的虚拟机之间按需进行再分配。然而,该功能对SQL Server来说很危险,因为SQL Server虚拟机通常会尝试使用尽可能多的内存。因此,最好对虚拟SQL Server静态分配内存。 在使用非统一内存访问架构(NUMA)系统的时候,对SQL Server的设置有点特殊。NUMA设计是为了实现更好的可扩展性,它把不同组的处理器和系统内存片段整合到一起(一般称为NUMA节点)。 在Hyper-V中设置控制虚拟机资源分配 图3:Hyper-V对基于NUMA系统的配置选项 处理器可以访问分配给所有NUMA节点的内存,但是与CPU同一节点下的本地内存肯定比访问不同节点的远程内存更快一些。因此,SQL Server虚拟机的NUMA节点和套接字虚拟拓扑应该与物理硬件拓扑有对应关系。 如图3所示,Hyper-V的NUMA设置在Hyper-V管理器Processor处理器菜单下的子菜单中。你可以使用它们调整拓扑或者手工设置虚拟NUMA节点的处理器数量、内存数量,设置服务器单个套接字支持的节点数量。 在Hyper-V虚拟机中运行SQL Server的另一项最佳实践是使用微软公司的第二代虚拟机,它的启动速度很快,整体功能表现也比第一代产品更好。不过,因为SQL Server的性能与存储I/O关系很大,因此最重要的是确保虚拟硬盘的底层存储提供的IOPS要满足数据库需求。 另一种考虑因素是两种高可用形式之间可能存在冲突。在与Windows Failover集群结合时,Hyper-V虚拟机可以在虚拟机级别实现更好的可用性。但是,SQL Server还支持独立于虚拟机管理程序的高可用性。如果你选择使用SQL Server的高可用功能(它会设置所谓的访客集群),需要设置反关联规则组织不同的SQL Server虚拟机。这些虚拟机是单个访客集群的组成部分,都来自于通用物理主机。否则,主机级别的故障会破坏访客集群的可靠性。 在虚拟机上运行SQL Server可以说是在数据库资源需求和系统其它部分资源需求之间“走钢丝”。实施本文描述的最佳实践可以帮助你保持虚拟SQL Server系统平稳运行。 TechTarget中国原创内容,原文链接: © TechTarget中国:http://www.techtarget.com.cn