Result Cache

2024. 7. 11. 20:48DBMS/ORACLE Admin

반응형

 

11g 이전 버전의 데이터베이스 버퍼 캐시 처리 방식은 서버 프로세스가 요청을 받고 사용자가 SQL 쿼리를 실행하면 해당 요청을 서버 프로세스가 받아 데이터베이스 버퍼 캐시에 자신이 찾는 데이터 블록이 있는지 확인한다. Buffer Cache 는 여러 사용자가 공유하는 메모리 구조이기 때문에, 동시에 여러 사용자가 접근할 수 없기 때문에 래치(Latch)라는 잠금 메커니즘을 사용하여 번에 한 사용자만 래치를 획득하고 다른 사용자들은 대기 상태가 되어 동시 사용자가 많을 경우 성능 저하가 발생할 수 있다.

 

11g 버전에서의 개선 - Result Cache

오라클 11g에서는 이러한 대기 상태를 줄이기 위한 대안으로 Result Cache를 도입했다.
사용자가 SQL 또는 PL/SQL 문장을 실행하면 그 결과 값(즉, SQL 쿼리 결과 자체)을 메모리의 공유 풀(Result Cache)에 저장한다. 이후 동일한 쿼리가 실행되면, 데이터베이스 버퍼 캐시를 통해 데이터를 읽는 대신, Result Cache에서 결과를 가져와 반환한다. Result Cache를 사용하면 동일한 쿼리가 반복 실행될 때마다 데이터베이스 버퍼 캐시를 직접 확인하지 않아도 되므로, 래치 경쟁과 대기 시간을 줄일 수 있다.

   

 

Shared Pool 의 Result cache 기본값
- memory_target 사용 시: memory_target 값의 0.25%
- sga_target 사용 시: sga_target 값의 0.5%
- shared_pool_size 사용 시: shared_pool_size 값의 1%

 

 

Result Cache를 활성화하기 위해  result_cache_mode 파라미터 설정 옵션
1. Manual:
  각각의 SQL 문장마다 /+ result_cache / 힌트를 사용해야만 Result Cache에 저장된다.

     SELECT /+ result_cache / column1, column2 FROM table_name WHERE condition;
   ALTER SYSTEM SET result_cache_mode = MANUAL;


     

2. Force:
   -모든 SQL이 Result Cache의 대상이 된다. 별도의 힌트 없이도 자동으로 Result Cache에 저장된다.
 

   ALTER SYSTEM SET result_cache_mode = FORCE;

 

 

 

 

 

 

 

 

 


.

 

 

할당된 메모리 확인

 

 

 

 

 

 

 

 

 

FLush

 

 

 

 

 


dynamic Memory 로 현재 result cache에 저장되어 있는 데이터가 아무것도 없음 확인

 

 

 

 

Create Count Success 은 현재 Result cache 영역에 생성된 오브젝트가 없으며 Find Count값은 Result cache에 저장된 데이터가 사용된 적이 아직 없었다는 의미이다.

 

 

 

 

 

sql 실행

 

 

 

 

 

Create Count Success 가 1로 변경되었다.

 

 

 

 

동일한 문장 재실행 후  Find Count 가 된다.

반응형

'DBMS > ORACLE Admin' 카테고리의 다른 글

Reserved Pool & Chunk  (0) 2024.07.11
Flashback Database  (0) 2024.07.11
Shared Pool<<Data dictionary cache  (0) 2024.07.10
Oracle Session  (0) 2024.07.10
Library cache  (0) 2024.07.10