SQL Server 突然只使用了一小部分 CPU

her*_*iod 6 cpu-usage sql-server

我们有一台运行 SQL Server 2008 的 Windows 2008 R2 服务器。突然之间,SQLServer 进程拒绝超过 20% 的 CPU 使用率。截至上周,当对数据库运行大量查询时,它的使用率将上升到我预期的 100%。我们已经拥有这台服务器一段时间了,它突然有了这个限制似乎很奇怪。这个限制导致我们的查询比平时花费的时间更长。没有人(至少在知情的情况下)对服务器配置进行过任何更改。

经过一番调查,我发现了 sys.dm_os_sys_memory 视图。这显示“可用物理内存很高”,同时可用物理内存为 339552kb,其中总数为 4193848kb。值得注意的是,这是一个运行在 vmware 上的虚拟服务器。

SQL Server 中是否有设置最大 CPU 使用率的设置?我在资源调控器中找到了设置,尽管目前它一直处于关闭状态。

我们最近开始使用 Quest Software 的 Spotlight for SQL Server。它的播放数据库今天早上在这台服务器上有很短的时间,我第一次注意到这个问题,虽然在此之前我没有做任何查询,所以我不知道这是否是问题所在开始,但是数据库在周五下午按预期工作。Windows 日志显示以下设置在创建时应用于 SpotlightPlaybackDatabase。

  • 02/21/2011 08:45:02,spid60,未知,将数据库选项 TORN_PAGE_DETECTION 设置为 ON 以用于数据库 SpotlightPlaybackDatabase。
  • 02/21/2011 08:45:02,spid60,Unknown,将数据库选项 MULTI_USER 设置为 ON,用于数据库 SpotlightPlaybackDatabase。
  • 02/21/2011 08:45:02,spid60,未知,将数据库选项 READ_WRITE 设置为 ON 以用于数据库 SpotlightPlaybackDatabase。
  • 02/21/2011 08:45:02,spid60,未知,将数据库选项 AUTO_UPDATE_STATISTICS 设置为 ON 以用于数据库 SpotlightPlaybackDatabase。
  • 02/21/2011 08:45:02,spid60,未知,将数据库选项 AUTO_CREATE_STATISTICS 设置为 ON 以用于数据库 SpotlightPlaybackDatabase。
  • 2011 年 2 月 21 日 08:45:02,spid60,未知,将数据库选项 ANSI_WARNINGS 设置为关闭数据库 SpotlightPlaybackDatabase。
  • 02/21/2011 08:45:02,spid60,未知,将数据库选项 CONCAT_NULL_YIELDS_NULL 设置为 ON 以用于数据库 SpotlightPlaybackDatabase。
  • 02/21/2011 08:45:02,spid60,未知,将数据库选项 RECOVERY 设置为 SIMPLE,用于数据库 SpotlightPlaybackDatabase。
  • 2011 年 2 月 21 日 08:45:02,spid60,未知,将数据库选项 QUOTED_IDENTIFIER 设置为关闭数据库 SpotlightPlaybackDatabase。
  • 2011 年 2 月 21 日 08:45:02,spid60,未知,将数据库选项 AUTO_CLOSE 设置为关闭数据库 SpotlightPlaybackDatabase。

这些设置更改中的任何一个都可以修改应用于整个服务器的设置吗?

编辑 #1: 通过重新启动 sql server 设法解决了这个问题,首先不确定问题是什么。尽管问题已经解决,但我仍然有一些我以前不知道的 io 问题需要解决。

编辑#2: 问题再次发生。解决方案是在 SQL Server 上关闭 Spotlight 中的跟踪分析,这就是拖累一切的原因。

mrd*_*nny 1

检查 sys.dm_os_waiting_tasks 并查看等待资源是什么。基本上查看 wait_type 并看看里面有什么。运行此查询并将结果发回。

select wait_type, sum(wait_duration_ms) sum_wait_duration_ms, avg(wait_duration_ms) avg_wait_duration_ms, count(*) waits
from sys.dm_os_waiting_tasks
group by wait_type
Run Code Online (Sandbox Code Playgroud)

您可能遇到了与我今天早上在博客上谈到的类似问题。