我有一个游戏服务器,运行在装有 Windows 2003 且配备 4 GB RAM 的机器上。游戏服务器使用安装在同一台机器上的数据库,由 SQL Server 2008 管理。
大约一周前,我开始观察到一种奇怪的行为 - 每隔一段时间(大约 24 小时间隔),SQL Server 开始猛烈撞击磁盘,严重到几乎无响应。我可以在 Windows 附带的性能监视工具中检测到撞击,当发生这种情况时,平均磁盘队列长度保持在最大值 100。
发生这种情况时,Sysinternals 的进程监视工具显示 SQL Server 进程正在执行读文件调用数据库中密度纤维板文件不断(许多后续调用)。数据库文件为 3.2 GB。奇怪的是,数据库 24/7 全天候使用,负载大致相同,但这种负载只发生在特定时间。
有人知道是什么原因导致了这个问题以及如何进一步诊断吗?
答案1
是否有任何计划的数据库维护工作?(数据库备份、DBCC CHECKDB、重新索引)?
如果是这样,那可能就是罪魁祸首。如果不是,那就做一些 :)
要查看实际发生的活动,请使用 SQL Profiler 实用程序或运行 SQL Trace 将活动记录到文件中。这应该会告诉您实际发生的活动类型,以及您是否需要调整某些查询或采取其他类型的操作。
最后一个想法:AutoShrink 是否已打开?如果已打开,请将其关闭!
以下是一些支持该最后说法的文章:
我会让文章标题说明一切:)
答案2
你们的游戏服务器上安装了什么防病毒软件吗?
如果您安装了 SQL Server Management Studio,当发生这种情况时,我会检查活动监视器,看看是否可以隔离特定的进程或计划的作业。