最近,我们的学区已将多台服务器从2005版升级到2016年,并且从物理服务器升级到了VM服务器。
我们的基础架构团队为单核提供了用于SQL Server安装的VM服务器。
我试图向该部门负责人解释说,SQL Server“讨厌”在单个内核上,他想看到“证明”。我提供的数据都没有满足他的证明要求,因此他要求提供一些文章,说明为什么VM SQL Server无法在单个内核上有效运行。
您为此使用什么文章?
任何对我的帮助对我来说都将不胜感激!
最近,我们的学区已将多台服务器从2005版升级到2016年,并且从物理服务器升级到了VM服务器。
我们的基础架构团队为单核提供了用于SQL Server安装的VM服务器。
我试图向该部门负责人解释说,SQL Server“讨厌”在单个内核上,他想看到“证明”。我提供的数据都没有满足他的证明要求,因此他要求提供一些文章,说明为什么VM SQL Server无法在单个内核上有效运行。
您为此使用什么文章?
任何对我的帮助对我来说都将不胜感激!
Answers:
任何消耗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,而不会导致计算机无法使用。
我以前不得不证明同样的事情。最终传达给我们的容量规划团队的是,我们的数据库在备份期间几乎无法使用。
作为一名DBA,您最大的担心应该是数据丢失。如果您不能自信地运行备份而又不会造成停机,那么这将是一个大问题。运行一些测试以确保在进行备份时性能会受到影响,然后解释说,在多个核心的情况下,此问题应消除。
为了提供令人信服的证据证明您的服务器需要多个CPU,您将需要提供有关工作负载和服务器上正在运行的查询的信息。例如,如果它只有一个小于100 MB的数据库,并且所有查询都非常简单和高效,那么拥有更多的内核可能几乎没有好处。
我建议您开始捕获并行的查询计划及其完成所花费的时间。这将证明在系统上运行的工作负载将受益于拥有多个CPU。
如果它已经在VM环境中投入生产,则还需要捕获CPU使用率性能数据。如果您可以证明CPU长时间处于100%的可用状态,则这也有充分的证据表明系统需要更多的CPU。
NonParallelPlanReason="EstimatedDOPIsOne"
。
也许您应该问他们为什么他们坚持认为,每个SQL Server VM仅分配一个核心是一个好主意。
然后,根据他们的回答,您可以根据此链接中的3.3.2尝试说服他们:
VMware建议在初始调整时,分配给所有VM的vCPU总数不超过物理核心的总数。
如果这不是基础架构团队为每个VM只配置1个内核的原因,那么可以说是在浪费硬件。