Dev/Database

[Oracle] 캐시를 사용하지 않고 실행되게 하는법, Oracle NO CACHE, 캐시 옵션끄기, 캐시 사용안하기

알굼 2024. 6. 4. 14:42
반응형

쿼리를 실행하면 결과가 캐시에 저장되어 다음에 동일한 쿼리가 실행될 때 캐시된 결과를 반환할 수 있다.

이는 반복 실행으로 인해 처음 실행했을 때보다 더 빠른 결과를 제공하므로, 실행시에는 좋지만 항상 동일한 실행환경에서의 쿼리 속도를 측정하여, 쿼리를 튜닝해야하는 경우에는 해당 옵션이 불필요하다.

 

1. 일반 쿼리에서 캐시 사용하지 않기

아래와 같이 힌트를 사용할 경우 캐시를 사용하지 않고 쿼리를 실행할 수 있다.

SELECT /*+ NO CACHE */ column1, column2 FROM table_name;

 

2. 프로시저 실행시 캐시 사용하지 않기

 (1) 프로시저 내부 쿼리에 모두 /*+ NO CACHE */ 힌트를 달아준다.

 (2) 세션 캐시 비활성화

 (3) 관련된 테이블 오프라인으로 만들고 테스트

ALTER TABLESPACE <tablespace_name> OFFLINE;
ALTER TABLESPACE <tablespace_name> ONLINE;

 (4) 매번 프로시저 실행하기 전, CACHE  메모리를 비우기
      실제로는 튜닝 도구로서 CACHE FLUSH 는 하지 않는 것이 좋다.

 

실제 세계에서도 버퍼 캐시에 영향을 받으므로 테스트를 실행하고 결과를 무시한 다음 두세 번 실행하여 결과의 ​​평균을 구하는 것이 중요하다.

쿼리 튜닝의 목표는 " PIO(Physical I/O)를 줄이는 것이 아닌, LIO(Logical I/O)를 줄이는 것" 이다. 
공유 풀과 버퍼 캐시를 플러시하는 것은 인위적이므로, 테이블스페이스를 오프라인으로 두고 다시 온라인으로 만드는 방법이 권장됨 (그러나 이것또한 잘못된 방법이며, 여러번 실행하여 평균치를 구하는 것이 옳다).

 

반응형