Sql server 为什么CPU没有达到最大值?

Sql server 为什么CPU没有达到最大值?,sql-server,io,cpu,performance,Sql Server,Io,Cpu,Performance,我有一个我想提高效率的应用程序——它不会对任何一种资源造成太大的负担,因此我可以将其视为瓶颈,因此可能该应用程序正在做一些妨碍充分效率的事情 应用程序从一个SQL Server实例上的数据库中提取数据,对其执行一些操作,然后将其写入另一个SQL Server实例上的数据库—所有这些都在一台计算机上。它不能同时做任何事情 当应用程序运行时(可能需要几个小时),4个CPU核心都没有达到最大值(每个CPU的利用率都在40-60%左右),磁盘几乎处于空闲状态,使用的RAM很少 报告值: Target S

我有一个我想提高效率的应用程序——它不会对任何一种资源造成太大的负担,因此我可以将其视为瓶颈,因此可能该应用程序正在做一些妨碍充分效率的事情

应用程序从一个SQL Server实例上的数据库中提取数据,对其执行一些操作,然后将其写入另一个SQL Server实例上的数据库—所有这些都在一台计算机上。它不能同时做任何事情

当应用程序运行时(可能需要几个小时),4个CPU核心都没有达到最大值(每个CPU的利用率都在40-60%左右),磁盘几乎处于空闲状态,使用的RAM很少

报告值:

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%之间闪烁一秒钟左右。同样根据task manager,平均响应时间在0到20毫秒之间移动,主要显示在0.5到2毫秒之间。

数据库因IO限制而臭名昭著。现在,认真地说,正如你所说:

应用程序从一个SQL Server实例上的数据库提取数据, 对其进行一些操作,然后将其写入另一个数据库 SQL Server实例-全部在一台计算机上

我不知怎的想到了这是一个终端用户级的mashine,也许是一个工作站。你的线性代码(顺便说一句,获得充分利用率是个坏主意,因为你从来没有并行运行所有3个部分——读取、处理、写入)将受到你拥有的任何IO子系统的严重限制

但只要你能说,这就不会起作用:

它不能同时做任何事情

它必须做的是并行工作:

  • 一个任务是读取下一个数据
  • 其中一项任务负责数据处理
  • 其中一项任务是数据写入
你肯定可以最大化出比你的4个核心多得多。上一次我做了类似的事情(读/操作/写),我们用大约96个并行处理线程(以及少量的写线程)最大化了48个内核。但其核心是,您的应用程序msut开始实际使用多个CPU

如果不并行化:

  • 您只会最大化一个核心最大值
  • 您基本上是在两端浪费时间等待数据库。等待读取或提交数据时的延迟是指您不处理任何内容时的延迟

)()一旦你解决了这个问题,你就会遇到IO问题。承诺。

数据库因IO限制而臭名昭著。现在,认真地说,正如你所说:

应用程序从一个SQL Server实例上的数据库提取数据, 对其进行一些操作,然后将其写入另一个数据库 SQL Server实例-全部在一台计算机上

我不知怎的想到了这是一个终端用户级的mashine,也许是一个工作站。你的线性代码(顺便说一句,获得充分利用率是个坏主意,因为你从来没有并行运行所有3个部分——读取、处理、写入)将受到你拥有的任何IO子系统的严重限制

但只要你能说,这就不会起作用:

它不能同时做任何事情

它必须做的是并行工作:

  • 一个任务是读取下一个数据
  • 其中一项任务负责数据处理
  • 其中一项任务是数据写入
你肯定可以最大化出比你的4个核心多得多。上一次我做了类似的事情(读/操作/写),我们用大约96个并行处理线程(以及少量的写线程)最大化了48个内核。但其核心是,您的应用程序msut开始实际使用多个CPU

如果不并行化:

  • 您只会最大化一个核心最大值
  • 您基本上是在两端浪费时间等待数据库。等待读取或提交数据时的延迟是指您不处理任何内容时的延迟

)()一旦你解决了这个问题,你就会遇到IO问题。承诺。

我推荐阅读。您需要捕获并分析等待统计数据。这些将告诉您什么是执行,以防止它在CPU上达到最大输出。您已经感觉到工作负载正在导致SQL引擎等待而不是运行,但只有在了解等待统计信息之后,您才能了解等待的内容。按照链接的文章查找具体的分析技术。

我建议阅读。您需要捕获并分析等待统计数据。这些将告诉您什么是执行,以防止它在CPU上达到最大输出。您已经感觉到工作负载正在导致SQL引擎等待而不是运行,但只有在了解等待统计信息之后,您才能了解等待的内容。根据链接的文章了解具体的分析技术。

我不太了解它是如何工作的。不良操作可能是由于硬件、操作系统或服务器的某些错误配置造成的。你用什么操作系统?不过,看看吧。我不太明白它是如何工作的。不良操作可能是由于硬件、操作系统或服务器的某些错误配置造成的。你用什么操作系统?不过,请看一下。谢谢。实际上,该处理一次操作数千条“记录”,因此使其并行工作的最简单方法(就应用程序设计而言)可能是并行操作一定数量的记录。这些记录没有排序依赖关系,所以这应该是安全的。这是100%像我们做的。一个线程生成select语句,将每条记录推入一个处理队列,X个线程进行处理,将输出送入写入器队列,Y个写入器队列进行写入;)我们在大约20分钟内处理了4亿条记录。谢谢。实际上,该处理一次操作数千条“记录”,因此最简单(在