2012-02-24 2 views
1

oracle에 테이블에 대한 인덱스가 있는데 사용 중인지 여부와 사용 방법을 알지 못합니다. 해당 인덱스를 사용하는 모든 명령문을 기록하는 방법이 있습니까? 그렇지 않다면 그 색인이 사용되는지 여부를 알 수있는 방법이 있습니까?oracle의 인덱스에서 실행되는 명령문을 기록하는 방법은 무엇입니까?

감사합니다.

+1

궁극적 인 목표는 무엇입니까? 즉, 왜 이것을하고 싶습니까? 어떤 인덱스가 사용되고 어떤 인덱스가 사용되지 않았는지 알아 내려고하고 있습니까? DB에 많은 일이있는 것처럼 질문에 대답하기 위해 정말 불쾌한 일을해야 할 수도 있습니다. 더 쉬운 방법이있을 수도 있습니다. – Ben

+0

궁극적으로 나는 내 테이블에서 특정 인덱스를 제거 할 수 있는지 여부를 알아야합니다. –

답변

2

궁극적 인 목표를 이해하는 것이 분명 도움이 될 것입니다.

당신은 특히 오랫동안 그렇게하지만, SQL 문이 공유 풀에 머물 수 없습니다 시스템에 따라 특정 인덱스

SELECT * 
    FROM gv$sql_plan 
WHERE object_owner = <<owner of object> 
    AND object_name = <<name of index>> 

를 사용하는 공유 풀에 쿼리하는 확인하기 위해 GV$SQL_PLAN 테이블을 조회 할 수 있습니다 당신이 무엇이든 놓치지 않도록 비교적 자주 설문 조사를해야 할 수도 있습니다. Oracle 버전, 에디션 및 라이센스 옵션에 따라 AWR 테이블을 쿼리하여 내역 계획 정보를 얻을 수도 있습니다. 그러나 AWR 스냅 샷에서 캡처 한 것만 큼 값이 비싼 쿼리에 대한 정보 만 제공합니다. 당신이 달성하려고하는 것은 인덱스를 사용하는 여부를 파악하는 경우

SELECT * 
    FROM dba_hist_sql_plan 
WHERE object_owner = <<owner of object> 
    AND object_name = <<name of index>> 

은, 그러나, 당신은 아마 index monitoring 같은 것을 사용하여 인덱스가 사용되는 오라클 트랙을 수 있도록합니다. 그러나이 방법에는 함정이 있다는 것을 알아 두십시오. 예를 들어 효율적인 삭제에 필요한 indexes on foreign keys은 인덱스 모니터링에서 플래그로 사용되지 않을 수도 있고 쿼리 계획을 보는 것만으로는 캐치되지 않을 수도 있습니다. 인덱스 모니터링은 인덱스 자체가 사용되지 않아도 statistics on an index are used이 효율적인 계획을 세우는 경우를 놓칠 수도 있습니다.

+0

궁극적 인 목표가 생산에 영향을주지 않는 색인을 삭제하는 것이라면 그 정보를 제공하는 또 다른 도구가 있습니까? –

+0

@SeanNguyen - 먼저, 특정 명령문이 특정 인덱스를 사용하지 않아도 위험이 없어도 드롭 할 수 있다는 것을 의미하지는 않습니다. 인덱스에 대한 통계 (또는 컬럼이 인덱스되어 있기 때문에 수집 된 컬럼에 대한 통계)가 가능합니다. 잠재적으로 인덱스 모니터링 (내 대답 업데이트)을 사용할 수 있지만 함정이 있습니다. –

+0

내 색인은 공간 색인입니다. 도메인 색인을 모니터 할 수있는 것처럼 보이지 않습니다. 다음은 오류입니다 : SQL 오류 : ORA-29871 : 도메인 색인에 대한 잘못된 alter 옵션 –

관련 문제