문제

우리는 사용하고 싶습니다 ctxsys.context 전문 검색의 색인 유형. 그러나이 유형의 색인이 자동으로 업데이트되지 않는다는 것에 놀랐습니다. 하루에 약 10K 업데이트/인서트/삭제가있는 3 백만 개의 문서가 있습니다.

Oracle 텍스트 색인을 동기화하고 최적화하기위한 권장 사항은 무엇입니까?

도움이 되었습니까?

해결책

이전 답변에 설명 된대로 '모든 동기화'옵션은 Oracle 10G 또는 Newer에서만 사용할 수 있다고 생각합니다. 이전 버전의 Oracle을 사용하는 경우 정기적으로 동기화 작업을 실행해야합니다. 예를 들어, 저장 프로 시저를 작성할 수 있습니다.

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;

그런 다음 dbms_job을 통해 실행할 예정입니다.

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

인덱스 최적화와 관련하여 다음 명령을 사용할 수 있습니다 (DBMS_JOB 또는 CRON을 통해 예약 할 수도 있음) :

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

유사한 기능을 갖춘 CTX_* 패키지도 있습니다.

다른 팁

"자동으로 업데이트되지 않음"은 무엇을 의미합니까?

인덱스는 커밋 또는 주기적으로 동기화 될 수 있습니다.

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

DBA가 인덱스를 주기적으로 동기화하기 위해 권장하는 실시간 검색 정확도가 필요하지 않습니다. 밤새도록 감당할 수 있다면 더 나은 것입니다. 가장 좋은 것은 부하와 문서의 크기에 따라 다릅니다.

이 링크는 아마도 자세한 정보를 제공 할 수 있습니다.

DBA 조언의 경우 ServerFault가 더 좋을까요?

여기에 Oracle 12C 사용자를위한 업데이트로 여기에 올리십시오. 실시간 모드에서 인덱스를 사용하는 경우 항목을 메모리에 유지하고 주기적으로 기본 테이블로 푸시하여 조각화를 낮추고 스트리밍 컨텐츠에서 NRT 검색을 가능하게합니다. 설정 방법은 다음과 같습니다

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

NRT 모드에서 인덱스가 설정됩니다. 꽤 달콤합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top