如果未启用该表的“更改跟踪”,带有“跟踪”的全文目录是否会发生变化:“自动”会自动更新?


12

我有此数据库表,用于保持全文索引为最新。但是我根本没有看到它发生(日志中没有错误,因为我看到的最后一个日志是我手动触发它时)。

这是我所看到的...

全文目录属性

但是在桌子上...

在此处输入图片说明

这可能是为什么它不会自动发生的原因吗?


为了清楚起见,您指的是哪个日志?
Mike Zalansky

@mikezalansky其全文日志可在(..\MSSQL\Log\SQLFT*)
Kin Shah

Answers:


14

您在看错地方。

您必须检查如下:

在此处输入图片说明

在此处输入图片说明

使用T-SQL ..

Use database_name
go
ALTER FULLTEXT INDEX ON schema.table_name SET CHANGE_TRACKING AUTO;

完成后,您可以检查最后填充的日期时间的状态

-- script source : http://stackoverflow.com/a/10505496/1387418
-- Modified by Kin on Dec 14' 2015 to reflect the FTCatalogName
DECLARE @CatalogName VARCHAR(MAX)
SET     @CatalogName = 'AW2008FullTextCatalog' -- change here !

SELECT name as FTCatalogName, 
    DATEADD(ss, FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateCompletionAge'), '1/1/1990') AS LastPopulated
    ,(SELECT CASE FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateStatus')
        WHEN 0 THEN 'Idle'
        WHEN 1 THEN 'Full Population In Progress'
        WHEN 2 THEN 'Paused'
        WHEN 3 THEN 'Throttled'
        WHEN 4 THEN 'Recovering'
        WHEN 5 THEN 'Shutdown'
        WHEN 6 THEN 'Incremental Population In Progress'
        WHEN 7 THEN 'Building Index'
        WHEN 8 THEN 'Disk Full.  Paused'
        WHEN 9 THEN 'Change Tracking' END) AS PopulateStatus
FROM sys.fulltext_catalogs

在此处输入图片说明

插入一些数据..

insert into HumanResources.JobCandidate
(BusinessEntityID, Resume, ModifiedDate)
values 
    (4, NULL, DEFAULT)

现在,您将看到FT目录已更新。

在此处输入图片说明

同样在日志(..\MSSQL\Log\SQLFT*)中,以下是消息...

2015-12-14 12:36:51.29 spid50s信息性:已为表或索引视图'[AdventureWorks2012]。[HumanResources]。[JobCandidate]'(表或索引视图ID为'1589580701',数据库ID为' 5')。已处理的文档数:1.失败的文档数:0。将重试的文档数:0。

BOL

默认情况下,或者如果您指定CHANGE_TRACKING AUTO,则全文引擎会对全文索引使用自动填充。初始全部填充完成后,将在基础表中修改数据时跟踪更改,并且跟踪的更改会自动传播。全文索引在后台更新,但是,传播的更改可能不会立即反映在索引中

默认情况下,SQL Server会在创建新索引后立即完全填充它。但是,整个人口会消耗大量资源。因此,在高峰时段创建全文索引时,通常最好的做法是将全部填充时间延迟到非高峰时间,尤其是在全文索引的基表很大的情况下。但是,直到填充了其所有全文索引后,索引所属的全文目录才可用。

另请参阅提高全文本索引的性能


谢谢!我要解决的问题是,在手动重建索引之前,它似乎根本没有更新。不知道它是否相关,但是似乎最容易出现此问题的数据库也是正在镜像的数据库。
MetaGuru

Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.你按照我的显示设置了吗?如果有很多更改,则需要花费一些时间,因为The full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Kin Shah 2015年

是的,我检查了您显示的位置,并按照示例中所示正确配置了它……奇怪的是,尽管上次日志显示该索引的更新时间是前一阵子,甚至是几周,但与上次添加新行的时间相比。 。根据此权利添加新行时,它将运行吗?
MetaGuru 2015年

1
是的..我进行了测试,然后将其发布为答案。
金莎(Kin Shah)2015年

1

由于某种原因,在我的辅助可用性组数据库副本接管并成为主副本之后,全文索引器停止为我的SQL 2012数据库之一自动填充。

删除全文索引并在自动填充处于打开状态的表上重新创建它之后,它又开始自动填充。我使用了SQL Management Studio和“全文索引”创建向导来重新创建索引。

我担心要对数据进行完全索引需要多长时间。我很惊讶地发现,从一个具有547619条记录的表中重新索引3个文本列只花了大约5分钟。

问题中提到的表级别更改跟踪设置保持禁用状态。因此,全文索引更改跟踪绝对不同于表更改跟踪设置。您无需启用表更改跟踪即可使全文索引更改跟踪和全文索引自动工作。

从数据库运行以下查询将显示您的全文索引器最后一次进行爬网的时间。

  SELECT  * FROM sys.fulltext_indexes

启用自动填充功能后,在将数据插入表中后,raw_end_date应该会更改。

另外,您还将注意到,当您运行使用全文索引的查询时,它将显示最新数据:

  select TOP 10 * from YOURDATATABLE where contains((YOUR_indexed_column),'YOURSEARCHTERM') order by YOURPRIMARYKEYCOLUMN desc

其他参考:

文章描述了全文搜索填充的不同方法:https : //msdn.microsoft.com/zh-cn/library/ms142575%28v=sql.100%29.aspx

有关查询全文索引表的信息:https : //technet.microsoft.com/zh-cn/library/ms142571(v=sql.110).aspx#queries

关于全文搜索体系结构的文章:https : //technet.microsoft.com/zh-cn/library/ms142571(v= sql.110).aspx#architecture

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.