我们有一台运行SQL Server 2008的Windows 2008 R2服务器。突然,SQLServer进程拒绝超过20%的CPU使用率。 截至上周,当对db运行一个很大的查询时,它会像我所期望的那样达到100%的使用率。 我们已经有了这个服务器一段时间,似乎很奇怪,它会突然有这个限制。 这个限制导致我们的查询花费比正常情况更多的时间。 没有人(至less明知)对服务器configuration进行了任何更改。
经过一番调查,我发现了sys.dm_os_sys_memory视图。 这表明'可用物理内存高'bu同时可用的物理内存是339552kb,总共是4193848kb。 值得注意的是,这是一个运行在vmware上的虚拟服务器。
在SQL Server中是否有设置最大CPU使用率的设置? 我已经在资源pipe理器中find了这些设置,虽然现在已经closures了。
我们最近开始使用Quest Software的Spotlight for SQL Server。 它的播放数据库是在今天早上在这个服务器上很短的时间,我之后不久就注意到了这个问题,虽然我之前没有做过任何查询,所以我不知道这是不是问题的出处但是数据库在周五下午按预期工作。 Windows日志显示在创buildSpotlightPlaybackDatabase时将以下设置应用于SpotlightPlaybackDatabase。
这些设置中的任何更改都可以修改应用于整个服务器的设置吗?
编辑#1:pipe理通过重新启动sql server来解决这个问题,不知道什么问题是摆在首位。 尽pipe问题得到了解决,但我仍然有一些问题需要理清,以前我没有意识到。
编辑#2:问题重新发生。 解决scheme是closuresSQL Server上的Spotlight中的跟踪分析,这是拖拉一切。
检查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
您可能会遇到类似于我今天早上在我的博客上讨论过的问题。
您无法pipe理CPU使用情况,但可以pipe理CPU亲和性 。 也就是说,有人限制SQL Server使用单个CPU?
同样的,有人改变了全球maxdop设置 ? 这将所有查询限制为一个CPU,但任何单个查询都将在其中一个可用CPU上运行
假设没有像gbn所提到的那样改变CPU亲和性或MAXDOP,有一些可能性。
首先是您的查询的查询计划已经改变,因为索引或基础表数据的分布已经发生了很大的变化。 尝试优化或重build基础表上的索引。
其次,你现在可能是I / O绑定,要么从你的主数据库文件读取数据,要么在tempdb中工作(如果查询对RAM太大,SQL将存储查询的中间部分)。 使用perfmon,并监控平均。 磁盘队列长度。 它的平均值应小于服务器中物理磁盘的数量。 如果CPU在CPU处于低电平期间在“大量查询”期间出现问题,则CPU正在等待磁盘IO,因此无法在100%的时间内运行。 如果是这种情况,您有几个select:更多的RAM(减less使用磁盘的需要),更快的磁盘(SSD?),或优化查询,索引和模式以减less磁盘IO。 最后的select可以有最大的影响(从字面上改善100倍或更多)。 但它也可能是最困难的,取决于你的数据结构和查询。 阅读SQL执行计划; 买些书。
你可以做的一件事是确切地看到运行查询的进程发生了什么。 如果您持续监视spids活动并查看最常见的等待types是什么。 您可能会发现有一个资源,例如磁盘io,spid正在等待,这意味着cpu在查询之前空转,直到磁盘读取/写入完成。
这个问题是通过重新启动SQL服务器解决,但我不知道是什么原因造成的。 谢谢你的回复。