CPU使用率较低,大约15%。CPU是4770K。SQL Server 数据文件分为 8 个部分,并与 tempdb(也分为 8 个部分)一起存储在 EVO 970 SSD 上。temdlog 和数据库日志位于另一个 SSD 上(读/写潜力约为 500MB/s)。我在下面的任务管理器中没有看到任何高磁盘使用率(10 MB/s),并且 RAM 使用率也不高(有 32 GB)。最大并行度设置为 8。
看起来 SQL Server 主要使用 1 个核心,但我不明白为什么。似乎不受磁盘或内存的限制,那么我怎样才能让它工作得更努力一些(使用更多的CPU)?
更新
测试了 Dan Guzman 的查询并确认 cpu 利用率更高,尽管很难有时间在任务管理器中看到(查询时间 2 秒)。很高兴知道开发者版本并未锁定一个核心。
测试了丹·布朗链接中的查询。并行化版本使我的 cpu 使用率超过 95%,因此案件似乎已经结束;cpu使用率低是因为查询。
我有很多相关子查询(在选择中选择),这对于性能来说看起来不太好。对于维护来说,最简单的方法是在一个查询中计算多个统计信息,但这种方式似乎只使用一个核心。我测试了将它们拆分,以便每个查询只计算一个指标,这样 sql server 就开始使用更多核心。
将来我想我会测试 Spark 对于相同查询的性能,看看它与 sql server 相比如何。也许还可以通过 Spark 在多个工作线程上运行针对 sql server 的查询(在这种情况下,我需要根据 pk 的模数进行分区来分割工作)。
对于感兴趣的人来说:我需要计算的是比赛的各种指标,这样对于每场比赛和每个竞争对手,我都会获取其最高记录,例如过去 3 个月、过去 6 个月等或过去 6 个月的平均时间。当查询时间约为 10 小时时,它开始影响我想做的分析工作(更改或纠正某些内容的一次迭代需要太长时间)。
SQL Server Developer Edition 可以使用所有可用的核心,除非您专门进行了其他配置。是否使用所有核心取决于工作负载。
如果您正在运行像 SELECT * FROM dbo.YourTable 这样的查询,它可能是一个单线程计划并且仅使用一个 CPU。您需要运行此类查询的多个实例才能查看使用的更多 CPU。
使用并行性的单个查询应该能够使用多个核心。下面的示例使用了我的机器的全部 12 个核心,尽管 CPU 总量平均约为 40%。
WITH
t10 AS (SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t(n))
,t1k AS (SELECT 0 AS n FROM t10 AS a CROSS JOIN t10 AS b CROSS JOIN t10 AS c)
,t1g AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS num FROM t1k AS a CROSS JOIN t1k AS b CROSS JOIN t1k AS c)
SELECT COUNT(*) AS CountOfRows
FROM t1g;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
835 次 |
最近记录: |