您是否有以下经历,并且找到了解决方法:
我们网站的后端很大一部分是MS SQL Server2005。每两周或两周,该网站的运行就会开始变慢-我发现使用SQL完成查询所花费的时间越来越长。我有一个喜欢使用的查询:
USE master
select text,wait_time,blocking_session_id AS "Block",
percent_complete, * from sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 order by start_time asc
这非常有用……它提供了当时针对SQL Server运行的所有内容的快照。很好的是,即使您的CPU由于某种原因被钉在100%上,并且活动监视器拒绝加载(我确定其中有些人在那里),该查询仍然返回,并且您可以看到哪个查询正在杀死您的数据库。
当我运行此程序时,或者在SQL开始放慢速度的时候运行“活动监视器”,我看不到任何引起该问题的特定查询-它们的运行速度都较慢。如果我重新启动MS SQL Service,那么一切都很好,它可以加快速度-一两个星期,直到再次发生。
我能想到的一切都没有改变,但这只是几个月前才开始的...想法?
- 添加
请注意,发生此数据库速度降低时,无论我们每小时获得10万次页面浏览量(一天中的繁忙时间)还是每小时一万次页面浏览量(缓慢的时间)都没关系,所有查询都比正常完成花费更长的时间。服务器并没有真正处于压力之下-CPU并不高,磁盘使用率似乎并没有失控...这感觉像是索引碎片或类似的东西,但这似乎不是案件。
就我上面粘贴的查询的结果而言,我确实无法做到这一点。上面的查询列出了执行任务的用户的登录名,整个查询等。并且,我真的不想在网上分发数据库,表,列和登录名:)...可以告诉您当时运行的查询是正常的,我们的网站一直运行的标准查询,没有任何异常。
-3月24日
自上次重新启动以来已经过去了大约两个星期。我做了几处更改:我发现了一些查询,在这些查询中我们大量使用了临时表,这些表完全没有必要,并且让我们的开发人员更改了他们的工作方式。我将一些不断(缓慢但肯定地)增长的数据库的大小调整为适合其增长的智能大小。我还调整了所有内容的自动增长设置,使其更加智能化(它们都设置为1MB增长)。最后,我整理了一下MSDB。我们进行日志传送,实际上并不需要保留数年之久的备份点,我编写了一些脚本,将其保留了仅几个月。我将继续更新此线程,因为现在判断问题是否已解决还为时过早。