我们网站后端的很大一部分是MS sql Server 2005.每隔一周或两周,网站开始运行速度变慢 – 我发现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服务器运行的所有内容的快照.有什么好处的是,即使你的cpu由于某种原因被挂起100%并且Activity Monitor拒绝加载(我确定你们有些人一直在那里),这个查询仍然会返回,你可以看到什么查询正在杀死你的数据库.
当我在sql开始减速的时候运行它或Activity Monitor时,我没有看到任何导致问题的特定查询 – 它们全部运行速度较慢.如果我重新启动MS sql服务,那么一切都很好,它会加速 – 持续一到两周,直到它再次发生.
我能想到的一切都没有改变,但几个月前刚刚开始……想法?
– 添加
请注意,当这个数据库减速发生时,如果我们每小时(繁忙时间)获得100K页面查看或者每小时10K页面查看(慢速时间),则查询都需要比正常时间更长的时间来完成并不重要.服务器并没有真正承受压力 – cpu不高,磁盘使用率似乎没有失控……感觉就像索引碎片或类似的东西但似乎不是案件.
至于粘贴上面粘贴的查询结果,我真的不能这样做.上面的查询列出了执行任务的用户的登录,整个查询等等.我真的不想在网上分发我的数据库,表格,列和登录的名称:)…我可以告诉你,当时运行的查询是我们网站的常规标准查询,一直运行,没有任何规范.
– 3月24日
自上次重启以来已经过去两周了.我做了一些更改:我发现了一些查询,我们正在大量使用临时表,完全没有必要,并让我们的开发人员改变了他们的工作方式.我将一些不断(缓慢但肯定)不断增长的数据库的大小调整为智能大小以适应它们的增长.我调整了所有内容的自动增长设置,以便更加智能(它们全部设置为1MB增长).最后我清理了一点MSDB.我们做日志传送,并且真的不需要保留数年和数年的备份点,我写了一些脚本,只保留了几个月.我会不断更新这个帖子,因为现在判断问题是否已解决还为时过早.