VM上的单核SQL Server


7

最近,我们的学区已将多台服务器从2005版升级到2016年,并且从物理服务器升级到了VM服务器。

我们的基础架构团队为单核提供了用于SQL Server安装的VM服务器。

我试图向该部门负责人解释说,SQL Server“讨厌”在单个内核上,他想看到“证明”。我提供的数据都没有满足他的证明要求,因此他要求提供一些文章,说明为什么VM SQL Server无法在单个内核上有效运行。

您为此使用什么文章?

任何对我的帮助对我来说都将不胜感激!


7
在VM上许可SQL时,无论如何都要支付两包许可。即使您不享受教育折扣,您也不会放弃至少两个核心来浪费金钱。
— 埃里克·达令

4
您可以参考Glenn Barry在2015年发表的文章(拥有10年以上的Microsoft MVP),其中列出了建议用于SQL 2014的CPU,其中最小的CPU具有六个内核。
— LowlyDBA '18年

2
另外,不久前,我为Google撰写了一份白皮书,内容涉及在云中确定VM的大小。您也可以将其应用于本地。
— 埃里克·达令

在@sp_BlitzErik注释的基础上扩展,可以应用于单个SQL Server(无论是VM还是物理)的最低核心许可证为4个许可证(请参阅《许可指南》)。另一种方法是许可主机的物理核心。在该模型下,您可以选择运行任意数量的具有vCore的虚拟机。
— Mark Storey-Smith,

Answers:


11

任何消耗CPU的非SQL Server进程都可能导致整个SQL Server完全无法使用。

例如,Windows Update将在解压缩.Net程序集时使SQL Server停止。

任何反病毒过程,即使配置为排除SQL Server数据文件和文件夹,也可能导致SQL Server在扫描文件和解包更新的病毒定义文件时变得无响应。

如果您安装了任何管理软件(例如IBM Tivoli Server Monitor),并且它决定使用100%的一个内核,则除了冷关闭计算机外,您将无能为力。不要问我为什么要提这个。

我可以继续,但是可以说,任何具有单核的服务器都只是在询问性能和可管理性方面的麻烦。检查是否有单核计算机今天应该被认为不可用。哎呀,我的手机有8个核心。

在进行此操作时,请说服虚拟化人员为每个SQL Server提供合理的内存保留,以确保SQL Server的内存不会从主机主内存中调出到磁盘。

对于由VMware托管的严肃的SQL Server,应根据《 VMware最佳实践》上的《架构SQL Server》指南配置VMware 。

真正归结为单核VM在任何给定时间只能运行一个线程。虚拟化并不是解决这种情况的灵丹妙药。

以上几点考虑到Windows NT(1993年的代码库,所有现代版本的Windows均基于此代码库)利用抢占式多任务处理。抢占式多任务处理允许操作系统通过强制定期进行上下文切换来强制执行多任务处理。即使具有抢先式多任务处理能力,如果单个任务决定使用尽可能多的CPU,具有单个内核的服务器仍将遭受非常差的性能,因为O / S将为该任务提供尽可能多的CPU时间同时仍允许运行更高优先级的任务,从而将CPU强制为100%。如果在CPU达到100%时运行SQL Server,则SQL Server的CPU数量将大大减少,从而变得非常引人注目。在上述情况我概括,我也没有例如,机器(甚至SQL Server)将完全“停止”或“死亡”;那简直是不真实的。然而,机器可能会变得如此忙碌,对于所有意图,和目的的机器变得不可用。添加第二个内核(虽然肯定不是万能药)可以减少计算机完全无响应的可能性。每个附加内核意味着另一个线程可以运行到100%CPU,而不会导致计算机无法使用。


Windows Server是否没有(并且总是有)抢先式多任务处理?除非我误会您所描述的是协作式多任务处理,否则流程在完成高级任务时就会互相屈服。当然,争用可能会延迟响应,但不应完全停止竞争。我同意,即使不是最佳实践,mutli-core也是个好主意,但您提出的世界末日场景似乎并不正确。
— 弗雷曼(MâttFrëëman)

如果您以前是物理单核,并且与您的单核实例进行通信的应用违反了最佳实践(例如未指定排序顺序),并且考虑到排序顺序在没有这种顺序的情况下是隐式稳定的,那么有时仍然有理由保留单核然后切换到多核可以显示以前由于单核的特性而被抑制的错误。如果你没有足够的预算重新QA这些应用程序或者开发者没有信仰或者他们已经走了,匹配现有的物理服务器暴露有时是一个安全的赌注核心条款
— 马特·弗里曼

嗨,@MâttFrëëman,您好-我在答卷中添加了有关抢先式多任务处理的部分。您让我想起了NT代码库与原始Windows代码库(包括Windows ME)所使用的基于DOS的协作多任务处理相比要好得多。
— 马克斯·弗农

我同意您的大部分评论,即保留单核有时是必不可少的。我的答案基于OP希望拥有多核VM的假设,假设已虚拟化的物理机可能是多核服务器。
— 马克斯·弗农

@MaxVernon谢谢,这正是我们所需要的!
— 德布

6

我以前不得不证明同样的事情。最终传达给我们的容量规划团队的是,我们的数据库在备份期间几乎无法使用。

作为一名DBA,您最大的担心应该是数据丢失。如果您不能自信地运行备份而又不会造成停机,那么这将是一个大问题。运行一些测试以确保在进行备份时性能会受到影响,然后解释说,在多个核心的情况下,此问题应消除。


3
事实上,任何的I / O是否SQL Server或严重金额非SQL-Server相关的可能会引起问题。
— 马克斯·弗农

3
@MaxVernon绝对-我只是专门提出了备份,因为这是我以前处理过的一个问题(凌晨3点,natch),很容易证明,并且“我们必须在不中断的情况下进行备份!” 应该足以刺激任何合理的基础架构管理者节省一个微不足道的核心。
— Neghtasro '18年

2

为了提供令人信服的证据证明您的服务器需要多个CPU,您将需要提供有关工作负载和服务器上正在运行的查询的信息。例如,如果它只有一个小于100 MB的数据库,并且所有查询都非常简单和高效,那么拥有更多的内核可能几乎没有好处。

我建议您开始捕获并行的查询计划及其完成所花费的时间。这将证明在系统上运行的工作负载将受益于拥有多个CPU。

如果它已经在VM环境中投入生产,则还需要捕获CPU使用率性能数据。如果您可以证明CPU长时间处于100%的可用状态,则这也有充分的证据表明系统需要更多的CPU。


5
当然,单核VM上不会有任何并行计划。您需要在具有多个核心的盒子上捕获这些计划。
— 马克斯·弗农

3
要增加Max的评论,如果您在具有单核的服务器上查看计划XML,您将看到NonParallelPlanReason="EstimatedDOPIsOne"。
— 埃里克·达令

@Tony我已经已经为他们提供了一些数据,但被告知,一个单一的核心是与VM机的最佳做法。因此,我需要帮助!
— 德布

1
@Deb噢,天哪!从来没有听说过这种最佳做法!从这里一直都能听到布伦特·奥扎尔(Brent Ozar)悲伤的长号。我会担心有人这样负责VM基础架构的声明。
— 托尼·欣克尔

@TonyHinkle-我同意。单核VM绝不是一个好主意,而让孤岛成为“最佳实践”。好的,也许有99.999%的时间而不是“从不”:-/
— Max Vernon

2

也许您应该问他们为什么他们坚持认为,每个SQL Server VM仅分配一个核心是一个好主意。

然后,根据他们的回答,您可以根据此链接中的3.3.2尝试说服他们:

vmware上的SqlServer最佳实践

VMware建议在初始调整时,分配给所有VM的vCPU总数不超过物理核心的总数。

如果这不是基础架构团队为每个VM只配置1个内核的原因,那么可以说是在浪费硬件。


不确定报价如何帮助更多的 CPU?
— LowlyDBA '18年

是的,但是不清楚为什么基础架构团队没有为每个VM分配更多的cpus。
— 罗杰尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.