我在基于 Hyper-V 的虚拟机上运行 SQL Server 2008 Express,该虚拟机有两个 vCPU。我刚刚阅读了 SQL Server 2012 Express 的相关内容,发现它的 CPU “限制为 1 个插槽或 4 个内核中的较小者”(http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx)
我的问题是 SQL Server 2012 对 CPU/核心的限制如何转换为 vCPU?它们是“处理器”还是“核心”?
编辑:
我刚刚发现了这个:vCPU 是否与 1 个 Socket 或单个 Core 相同?
基本上,解决方案是下载 CPU-Z 并进行检查,我就是这么做的。在我的 2 x vCPU VPS 上,CPUZ 显示 1 核 2 线程,因此听起来我的 SQL Express 应该可以在两个 vCPU 上运行。但是,当我进入处理器亲和性配置时,它显示有 2 个处理器,这似乎只是使用了分配给我的 VPS 的其中一个 vCPU。我完全糊涂了 :/
答案1
每个 vCPU 在客户操作系统中都算作一个 CPU,这意味着客户操作系统及其内部的应用程序每个物理核心都是一个 CPU。
虚拟化抽象了物理硬件,因此所有客户操作系统及其内部的应用程序都可以看到虚拟机管理程序传递给它们的值。就您而言,虚拟机管理程序会告诉操作系统您有两个 CPU,因为这就是您的设置方式 - 拥有两个虚拟 CPU。因此,当 SQL 查看您有多少个 CPU 时,SQL 会看到您分配的两个 [虚拟] CPU,因此 SQL Express 会限制自己使用一个。
我想我应该补充一点: 快速了解如何在 Hyper-V 中配置 vCPU。如果您希望 SQL Express 使用更多 CPU 资源,请放入一个 vCPU 并将其映射到更多物理处理器和/或更高的资源限制。这将允许 SQL Express 使用主机可以分配给它的尽可能多的 CPU 资源,而不会遇到 SQL Express 的 CPU 许可限制。
哦,但不要在您现有的操作系统上这样做,因为在 Windows 操作系统中更改单个和多个 CPU 之间的处理器数量会导致麻烦 - 这会使操作系统不稳定。创建一个新的 VM,安装新的操作系统,这次只需创建一个 vCPU,您可以将其映射到更多物理资源。
答案2
Server 2008 和 Server 2008 R2 中的 Hyper-V 为虚拟机投射了一个虚拟拓扑,看起来像是一个具有多个核心的 CPU。如果您想亲自查看,请从 Sysinternals 下载 Coreinfo。(目前http://technet.microsoft.com/en-us/sysinternals/cc835722)
Server 2012 中的 Hyper-V 可以投射多种不同类型的虚拟拓扑,这对于配置具有大量虚拟处理器的工作负载非常有用。它将默认投射与物理拓扑相匹配的拓扑,但您可以覆盖它。
请注意,更改投射到虚拟机中的拓扑会导致客户操作系统和应用程序堆栈做出不同的配置决策,从而改变其中工作负载的性能。不过,仅仅更改客户拓扑并不能让您满足许可要求。