Pregunta

Queremos utilizar un tipo de índice ctxsys.context para la búsqueda de texto completo. Pero yo estaba muy sorprendido, que un índice de este tipo no se actualiza automáticamente. Tenemos 3 millones de documentos con unos 10k actualizaciones / inserciones / eliminaciones por día.

¿Cuáles son sus recomendaciones para la sincronización y la optimización de un índice de Oracle Text?

¿Fue útil?

Solución

Creo que la opción 'Sincronizar CADA', tal como se describe en la respuesta anterior sólo está disponible en Oracle 10g o más reciente. Si está utilizando la versión anterior de Oracle que tendría que ejecutar la operación de sincronización periódica. Por ejemplo, puede crear procedimiento almacenado siguiente:

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;

y luego programar que se ejecute a través de DBMS_JOB:

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

En cuanto a la optimización de índice, siguiente comando se puede utilizar (también se pueden programar con DBMS_JOB o a través de cron):

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

También hay CTX_ * paquete con función similar disponible.

Otros consejos

¿Qué quiere decir con "no se actualizan automáticamente"?

El índice se puede sincronizar en cometer o periódicamente.

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

Yo no necesitas precisión de la búsqueda en tiempo real nuestra DBA recomienda sincronizar el índice periódicamente, por ejemplo cada 2 min. Si usted puede permitirse el lujo de hacerlo durante la noche, a continuación, aún mejor. Lo que es mejor depende de su carga y el tamaño del documento.

Estos enlaces probablemente le puede proporcionar más información:

Para obtener asesoramiento DBA, tal vez serverfault es mejor?

Su puesta aquí como una actualización para los usuarios de Oracle 12C. Si se utiliza el índice en tiempo real, a continuación, se mantiene los artículos en la memoria, y periodicially empuja a las tablas principales, lo que mantiene la fragmentación hacia abajo y permite la búsqueda NRT en el contenido de streaming. Aquí es cómo configurarlo

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

Esto configurará el índice en el modo NRT. Es bastante dulce.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top