我有一个应用程序,我希望提高效率 - 它不会对任何一个资源征税,我可以将其识别为瓶颈,所以也许应用程序正在做一些阻止完整的事情效率
应用程序从一个SQL Server实例上的数据库中提取数据,对其进行一些操作,然后将其写入另一个SQL Server实例上的数据库 - 所有这些都在一台机器上。它没有并行做任何事情。
当应用程序正在运行时(可能需要几个小时),4个CPU核心中没有一个被最大化(它们各自的利用率大约为40-60%),磁盘几乎处于空闲状态并且使用的内存非常少。 / p>
报告值:
Target SQL Server instance: ~10% CPU utilization, 1.3GB RAM
Source SQL Server instance: ~10% CPU utilization, 300MB RAM
Application: ~6% CPU utilization, 45MB RAM
所有工作都在一个磁盘上进行,平均在操作期间写入大约100KB / s。 '活跃时间'根据任务经理通常为0%,偶尔会闪烁1到5%之间一秒钟左右。根据任务经理的说法,平均响应时间在0ms到20ms之间移动,主要显示在0.5到2ms之间。
答案 0 :(得分:3)
数据库因IO限制而臭名昭着。现在,严肃地说,正如你所说:
应用程序从一个SQL Server实例上的数据库中提取数据, 对它进行一些操作,然后将其写入另一个数据库 SQL Server实例 - 全部在一台机器上。
我以某种方式认为这是最终用户级别的mashine,也许是工作站。你的线性代码(一个糟糕的想法,因为你永远不会运行所有3个部分 - 并行读取,处理,写入),因为你拥有的任何IO子系统都会严重限制你的完整利用率。
但只要你可以陈述,那就不会发挥作用:
它没有并行做任何事情。
它必须做的是并行做事:
你绝对可以比4核更多。上次我做了类似的事情(读取/操作/写入)时,我们最多可以处理48个核心,大约96个处理线程并行运行(并且执行写入的次数较少)。但其核心是您的应用程序开始实际使用多个CPU。
如果您不进行并行化:
;)一旦你修复了,你就会遇到IO问题。答应。
答案 1 :(得分:1)
我建议阅读How to analyse SQL Server performance。您需要捕获并分析等待统计数据。这些将告诉您执行的操作是什么阻止它在CPU上最大化。您已经感觉工作负载导致SQL引擎等待而不是运行,但只有在您了解了等待统计数据后才能感觉到等待 for 的是什么。按照链接的文章进行特定的分析技术。