Question

Nous voulons utiliser un type d'index de ctxsys.context pour la recherche en texte intégral. Mais j'ai été très surpris, qu'un indice de ce type est pas mis à jour automatiquement. Nous avons 3 millions de documents avec environ 10k mises à jour / insertions / suppressions par jour.

Quelles sont vos recommandations pour la synchronisation et l'optimisation d'un index de texte Oracle?

Était-ce utile?

La solution

Je pense que l'option « SYNC CHAQUE », tel que décrit dans la réponse précédente disponible uniquement dans Oracle 10g ou plus récent. Si vous utilisez une version plus ancienne d'Oracle vous devez exécuter l'opération de synchronisation périodiquement. Par exemple, vous pouvez créer en suivant la procédure stockée:

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;

et planifier puis exécuter via DBMS_JOB:

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

En ce qui concerne l'optimisation des index, la commande suivante peut être utilisée (peut également être prévue avec DBMS_JOB ou via Cron):

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

Il est également CTX_ * paquet avec fonction similaire disponible.

Autres conseils

Que voulez-vous dire par « pas automatiquement mis à jour »?

L'index peut être synchronisé sur la validation ou périodiquement.

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

Je ne vous pas besoin de recherche en temps réel précision notre DBA recommandé de synchroniser l'index périodiquement, chaque dire 2 min. Si vous pouvez vous permettre de le faire du jour au lendemain, puis encore mieux. Quel est le meilleur dépend de votre charge et la taille du document.

Ces liens peuvent probablement vous fournir plus d'informations:

Pour DBA conseils, peut-être serverfault est mieux?

Mettre ce ici comme une mise à jour pour les utilisateurs Oracle 12C. Si vous utilisez l'index en mode temps réel, il conserve des éléments en mémoire, et pousse periodicially aux tables principales, ce qui maintient la fragmentation vers le bas et permet la recherche TRN sur le contenu en streaming. Voici comment le configurer

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)')

va mettre en place l'index en mode TRN. Il est assez doux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top