Leistungsoptimierung (Volltextsuche)

Aktualisiert: 14. April 2006

Die Leistung für Volltextindizes und Volltextabfragen werden von den Hardwareressourcen beeinflusst, wie Speicher, Datenträgergeschwindigkeit und CPU-Geschwindigkeit.

Leistung der Volltextindizierung

Der Hauptgrund für das Reduzieren der Leistung von Volltextindizes sind Einschränkungen bei den Hardwareressourcen:

  • Wenn die CPU-Nutzung des MSFTESQL-Diensts und von SQL Server fast 100 % beträgt, dann ist die CPU der Engpass.
  • Wenn die durchschnittliche Warteschlangenlänge des Datenträgers zweimal so groß wie die Anzahl von Leseköpfen ist, dann besteht ein Engpass auf dem Datenträger. Die erste Problemumgehung ist das Erstellen von Volltextkatalogen, die getrennt von den SQL Server-Datenbankendateien und -protokollen sind. Platzieren Sie Protokolle, die Datenbankdateien und Volltextkataloge auf getrennten Datenträgern. Kaufen Sie schnellere Datenträger und verwenden Sie RAID, um die Indexleistung zu verbessern.
  • Wenn zu wenig physikalischer Speicher (3-GB-Limit) vorhanden ist und die Meldung, dass der Dienst angehalten wurde, im Crawlprotokoll angezeigt wird, ist der Speicher der Engpass. Weitere Informationen zum Lösen dieses Problems finden Sie unter Angehaltener Dienst Microsoft Volltextmodul für SQL Server (MSFTESQL). Der MSFTESQL-Dienst unterstützt AWE nicht. Das Hinzufügen von mehr als 4 GB Speicher ist die einzige Hilfe bei SQL Server.

Wenn keine Hardwareengpässe auf dem System festgestellt werden, können Sie das System optimieren, um die Hardwarekapazität zu maximieren. Wenn keine Hardwareengpässe vorhanden sind, hängt die Leistung der Volltextindizierung in Microsoft SQL Server 2005 meistens von Folgendem ab:

  • Wie lange das Erstellen von Volltextbatches durch SQL Server dauert.
  • Wie schnell der MSFTESQL-Dienst diese Batches verarbeiten kann.

Die Interaktion zwischen SQL Server und dem MSFTESQL-Dienst muss optimiert werden, um die optimale Leistung zu erzielen. Wenn von SQL Server mehr Batches erstellt werden, als der MSFTESQL-Dienst verarbeiten kann, wird der Dienst angehalten, und es wird eine entsprechende Meldung über seinen Status im Crawlprotokoll generiert. Weitere Informationen zum Lösen dieses Problems finden Sie unter Angehaltener Dienst Microsoft Volltextmodul für SQL Server (MSFTESQL).

Werden andererseits von SQL Server nicht genügend Volltextbatches erstellt, um den MSFTESQL-Dienst auszulasten, befindet sich der Dienst im Leerlauf. Dieser Status ist nicht optimal. Aber meistens ist es in der Tat der häufigste Grund, warum der Index so langsam ausgeführt wird. Um sicherzustellen, dass der MSFTESQL-Dienst optimal ausgelastet ist, müssen Sie die folgenden Leistungsindikatoren nachverfolgen und anpassen:

  • Leistungsindikator bezüglich in Bearbeitung befindlicher Batches - Filterdämon für das Microsoft Volltextmodul (MSFTELFD)
    Dieser Leistungsindikator sollte der Anzahl der CPUs im System oder dem Doppelten davon entsprechen. Die Werte 0, 1 oder 2 zusammen mit niedrigen Werten für die CPU-Nutzung weisen auf eine schlechte Leistung von SQL Server hin. Bei einem 4-Wege-Computer sollte diese Zahl z. B. zwischen 4 und 8 liegen.
  • Batches in Warteschlange: MSFTESQL-Dienst

Der Wert sollte etwa der zehnfachen Anzahl von Crawlbereichen entsprechen. Um zu bestimmen, wie viele Bereiche diese Indizes in der Tabelle verwenden, führen Sie eine Abfrage von sys.dm_fts_population_ranges aus.

Wenn der Leistungsindikator niedrig ist, dann kann er mit folgenden Möglichkeiten verbessert werden:

  • Stellen Sie sicher, dass die Tabelle einen Multicrawlbereich aufweist. Führen Sie die Abfrage sys.dm_fts_population_ranges aus, um dies zu überprüfen. Idealerweise sollte der Crawlbereich zweimal so groß wie die Anzahl der CPUs sein. Der Crawlbereich ist durch die Anzahl von Zeilen in der Tabelle, durch die Anzahl von CPUs und durch die Konfigurationsoption max full-text crawl range begrenzt. Damit diese Option wirksam wird, müssen Sie den Crawl-Vorgang erneut starten.
    ms142560.note(de-de,SQL.90).gifHinweis:
    Dies gilt nur für den vollständigen Crawlvorgang.
  • Stellen Sie sicher, dass die Basistabelle einen gruppierten Index besitzt. Verwenden Sie einen ganzzahligen Datentyp für die erste Spalte des gruppierten Indizes. Vermeiden Sie das Verwenden von GUIDs in der ersten Spalte des gruppierten Indizes. Ein Multicrawlbereich auf dem gruppierten Index kann die höchste Crawl-Geschwindigkeit erzeugen.
  • Aktualisieren Sie die Statistiken der Basistabelle mithilfe der UPDATE STATISTICS-Anweisung. Wichtiger ist das Aktualisieren der Statistik auf dem gruppierten Index oder der Volltextsuche für einen vollständigen Crawl. Dadurch erzeugt ein Multicrawlbereich gute Partitionen in der Tabelle.
  • Erstellen Sie einen zweiten Index in einer Timestamp-Spalte, wenn Sie die Leistung der inkrementellen Auffüllung verbessern möchten.
ms142560.note(de-de,SQL.90).gifHinweis:
Im Gegensatz zum vollständigen Crawl eignen sich inkrementelle, manuelle und automatische Änderungsnachverfolgung der Auffüllung nicht zum Maximieren von Hardwareressourcen, um schnellere Geschwindigkeiten zu erzielen. Deshalb können diese Optimierungsvorschläge nicht die Leistung für Volltextindizes verbessern.

Empfehlungen zum Erhöhen der Leistung der Volltextabfrage

Die folgenden Empfehlungen sollen Ihnen dabei helfen, die Leistung der Volltextabfrage zu erhöhen.

  • Defragmentieren Sie den Index der Basistabelle mithilfe von ALTER INDEX REORGANIZE.
  • Organisieren Sie den Volltextkatalog mithilfe von ALTER FULLTEXT CATALOG REORGANIZE neu. Stellen Sie sicher, dass dies vor dem Leistungstest erfolgt, da das Ausführen dieser Anweisung zu einer Masterzusammenführung der Volltextindizes im Katalog führt.
  • Beschränken Sie die Auswahl von Volltextschlüsselspalten auf eine kleine Spalte. Auch wenn eine Spalte von 900 Bytes unterstützt wird, sollten Sie keinen Volltextindex erstellen, der eine Schlüsselspalte dieser Größe verwendet.
  • Fassen Sie mehrere CONTAINS-Prädikate zu einem CONTAINS-Prädikat zusammen. Sie können in SQL Server eine Liste von Spalten in der CONTAINS-Abfrage angeben.
  • Verwenden Sie CONTAINSTABLE oder FREETEXTTABLE statt CONTAINS bzw. FREETEXT, wenn Sie nur Volltextschlüssel- oder Ranginformationen benötigen.
  • Verwenden Sie die TOP_N_BY_RANK-Option der FREETEXTTABLE- und CONTAINSTABLE-Syntax, um die Ergebnisse einzuschränken und die Leistung zu erhöhen. Verwenden Sie diese Option, wenn Sie nicht an allen möglichen Treffern interessiert sind.
  • Prüfen Sie den Volltextabfrageplan, um sicherzustellen, dass der entsprechende Verknüpfungsplan ausgewählt ist. Verwenden Sie gegebenenfalls einen Verknüpfungshinweis oder einen Abfragehinweis. Wenn ein Parameter in der Volltextabfrage verwendet wird, bestimmt der erste Wert dieses Parameters den Abfrageplan. Sie können den OPTIMIZE FOR-Abfragehinweis verwenden, um die Abfrage zu zwingen, einen von Ihnen ausgewählten Wert zu kompilieren. Dadurch wird ein deterministischer Abfrageplan und bessere Leistung erzielt.

Siehe auch

Konzepte

Verwalten der Volltextsuche

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

14. April 2006

Geänderter Inhalt:
  • Die Vorschläge zur Leistungsverbesserung wurden erheblich überarbeitet.