我们的网站有一个 SQL Server 2008 R2 Express Edition 数据库,为我们的网站搜索提供全文索引。每次在一个索引表中添加或更新一条新记录时,索引过程似乎永远不会完成。
在过去的几周里,我一直在使用在这个网站上找到的基本相同的查询来监控状态:http ://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-search/2155/Why-is-this - 人口采取这么长时间
索引表中的最新记录永远不会完成并且不可搜索。尽管表中的数据不多,但我已经等了几天看看索引是否完成,但没有任何变化。
我能够成功完成索引的唯一方法是重建目录或删除并重新创建所有索引。
每次我这样做时,一旦添加了第一条新记录,同样的问题就会再次出现。
以下是服务器统计信息以防万一:
- 四核 AMD 皓龙 2.34GHz
- 4GB 内存
- Windows Server 2008 R2 企业版 SP1 x64
- 具有高级服务 x64 的 SQL Server 2008 R2 速成版
我终于找到了我的问题的原因!
我尝试了几个月来追踪这个问题,但最终放弃了,禁用了自动更改跟踪,只是手动启动了增量填充并继续我的生活。
与此同时,还有一个我难以追查的令人讨厌的错误。网站会定期抛出数据库连接错误:
事实证明,这两个问题都有相同的解决方案。我所要做的就是关闭一个名为“自动关闭”的数据库设置。为此,只需右键单击数据库并单击属性。在属性窗口中选择选项并将“自动关闭”设置为 false。
一旦我禁用自动关闭,我的数据库登录问题就消失了,并且自动更改跟踪运行良好。
再次感谢大家的帮助。我很感激!
好奇您是否已通过 BOL 中的全文性能故障排除步骤 - http://technet.microsoft.com/en-us/library/ms142560.aspx。
我敢打赌,SQL Server 正在吃掉你所有的内存,并且没有让过滤器守护进程拥有任何内存,所以你的人口很慢,因为它很可能不得不将内容交换到页面文件。您应该限制 SQL 可以使用的内存量(考虑到您当前的系统规格,我认为大约在 3GB 左右——这将为 FDHost 和操作系统留下 1GB)。
这是我使用游标创建的脚本,用于为任何具有 MSSQL2008 的表重建和填充完整索引。这是在生产环境中使用从 MSSQL 2000 服务器迁移的数据库。我已关闭更改跟踪并仅通过 SQL Server 代理运行此存储过程。如果您使用的是 express,则可以使用 VBS 脚本通过任务计划程序运行它。
在尝试填充索引之前,在脚本中首先对每个目录进行重建非常重要。
有没有人有不需要游标的方法?
通常建议使用触发器更新全文目录。这是我在 mssql 上使用的方法,但在我的情况下,因为我有一个本地化的应用程序,它有几个特定的要求导致我使用触发器的解决方案,该解决方案从 2 年前开始 100% 有效。
对照此示例检查您的实现。
不确定您的情况的根本原因是什么,但这可能在备份发生后发生。不确定这是否是您的情况或该表与其他表有何不同。现在你让我很好奇。您是否打开了 SQL 复制?
对于临时修复,当发生这种情况时,我会在桌子上执行“爬行”(人口)。
http://msdn.microsoft.com/en-us/library/ms142575(v=sql.105).aspx
使用此代码: