Freigeben über


Auffüllen von Volltextindizes

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Das Erstellen und Verwalten eines Volltextindexes umfasst das Auffüllen des Indexes mithilfe eines Prozesses, der als Auffüllung (oder auch als Crawl) bezeichnet wird.

Arten der Auffüllung

Ein Volltextindex unterstützt die folgenden Auffüllungstypen:

  • Vollständige Auffüllung
  • Automatische oder manuelle Auffüllung basierend auf der Änderungsnachverfolgung
  • Inkrementelle Auffüllung basierend auf einem Zeitstempel

Vollständige Auffüllung

Während einer vollständigen Auffüllung werden Indexeinträge für alle Zeilen einer Tabelle oder einer indizierten Sicht erstellt. Eine vollständige Auffüllung eines Volltextindexes erstellt Indexeinträge für alle Zeilen der Basistabelle oder der indizierten Sicht.

Standardmäßig füllt SQL Server einen neuen Volltextindex vollständig auf, sobald er erstellt wird.

  • Die vollständige Auffüllung kann einerseits eine deutliche Beanspruchung der Ressourcen bedeuten. Beim Erstellen eines Volltextindexes zu Zeiten mit hohen Lastwerten wird daher empfohlen, die vollständige Auffüllung bis zu einem späteren Zeitpunkt mit geringerer Auslastung zu verzögern, insbesondere, wenn die Basistabelle eines Volltextindexes sehr groß ist.
  • Der Volltextkatalog ist andererseits bis zum Abschluss der vollständigen Auffüllung der zugehörigen Volltextindizes nicht verfügbar.

Geben Sie in der CREATE FULLTEXT INDEX-Anweisung die CHANGE_TRACKING OFF, NO POPULATION-Klausel an, um einen Volltextindex zu erstellen, ohne ihn sofort aufzufüllen. Bei Angabe von CHANGE_TRACKING MANUAL füllt die Volltext-Engine den neuen Volltextindex erst auf, wenn Sie eine ALTER FULLTEXT INDEX-Anweisung mithilfe der START FULL POPULATION- oder START INCREMENTAL POPULATION-Klausel ausführen.

Beispiel: Erstellen eines Volltextindexes ohne Ausführung der vollständigen Auffüllung

Im folgenden Beispiel wird ein Volltextindex für die Production.Document -Tabelle der AdventureWorks -Beispieldatenbank erstellt. In diesem Beispiel wird WITH CHANGE_TRACKING OFF, NO POPULATION verwendet, um die erste vollständige Auffüllung zu verzögern.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

Beispiel: Ausführen einer vollständigen Auffüllung für eine Tabelle

Im folgenden Beispiel wird eine vollständige Auffüllung der Production.Document -Tabelle der AdventureWorks -Beispieldatenbank ausgeführt.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

Auffüllung basierend auf der Änderungsnachverfolgung

Optional können Sie die Änderungsnachverfolgung verwenden, um nach seiner ursprünglichen vollständigen Auffüllung einen Volltextindex beizubehalten. Die Änderungsnachverfolgung bedeutet einen geringen zusätzlichen Leistungsaufwand, da SQL Server eine Tabelle verwaltet, in der Änderungen der Basistabelle seit der letzten Auffüllung verfolgt werden. Beim Verwenden der Änderungsnachverfolgung verwaltet SQL Server eine Aufzeichnung der Zeilen in der Basistabelle oder indizierten Sicht, die durch Updates, Löschungen oder Einfügungen geändert wurden. Datenänderungen durch WRITETEXT und UPDATETEXT werden im Volltextindex nicht wiedergegeben und bei der Änderungsnachverfolgung nicht ausgewählt.

Hinweis

Für Tabellen, die eine Zeitstempel-Spalte enthalten, können Sie die inkrementelle Auffüllung anstatt der Änderungsnachverfolgung verwenden.

Wenn Sie die Änderungsnachverfolgung während der Indexerstellung aktivieren, führt SQL Server die vollständige Auffüllung des neuen Volltextindexes unmittelbar nach dessen Erstellung aus. Danach werden Änderungen nachverfolgt und an den Volltextindex weitergegeben.

Änderungsnachverfolgung aktivieren

Es gibt zwei Typen der Änderungsnachverfolgung:

  • Automatisch (Option CHANGE_TRACKING AUTO) Die automatische Änderungsnachverfolgung ist das Standardverhalten.
  • Manuell (Option CHANGE_TRACKING MANUAL)

Der Typ der Änderungsnachverfolgung bestimmt, wie der Volltextindex aufgefüllt wird, wie im Folgenden dargestellt:

  • Automatische Auffüllung

    Die Volltext-Engine verwendet standardmäßig die automatische Auffüllung für den Volltextindex oder bei Angabe von CHANGE_TRACKING AUTO. Nachdem die ursprüngliche vollständige Auffüllung abgeschlossen wurde, werden Änderungen nachverfolgt und automatisch weitergegeben, wenn Daten in der Basistabelle geändert werden. Der Volltextindex wird im Hintergrund aktualisiert. Die so weitergegebenen Änderungen werden u. U. jedoch nicht sofort im Index wiedergegeben.

    Starten der Änderungsnachverfolgung mit automatischer Auffüllung

    Beispiel: Umstellen eines Volltextindexes auf die automatische Änderungsnachverfolgung
    Im folgenden Beispiel wird der Volltextindex für die HumanResources.JobCandidate -Tabelle der AdventureWorks -Beispieldatenbank so geändert, dass dieser die automatische Auffüllung mit Änderungsnachverfolgung verwendet.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • Manuelle Auffüllung

    Wenn Sie CHANGE_TRACKING MANUAL angeben, verwendet die Volltext-Engine die manuelle Auffüllung für den Volltextindex. Nachdem die ursprüngliche vollständige Auffüllung abgeschlossen wurde, werden Änderungen nachverfolgt, wenn Daten in der Basistabelle geändert werden. Sie werden jedoch nicht an den Volltextindex weitergegeben, bis Sie eine ALTER FULLTEXT INDEX ... START UPDATE POPULATION-Anweisung ausführen. Sie können den SQL Server-Agent verwenden, um die Transact-SQL-Anweisung in regelmäßigen Abständen aufzurufen.

    So beginnen Sie die Änderungsnachverfolgung mit manueller Auffüllung

    Beispiel: Erstellen eines Volltextindexes mit manueller Änderungsnachverfolgung
    Im folgenden Beispiel wird ein Volltextindex mit Änderungsnachverfolgung und manueller Auffüllung für die HumanResources.JobCandidate -Tabelle der AdventureWorks -Beispieldatenbank erstellt.

    USE AdventureWorks;  
    GO  
    CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);  
    CREATE FULLTEXT CATALOG ft AS DEFAULT;  
    CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)   
       KEY INDEX ui_ukJobCand   
       WITH CHANGE_TRACKING=MANUAL;  
    GO  
    

    Beispiel: Ausführen einer manuellen Auffüllung
    Im folgenden Beispiel wird eine manuelle Auffüllung des Volltextindexes mit Änderungsnachverfolgung für die HumanResources.JobCandidate -Tabelle der AdventureWorks -Beispieldatenbank ausgeführt.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
    GO  
    

Deaktivieren der Änderungsnachverfolgung

Inkrementelle Auffüllung basierend auf einem Zeitstempel

Eine inkrementelle Auffüllung ist ein alternativer Mechanismus zum manuellen Auffüllen eines Volltextindexes. Wenn in einer Tabelle sehr viele Einfügungen stattfinden, ist die inkrementelle Auffüllung ggf. effizienter als die manuelle Auffüllung.

Sie können eine inkrementelle Auffüllung für einen Volltextindex ausführen, für den CHANGE_TRACKING auf den Wert MANUAL oder OFF festgelegt ist.

Voraussetzung für die inkrementelle Auffüllung ist, dass die indizierte Tabelle eine Spalte vom Datentyp timestamp aufweist. Ist keine timestamp -Spalte vorhanden, kann die inkrementelle Auffüllung nicht ausgeführt werden.

SQL Server verwendet die Spalte timestamp, um Zeilen zu identifizieren, die sich seit der letzten Auffüllung geändert haben. Bei der inkrementellen Auffüllung wird der Volltextindex bezüglich der Zeilen aktualisiert, die seit der letzten Auffüllung oder während des letzten Auffüllungsvorgangs hinzugefügt, gelöscht oder geändert wurden. Am Ende einer Auffüllung wird von der Volltext-Engine ein neuer timestamp-Wert aufgezeichnet. Dieser Wert entspricht dem größten in SQL Gatherer gefundenen Zeitstempel-Wert. Der Wert wird verwendet, wenn die nachfolgende inkrementelle Auffüllung gestartet wird.

In einigen Fällen führt die Anforderung für eine inkrementelle Auffüllung zu einer vollständigen Auffüllung.

  • Eine Anforderung für eine inkrementelle Auffüllung für eine Tabelle ohne timestamp -Spalte führt zu einer vollständigen Auffüllung.
  • Wenn es sich bei der ersten Auffüllung eines Volltextindexes um eine inkrementelle Auffüllung handelt, werden alle Zeilen indiziert. Damit entspricht die Auffüllung einer vollständigen Auffüllung.
  • Anforderungen für eine inkrementelle Auffüllung werden als vollständige Auffüllung implementiert, wenn sich Metadaten, die sich auf den Volltextindex für die Tabelle auswirken, seit der letzten Auffüllung geändert haben. Dies umfasst Metadatenänderungen durch Spalten-, Index- oder Volltextindexdefinitionen.

Ausführen einer inkrementellen Auffüllung

Führen Sie mithilfe der START INCREMENTAL POPULATION-Klausel eine ALTER FULLTEXT INDEX-Anweisung aus, um eine inkrementelle Auffüllung auszuführen.

Erstellen oder Ändern eines Zeitplans für die inkrementelle Auffüllung

  1. Erweitern Sie in Management Studio im Objekt-Explorer den Server.

  2. Erweitern Sie Datenbanken, und erweitern Sie dann die Datenbank, die den Volltextindex enthält.

  3. Erweitern Sie Tabellen.

    Klicken Sie mit der rechten Maustaste auf die Tabelle, für die der Volltextindex definiert ist. Wählen Sie Volltextindex, und klicken Sie dann im Kontextmenü Volltextindex auf Eigenschaften. Das Dialogfeld Volltextindexeigenschaften wird geöffnet.

    Wichtig

    Wenn die Basistabelle oder Sicht keine Spalte für den Datentyp Zeitstempel enthält, ist eine inkrementelle Auffüllung nicht möglich.

  4. Wählen Sie im Bereich Seite auswählenZeitpläne aus.

    Verwenden Sie diese Seite, um Zeitpläne für einen SQL Server-Agent-Auftrag zu erstellen oder zu verwalten, der eine inkrementelle Tabellenauffüllung für die Basistabelle oder indizierte Sicht eines Volltextindex beginnt.

    Die folgenden Optionen sind verfügbar:

    • Um einen neuen Zeitplan zu erstellen, klicken Sie auf Neu.

      Das Dialogfeld Neuer Zeitplan für Tabellen-Volltextindizierung wird geöffnet und erlaubt das Erstellen eines neuen Zeitplans. Klicken Sie auf OK, um den Zeitplan zu speichern.

      Wichtig

      Einem neuen Zeitplan wird ein SQL Server-Agent-Auftrag (Start Incremental Table Population on database_name.table_name) zugeordnet, sobald Sie das Dialogfeld Volltextindexeigenschaften schließen. Wenn Sie mehrere Zeitpläne für denselben Volltextindex erstellen, verwenden alle denselben Auftrag.

    • Um einen vorhandenen Zeitplan zu ändern, wählen Sie den vorhandenen Zeitplan aus, und klicken Sie auf Bearbeiten.

      Das Dialogfeld Neuer Zeitplan für Tabellen-Volltextindizierung wird geöffnet und erlaubt das Bearbeiten des Zeitplans.

      Hinweis

      Informationen zum Ändern eines Auftrags des SQL Server-Agents finden Sie unter Ändern eines Auftrags.

    • Um einen vorhandenen Zeitplan zu entfernen, wählen Sie den vorhandenen Zeitplan aus, und klicken Sie auf Löschen.

  5. Wählen Sie OK aus.

Beheben von Fehlern in einer Volltextauffüllung (Durchforstung)

Tritt während eines Durchforstungsvorgangs ein Fehler auf, wird von der Durchforstungsprotokollfunktion der Volltextsuche ein Durchforstungsprotokoll erstellt und gewartet. Dabei handelt es sich um eine Nur-Text-Datei. Jedes Durchforstungsprotokoll gehört zu einem bestimmten Volltextkatalog. Standardmäßig befinden sich Durchforstungsprotokolle für eine bestimmte Instanz (in diesem Beispiel die Standardinstanz) im Ordner %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG.

Das Benennungsschema für Durchforstungsprotokolldateien lautet folgendermaßen:

SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]

Die variablen Teile des Durchforstungsprotokolldatei-Namens sind die folgenden.

  • <DatabaseID> - Die ID einer Datenbank. <dbid> ist eine fünfstellige Zahl mit führenden Nullen.
  • <Volltext-Katalog-ID> - Die ID eines Volltextkatalogs. <catid> ist eine fünfstellige Zahl mit führenden Nullen.
  • <n> - Ist eine ganze Zahl, die angibt, dass mindestens ein Durchforstungsprotokoll desselben Volltextkatalogs vorhanden ist.

SQLFT0000500008.2 ist z.B. die Durchforstungsprotokolldatei für eine Datenbank mit der Datenbank-ID = 5 und der Volltextkatalog-ID = 8. Die 2 am Ende des Dateinamens gibt an, dass zwei Durchforstungsprotokolldateien für dieses Datenbank-Katalog-Paar vorhanden sind.

Weitere Informationen

sys.dm_fts_index_population (Transact-SQL)
Erste Schritte mit der Volltextsuche
Erstellen und Verwalten von Volltextindizes
CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)