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 Zwischenspeichers zur Verfügung gestellt.
Die Suche über eine gespeicherte Prozedur ermöglicht Ihnen, schnell vordefinierte Daten 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 zu dem 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:
Folgende Methoden für die Aktualisierung eines Textindexes sind verfügbar:
Dies wird auch als Teilaktualisierung bezeichnet.
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.
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.
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) " Nehmen Sie an, die maximale Zeilenzahl ist 20.000, und in Ihrem Cache befinden sich zwei Zeilen 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.
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 oder MAXIMUM NUMBER OF DOCUMENTS überschritten wird, werden die folgenden Maßnahmen empfohlen:
Wenn häufige Aktualisierungen von Dokumenten zu erwarten sind, ziehen Sie die Verwendung von Datentypen mit fester Größe für die Cachespaltenausdrücke in der Klausel CACHE TABLE in Betracht. 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))....
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 Textindex:
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 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. |
Zur Schonung von Ressourcen 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.