Frage

Wir wollen einen ctxsys.context Indextyp für die Volltextsuche verwenden. Aber ich war ziemlich überrascht, dass ein Index dieser Art wird nicht automatisch aktualisiert. Wir haben 3 Millionen Dokumente mit über 10k Updates / Inserts / Löschungen pro Tag.

Was sind Ihre Empfehlungen für die Synchronisierung und Optimierung eines Oracle Text-Index?

War es hilfreich?

Lösung

Ich denke, 'SYNC EVERY' Option, da nur in Oracle 10g oder höher in vorherigen Antwort beschrieben. Wenn Sie ältere Version von Oracle verwenden würden Sie in regelmäßigen Abständen Synchronisationsvorgang ausgeführt haben. Zum Beispiel können Sie folgende gespeicherte Prozedur erstellen:

CREATE OR REPLACE 
Procedure sync_ctx_indexes
IS
 CURSOR sql1 is select distinct(pnd_index_owner||'.'||pnd_index_name) as index_name from ctx_pending;
BEGIN
 FOR rec1 IN sql1 LOOP
 ctx_ddl.sync_index(rec1.index_name);
 END LOOP;
END;

und dann über DBMS_JOB gelegten Zeitplan ausgeführt werden:

DBMS_JOB.SUBMIT(job_id, 'sync_ctx_indexes;', SYSDATE, 'SYSDATE + 1/720');

Wie für die Optimierung des Index kann folgender Befehl verwendet wird (kann auch mit DBMS_JOB oder über cron eingeplant werden):

alter index my_index rebuild online parameters('optimize full maxtime 60');

Es gibt auch CTX_ * Paket mit ähnlicher Funktion zur Verfügung.

Andere Tipps

Was meinst du mit „nicht automatisch aktualisiert“?

Der Index kann synchronisiert werden auf begehen oder in regelmäßigen Abständen.

Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC ( ON COMMIT)')
Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS 'SYNC (EVERY "SYSDATE+1/24")')

ich dich nicht in Echtzeit Suchgenauigkeit benötigen unsere DBA empfohlen, den Index regelmäßig zu synchronisieren, sagen jeweils 2 min. Wenn Sie es sich leisten können über Nacht zu tun, dann noch besser. Was ist das Beste, hängt von Ihrer Last und der Größe des Dokuments.

können diese Links wahrscheinlich Sie bieten mehr Informationen:

Für DBA Beratung, vielleicht serverfault ist besser?

Setzen dieses hier als Update für Oracle 12C Benutzer. Wenn Sie den Index in Echtzeit-Modus verwenden, dann hält es Elemente im Speicher und periodicially zu den wichtigsten Tabellen schiebt, die Fragmentierung hält nach unten und ermöglicht die Suche NRT-Inhalte Streaming. Hier ist, wie es einzurichten

exec ctx_ddl.drop_preference ( 'your_tablespace' );
exec ctx_ddl.create_preference( 'your_tablespace', 'BASIC_STORAGE' );
exec ctx_ddl.set_attribute ( 'your_tablespace', 'STAGE_ITAB', 'true' );
create index  some_text_idx on your_table(text_col)  indextype is ctxsys.context PARAMETERS ('storage your_tablespace sync (on commit)')

Dies wird den Index in NRT-Modus eingestellt. Es ist ziemlich süß.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top