我在生产环境中遇到了 SQL Server 2008 的一些关键问题;我们有一个包含 FTS 索引的数据库;我们还有一项维护工作,可以重建 FTS 索引并更新统计信息,如下所示:
更改全文目录 [ftCatalogName] 重建更新统计信息 [tableNameWithFtIndex]
该作业每周一上午 9 点运行;大约 1 分钟即可完成并且始终成功;
现在的问题是:每次作业完成后,sqlserver.exe 进程的 CPU 使用率就会上升到 99%;通常 CPU 会停留在 70-80% 左右(我知道这很高,我们正在尝试改善这个问题);而让它恢复到正常状态(70-80%)的唯一方法是,只有当我们在所有前端服务器(我们有一个 webfarm)上停止 IIS,然后重新启动它们 - 这样,当 IIS 停止时,sqlserver.exe 的 CPU 就会降至 0%,而当 IIS 重新启动时,则会回到 70-80%;
我还分析了重建过程中 CPU 的行为: - 启动 FTS 重建作业(上述语句) - sqlserver.exe CPU=75%(正常);fdhost.exe=20-25%(重建期间正常) - 作业在 51 秒内完成,fdhost CPU 降至 0%,sqlserver.exe 降至 99% 并保持这种状态,直到我应用上面描述的流程(在前端服务器上启动/停止 IIS)
有人知道为什么会发生这种情况吗?至少有一个解释……或者一些优化此索引的方法,使其在重建时消耗的资源更少……
先感谢您!
答案1
你的声明只是触发器重建工作,而不是正在做所以 - 您通过ALTER FULLTEXT
语句触发了该作业,现在您可以等待它完成,如下所示:
WHILE (SELECT COUNT(*) FROM sys.fulltext_catalogs WHERE FULLTEXTCATALOGPROPERTY(name, 'PopulateStatus') IN (1, 6, 7, 9)) > 0
WAITFOR DELAY '0:00:00.1'