我正在开发运行 SQL Server Express(作为 Sage Line 50 Manufacturing 的一部分)的虚拟机。详细信息如下:
物理服务器(主机)
- Intel Xeon 四核 2.1GHz
- 4GB RAM
- VMDK 映像存储在 RAID-5 500GB SATA 驱动器(7200RPM)上
- 运行 Ubuntu 10.04 Server 64 位
- VMware Server 2
虚拟机
- Windows Small Business Server 2003
- 分配 2 个 vCPU 和 2GB RAM
- 使用 100GB 预分配的平面 VMDK 文件
我遇到的问题是,SQL Server 中运行的进程占用大量 CPU。在我们迁移到虚拟机的旧物理服务器上,这将利用两个 CPU 内核,因此 sqlserver.exe 进程将在每个 CPU 内核上 100% 运行。在虚拟机上,它似乎只使用两个 CPU 内核中的一个,这意味着进程运行速度要慢得多。
问题
有没有办法力量SQL Server(sqlserver.exe 进程)是否使用两个 CPU 核心,并在它们之间分配负载?这是需要更改的 VMware 设置,以允许进程使用两个核心吗?
答案1
我对虚拟机上的 MS SQL Express 数据库没有太多经验,但我认为您只是遇到了 MS SQL Express Edition 的硬件限制。
我假设您的物理服务器有 1 个 2 核 CPU。MS SQL Express 2008(我认为 2005 也一样)仅支持一个物理 CPU 但支持多个核。
VM 将每个 vCPU 识别为单个 CPU,而不是额外的核心。因此 sqlserver.exe 进程限制为 1 个 vCPU。
答案2
在 vSphere 中(这可能不适用于 VMware 服务器,但对于偶然发现此答案的人可能有用),您可以更改为 VM 显示的“每个插槽的核心数”,以准确反映多核(或超线程)CPU。