Wird ein Volltextkatalog mit Änderungen nachverfolgen: AUTO wird automatisch aktualisiert, wenn die Änderungsverfolgung für diese Tabelle nicht aktiviert ist?


12

Ich habe diese Datenbanktabelle, die den Volltextindex auf dem neuesten Stand halten soll. Ich sehe es jedoch überhaupt nicht (kein Fehler im Protokoll, da das letzte Protokoll, das ich sehe, war, als ich es manuell ausgelöst habe).

Hier ist was ich sehe ...

Volltextkatalogeigenschaften

aber auf dem Tisch selbst ...

Geben Sie hier die Bildbeschreibung ein

Könnte dies der Grund sein, warum dies nicht automatisch geschieht?


Auf welches Protokoll beziehen Sie sich aus Gründen der Klarheit?
Mike Zalansky

@ Mikezalansky Es ist das Volltext-Protokoll, das bei(..\MSSQL\Log\SQLFT*)
Kin Shah

Antworten:


14

Sie suchen am falschen Ort.

Sie müssen wie folgt überprüfen:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Verwenden von T-SQL ..

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

Anschließend können Sie den Status der zuletzt ausgefüllten Datums- und Uhrzeitangabe überprüfen

-- 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

Geben Sie hier die Bildbeschreibung ein

Fügen Sie einige Daten ein ..

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

Jetzt sehen Sie, dass der FT-Katalog aktualisiert wurde.

Geben Sie hier die Bildbeschreibung ein

In den logs ( ..\MSSQL\Log\SQLFT*) wird auch unten die Nachricht angezeigt ...

2015-12-14 12: 36: 51.29 spid50s Information: Volltext Automatische Auffüllung für Tabellen- oder indizierte Ansicht '[AdventureWorks2012]. [HumanResources]. [JobCandidate]' (Tabellen- oder indizierte Ansichts-ID '1589580701', Datenbank-ID 'abgeschlossen. 5 '). Anzahl der verarbeiteten Dokumente: 1. Anzahl der fehlgeschlagenen Dokumente: 0. Anzahl der Dokumente, die wiederholt werden: 0.

Von BOL :

Standardmäßig oder wenn Sie CHANGE_TRACKING AUTO angeben, verwendet die Volltext-Engine die automatische Auffüllung des Volltextindex. Nach Abschluss der anfänglichen vollständigen Auffüllung werden Änderungen nachverfolgt, wenn Daten in der Basistabelle geändert werden, und die nachverfolgten Änderungen werden automatisch weitergegeben. Der Volltextindex wird jedoch im Hintergrund aktualisiert, sodass weitergegebene Änderungen möglicherweise nicht sofort im Index angezeigt werden .

Standardmäßig füllt SQL Server einen neuen Volltextindex vollständig aus, sobald er erstellt wird. Eine vollständige Bevölkerung kann jedoch eine erhebliche Menge an Ressourcen verbrauchen. Daher ist es beim Erstellen eines Volltextindex in Spitzenzeiten häufig eine bewährte Methode, die Gesamtbevölkerung bis zu einer Zeit außerhalb der Spitzenzeiten zu verzögern, insbesondere wenn die Basistabelle eines Volltextindex groß ist. Der Volltextkatalog, zu dem der Index gehört, kann jedoch erst verwendet werden, wenn alle Volltextindizes ausgefüllt sind.

Beachten Sie auch die Leistung von Volltextindizes verbessern


Vielen Dank! Das Problem, das ich mir anschaue, ist, warum es anscheinend überhaupt nicht aktualisiert wird, bis ich den Index manuell neu erstellt habe. Ich bin nicht sicher, ob es verwandt ist, aber die Datenbank, bei der dieses Problem am häufigsten auftritt, wird ebenfalls gespiegelt.
MetaGuru

Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.Hast du es so eingestellt, wie ich es gezeigt habe? Wenn es viele Änderungen gibt, wird es einige Zeit dauern, seitThe full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Kin Shah

Ja, ich habe die von Ihnen angezeigten Stellen überprüft und sie wurden wie in Ihren Beispielen korrekt konfiguriert. Seltsamerweise war das letzte Mal, dass in den Protokollen angegeben wurde, dass dieser Index aktualisiert wurde, eine Weile her, sogar Wochen, verglichen mit dem letzten Mal, als neue Zeilen hinzugefügt wurden. . würde es laufen, wenn neue Zeilen gemäß diesem Recht hinzugefügt werden?
MetaGuru

1
Ja .. Ich habe getestet und dann als Antwort gepostet.
Kin Shah

1

Aus irgendeinem Grund hat der Volltextindexer das automatische Ausfüllen einer meiner SQL 2012-Datenbanken beendet, nachdem mein sekundäres Datenbankreplikat der Verfügbarkeitsgruppe übernommen wurde und das primäre Replikat wurde.

Nachdem der Volltextindex gelöscht und in der Tabelle mit aktiviertem automatischem Auffüllen neu erstellt wurde, wurde das automatische Auffüllen erneut gestartet. Ich habe SQL Management Studio und den Assistenten zum Erstellen von Volltextindizes verwendet, um den Index neu zu erstellen.

Ich war besorgt darüber, wie lange es dauern würde, eine vollständige Indizierung der Daten durchzuführen. Ich war angenehm überrascht, dass es nur etwa 5 Minuten dauerte, um 3 Textspalten aus einer Tabelle mit 547619 Datensätzen neu zu indizieren.

Die in der Frage genannten Einstellungen für die Nachverfolgung von Änderungen auf Tabellenebene blieben deaktiviert. Daher unterscheidet sich die Nachverfolgung von Änderungen im Volltextindex definitiv von der Einstellung zur Nachverfolgung von Tabellenänderungen. Sie müssen die Tabellenänderungsverfolgung NICHT aktiviert haben, damit die Volltextindizierung, die Änderungsverfolgung und die Volltextindizierung automatisch ausgefüllt werden, funktioniert.

Wenn Sie die folgende Abfrage aus der Datenbank ausführen, wird angezeigt, wann Ihr Volltextindexer das letzte Mal einen Crawl ausgeführt hat.

  SELECT  * FROM sys.fulltext_indexes

Wenn Autopopulate aktiviert ist, sollte sich das crawl_end_date ändern, nachdem Sie Daten in die Tabelle eingefügt haben.

Außerdem werden Sie feststellen, dass beim Ausführen einer Abfrage, die den Volltextindex verwendet, die neuesten Daten angezeigt werden:

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

Zusätzliche Referenzen:

Artikel, der verschiedene Methoden der Volltextsuche beschreibt: https://msdn.microsoft.com/en-us/library/ms142575%28v=sql.100%29.aspx

Informationen zum Abfragen einer indizierten Volltexttabelle: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#queries

Artikel zur Architektur der Volltextsuche: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#architecture

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.