我是AWS新手,所以我认为这可能是一个非常简单的问题:
我正在使用一个EC2 t1.micro实例作为我的SQL DB服务器来进行一些我正在做的小规模分析(Windows,SQL Express 2008)。 这一切都进行得很顺利,直到我最近有一个巨大的SQL查询,最大限度的微型实例,可怜的CPU,并花了太长的时间来运行。 看到瓶颈是CPU,我升级到具有5个EC2计算单元(2个核心x2.5个计算单元)的“高CPU”实例(c1.medium)。 我再次启动了对查询的testing,运行速度更快,我开心地启动了完整的CPU密集型查询。
当我检查资源监视器来查看我的新硬件在做什么时,我看到sqlservr.exe进程只使用了CPU的50%,而MSSQLSERVER服务同样正好使用了50%。 在微型实例,它是使用100%。 假设瓶颈是统一的CPU,我简单地把事情简化了一些,但是似乎SQL应该把CPU推到100%以更快的速度查询查询(并且确实有50%似乎是可疑的)。
我的问题是: 为什么CPU只有50%? 这与2个核心有什么关系? 我是否需要做任何事情来让SQL充分利用我所付出的计算能力? 或者是SQL使用它的所有计算能力,而且我误解了资源监视器中所看到的内容?
是的,50%意味着它只使用一个核心。
(编辑:取代关于CPU亲和力的答案与关于SQL Express的答案限于一个CPU。)
这是因为MSSQL将每个vCPU视为一个CPU而不是一个核心,而MSSQL Server Express仅限于在一个CPU上使用。 所以让SQL使用你所支付的所有处理能力将需要使用不同版本的MSSQL或完全不同的SQL实现(如MySQL等)。