我收到用户的报告,当他们尝试访问数据库时,访问速度急剧变慢。
Perfmon 指出:
Cpu ~20% usage.
RAM (3,5gb) 2.1gb in usage, 1.7GB for SQL
HDD Disk avg read is above 22 up to 40 and has 104GB free.
到目前为止,过去三周一切都很好。
我该如何解决这个问题?对数据库进行碎片整理有用吗?
答案1
您需要了解数据库中正在发生的事情。检查当前活动以查看系统正在运行什么 - 可能正在运行大型查询、持有大量锁的语句、阻塞等。
您还可以检查一些现在运行缓慢的示例语句以查看实际的执行计划和统计数据 - 它们是否击中正确的索引或生成表扫描?
您的索引是否严重碎片化?
最近是否发生过重大事件,例如批量导入后数据量大幅增长等?
更新:
索引碎片是 SQL Server 内部的问题(与操作系统级别的物理文件碎片不同)。您应该考虑制定定期计划来处理碎片。
Brent Ozar 就此发表了一系列精彩文章http://www.brentozar.com/archive/2009/02/index-fragmentation-findings-part-1-the-basics/。它包含指向需要它的良好 scrupt defaging 索引的链接。或者,如果您可以设置维护计划来执行此操作,但请注意文章中提到的限制。
您至少需要考虑这些维护任务对实时系统的影响 - 理想的做法是尽可能将工作安排在非工作时间进行。