Erstellen eines Textindexes zur Verwendung für eine gespeicherte Prozedur

Um die Suche über eine gespeicherte Prozedur nutzen zu können, müssen Sie bei der Ausführung des Befehls CREATE INDEX Cacheoptionen angeben. Indem alle angegebenen Daten in den Hauptspeicher verschoben werden, wird eine hohe Leistung ermöglicht.

Vor der ersten Indexaktualisierung für die Suche müssen Sie Dokumente in Ihre Tabelle geladen haben, um die Aktualisierung eines Indexes für eine Tabelle ohne Daten zu vermeiden. Damit werden eine bessere Indexierungsleistung und eine solide Einschätzung der Anforderungen des Caches zur Verfügung gestellt.

Die Suche über eine gespeicherte Prozedur ermöglicht Ihnen, vordefinierte Daten schnell abzurufen, die einem Dokument zugeordnet sind. Um dies im Befehl CREATE INDEX zu definieren, verwenden Sie die Option für Cachetabellen. Mit dem Befehl ACTIVATE CACHE werden die angegebenen Daten dann in den Zwischenspeicher verschoben.

Anmerkung

Dieser Textindex kann auch von den skalaren SQL-Suchfunktionen verwendet werden, sofern er nicht für eine Sicht erstellt wird.

In einer verteilten DB2-Umgebung müssen Sie für Verwaltungstabellen auf einem einzelnen Knoten explizit einen Tabellenbereich für die gespeicherte Prozedur angeben und diesen Knoten explizit aufrufen.

Um sicherzustellen, dass Sie eine Verbindung zum korrekten Knoten herstellen, verwenden Sie die Umgebungsvariable DB2NODE.

Beim Erstellen eines Textindexes für die Suche über eine gespeicherte Prozedur müssen Sie folgende Parameter festlegen und berechnen:

Folgende Cachetypen stehen zur Verfügung:

Temporärer Cache
Dieser muss für jeden Befehl DB2TEXT ACTIVATE CACHE neu aufgebaut werden und erfordert ein Laden der Daten aus Ihrer DB2-Tabelle in den Speicher. Dies benötigt insbesondere für große Indizes mehr Zeit als die Aktivierung eines persistenten Caches. Allerdings kann dieses Verfahren möglicherweise für eine etwas bessere Suchleistung sorgen.
Persistenter Cache
Dieser wird auf der Platte behalten und kann bei jedem Befehl DB2TEXT ACTIVATE CACHE über das Betriebssystem rasch dem Speicher zugeordnet werden. In Szenarios mit Indexteilaktualisierungen muss er aktiviert bleiben, um eine Synchronisierung zwischen dem Index und dem Cache zu ermöglichen. Anderenfalls erstellt der nächste Befehl DB2TEXT ACTIVATE CACHE den Cache völlig neu.

Folgende Methoden für die Aktualisierung eines Textindexes sind verfügbar:

Ohne Option RECREATE INDEX ON UPDATE
Vermeiden Sie das Löschen und erneute Einfügen eines Dokuments in die Tabelle, da die Speicherstelle für ein gelöschtes Dokument im Cache nicht wiederverwendet werden kann. Infolgedessen sollte das Ändern von Schlüsselspalten in einem aktivierten Index vermieden werden.

Dies wird auch als Teilaktualisierung bezeichnet.

Mit Option RECREATE INDEX ON UPDATE
Damit wird der Index bei jeder Aktualisierung neu erstellt. Verwenden Sie nach Möglichkeit in den Cachespaltenausdrücken variable-Datentypen. Dadurch wird Cachespeicher gespart. Verwenden Sie entsprechende Umsetzungsausdrücke (CAST) in der Klausel CACHE TABLE.

Verwenden Sie diese Option, wenn Sie erwarten, dass mehr als 50 % Ihrer Dokumente nach der ersten Indexaktivierung eingefügt werden.

Net Search Extender stellt zwei SQL-Funktionen bereit, die Sie bei der Bestimmung der Speicherparameter für den Befehl CREATE INDEX unterstützen: MAXIMUM CACHE SIZE und PCTFREE.

Für Teilaktualisierungen und Aktualisierungen mit Neuerstellung
Die folgende benutzerdefinierte Funktion gibt den empfohlenen Wert für MAXIMUM CACHE SIZE in Megabyte (MB) zurück:
DB2EXT.MAXIMUM_CACHE_SIZE(maximumNumberDocs INTEGER, 
       averageRowLength INTEGER, numberOfCacheColumns INTEGER)
Folgender Befehl gibt den Parameter für die durchschnittliche Zeilenlänge Ihrer Tabelle zurück:
SELECT AVG(LENGTH(cachespalte_1) + ... + LENGTH(cachespalte_n))
Beachten Sie, dass sich dieser Durchschnittswert wesentlich ändern kann, wenn weitere Werte in die Tabelle eingefügt werden. Die Anzahl der Cachespalten bezieht sich auf die Anzahl von Spaltenausdrücken, die Sie in der Klausel CACHE TABLE des Befehls DB2TEXT CREATE INDEX angegeben haben.

Weitere Informationen finden Sie in Anhang B. Nutzen großer Speicherkapazitäten.

Nur für Teilaktualisierungen
Die folgende benutzerdefinierte Funktion gibt den empfohlenen Wert für PCTFREE auf der Grundlage der tatsächlichen und der maximalen Anzahl von Dokumenten zurück.
DB2EXT.PCTFREE(actualNumberDocs INTEGER, maximumNumberDocs INTEGER)
Die tatsächliche Anzahl von Dokumenten ist die Anzahl von Zeilen in Ihrer Tabelle zum Zeitpunkt der erstmaligen Ausführung des Befehls ACTIVATE CACHE, durch die der Speichercache erstellt wird.

Die maximale Anzahl von Dokumenten ist ein Schätzwert für die maximale Anzahl von Dokumenten in Ihrer Tabelle vor der nächsten Ausführung des Befehls DB2TEXT ACTIVATE (für einen temporären Cache) bzw. des Befehls DB2TEXT ACTIVATE CACHE RECREATE (für einen persistenten Cache).

Falls Sie den Index bei jeder Aktualisierung neu erstellen, setzen Sie den Wert PCTFREE auf 0.

Beispiele

Nehmen Sie an, Ihre Tabelle hat 10.000 Zeilen, und Sie erwarten insgesamt maximal 20.000 Zeilen. Verwenden Sie folgenden Aufruf zur Berechnung des benötigten Wertes für 'PCTFREE':

db2  "values DB2EXT.PCTFREE(10000,20000) "

Angenommen, die maximale Zeilenzahl beträgt 20.000, und in Ihrem Cache befinden sich zwei Spalten mit einer durchschnittlichen Größe von 76. Verwenden Sie folgenden Aufruf, um die Größe zurückzugeben:

db2 " values DB2EXT.MAXIMUM_CACHE_SIZE(20000,76,2) "

Nach der Ermittlung der geeigneten Parameterwerte können Sie Ihren Index und die Cachetabelle mit Hilfe des folgenden Aufrufs erstellen:

db2text CREATE INDEX db2ext.comment FOR TEXT ON db2ext.texttab (comment) 
          CACHE TABLE (docid) PCTFREE 10 MAXIMUM CACHE SIZE 5

In diesem Beispiel wird die Spalte docid zusätzlich zu dem Index erstellt, wobei der Hauptspeicher zur raschen Rückgabe einer Ergebnistabelle verwendet wird. Zehn Prozent des Cachespeichers werden für zukünftige Dokumente reserviert. Der Cache wird auf eine Maximalgröße von 5 MB begrenzt.

Aktualisieren des Textindexes

Um diesen Index durchsuchen zu können, müssen Sie den Index aktualisieren und anschließend aktivieren. Dadurch wird der angegebene Tabellencacheausdruck aus der Datenbank in den Speicher kopiert.

Wenn bei der Ausführung der Operation ACTIVATE oder UPDATE der Wert für MAXIMUM CACHE SIZE überschritten wird, werden die folgenden Maßnahmen empfohlen:

Wenn häufige Aktualisierungen von Dokumenten zu erwarten sind, sollten Sie Datentypen mit fester Größe für die Cachespaltenausdrücke in der Klausel CACHE TABLE verwenden. Folgendes Beispiel zeigt, wie Sie für Aktualisierungsoperationen denselben Cachespeicher verwenden können:

CACHE TABLE(cast(C1 as char(20)), cast(substr(C2,1,10) as char(10))....

Stellen Sie in diesem Fall sicher, dass nur die nicht variablen Datentypen verwendet werden.

Aktivieren und Inaktivieren des Caches für einen Textindex

Führen Sie vor der Aktivierung des Caches eventuell anstehende Teilaktualisierungen aus, um eine fehlerhafte Berechnung von PCTFREE zu vermeiden.

Verwenden Sie folgenden Befehl zur Aktivierung des Textindexes:

db2text ACTIVATE CACHE FOR INDEX db2ext.comment FOR TEXT

Dieser Befehl ruft die angegebenen Cachetabellendaten aus der Datenbank ab und speichert sie im Hauptspeicher. Die dafür benötigte Zeit hängt von der Größe der Tabelle ab.

Anmerkung

Wenn Sie den Befehl update index aufrufen, wenn ein Index aktiviert ist, werden dadurch die Cachetabellen ebenfalls aktualisiert. Da gelöschte Dokumente möglicherweise Speicherbereiche im Cachespeicher belegen, müssen Sie sicherstellen, dass für PCTFREE ein ausreichend hoher Wert definiert wird.

Der Aufruf ACTIVATE CACHE muss jedes Mal wiederholt werden, wenn Sie Ihr System gestoppt haben. Bei Verwendung des persistenten Caches wird die erneute Aktivierung schneller durchgeführt.

Anmerkung

Wenn eine Aktualisierung erfolgt, während der persistente Cache nicht aktiviert war, wird dieser gelöscht und beim Aktivierungsaufruf erneut erstellt.

Um Ressourcen zu sparen, sollten Sie außerdem alle Indizes inaktivieren, die derzeit nicht erforderlich sind.

Verwenden Sie den folgenden Aufruf, um zu überprüfen, wie viel Speicherplatz noch verfügbar ist:

db2text control show cache status for database cte index db2ext.comment

Dieser Befehl zeigt an, ob der Index aktiviert wurde und wie viel des von Ihnen angegebenen Cachespeichers übrig ist.