我是 AWS 的新手,所以我认为这可能是一个非常简单的问题:
我正在使用 EC2 t1.micro 实例作为我的 SQL DB 服务器,用于进行一些小规模分析(Windows,SQL Express 2008)。一切都很顺利,直到最近我遇到了一个巨大的 SQL 查询,它使微型实例上可怜的 CPU 达到极限,并且运行时间太长。看到瓶颈是 CPU,我升级到“高 CPU”实例(c1.medium),它有 5 个 EC2 计算单元(每个 2 个核心 x 2.5 个计算单元)。我再次启动查询测试,它运行得更快,我很高兴启动了完整的 CPU 密集型查询。
当我检查资源监视器以查看我的新硬件的运行情况时,我发现 sqlservr.exe 进程仅使用了恰好 50% 的 CPU,而 MSSQLSERVER 服务同样使用了恰好 50%。在微型实例上,它使用了 100%。我假设瓶颈始终是 CPU,这样就把事情简化了一点,但似乎 SQL 应该将 CPU 推至 100% 以更快地处理查询(恰好 50% 似乎很可疑)。
我的问题是:为什么CPU只有50%?这和 2 个核心有关吗?我需要做些什么才能让 SQL 充分利用我所支付的计算能力?还是 SQL 正在使用其所能使用的所有计算能力,而我误解了我在资源监视器中看到的内容?
答案1
是的,50% 意味着它只使用一个核心。
(编辑:用关于 SQL Express 仅限于一个 CPU 的答案替换关于 CPU 亲和性的答案。)
这是因为 MSSQL 将每个 vCPU 视为一个 CPU,而不是一个核心,而 MSSQL Server Express 仅限于在一个 CPU 上使用。因此,要让 SQL 使用您付费购买的所有处理能力,需要使用不同版本的 MSSQL 或完全不同的 SQL 实现(如 MySQL 或类似产品)。