[오라클] 함수 쿼리 튜닝 (스칼라 서브 쿼리 캐시, function result cache)

오라클(Oracle) 쿼리문을 작성하다 보면 사용자 정의 함수를 많이 만들어서 사용하게 된다. 함수 사용이 쿼리 속도를 느리게 만드는 원이이 될수도 있기 때문에 사용을 권장하지 않지만, 특정 기능들을 모듈화 할 수 있어서 복잡한 쿼리문을 간결하게 만들고 차후 쿼리문을 수정할 때 아주 큰 도움이 된다.

 

함수 사용시 캐싱 기능을 이용하면 함수 내부의 쿼리를 실행하지 않고 입력값이 동일하면 캐시에 이미 저장된 결과값을 사용할 수 있다.

 

캐싱 기능을 이요하기 위해서는 두가지 방법이 있다.

  • 스칼라 서브쿼리 캐싱효과 이용
  • 함수 결과 캐싱 (function result cache) 이용 (오라클 11g 이상에서 사용가능)

캐싱 기능을 사용시 주의할점

  • 함수의 입력 값 종류가 적을때 효과적이며, 입력 값의 종류가 다양하다면 오히려 성능을 저하할 수 있다

캐싱 기능을 사용하지 않고 실행시 14초 걸림

 

 

스칼라 서브쿼리 캐시

  • 함수가 사용되는 특정 쿼리만 캐싱 기능을 적용할 수 있지만 캐시가 언제 초기화 되는지 명확하지는 않다

스칼라 서브쿼리 캐싱 기능을 사용시 1.8초 걸림

 

 

함수 결과 캐시

  • 오라클 11g 이상의 버전에서 사용가능 하다
  • 해당 함수를 사용하는 모든 쿼리에 적용이 된다
  • 참조 테이블의 변화가 생기면 캐시가 초기화 된다 (참조 테이블이 변화가 적을때 유리)

함수결과 캐싱 기능 사용시 2초 걸림

 

  • 기존 함수의 리턴값 형식 아래에 result_cache 구문을 추가한다
  • result_cash relies_on(참조테이블1, 참조테이블2, ......)

함수 결과 캐싱 기능 설정

 

댓글

Designed by JB FACTORY