๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/ADMIN

[ORACLE] Result Cache ์—ญํ•  ๋ฐ ์‹ค์Šต

by ๐ŸŒปโ™š 2020. 7. 5.

Result Cache

Result Cache๋Š” Oracle 11g์—์„œ ์ฒ˜์Œ ์†Œ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Result Cache๋Š” ์‚ฌ์šฉ์ž๋“ค์˜ ๋Œ€๊ธฐ ์ƒํ™ฉ์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ SQL ๋ฌธ์žฅ์„ ์งˆ์˜ ํ–ˆ์„๋•Œ Server Process๊ฐ€ ๊ฐ€์žฅ ๋จผ์ €ํ•˜๋Š” ์ผ์€ Parse ์ž‘์—…์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ์‹คํ–‰๊ณ„ํš์œผ๋กœ Database Buffer Cache์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ•œ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ์ƒ๊ด€์—†์ง€๋งŒ, ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— Database Buffer Cache๋ฅผ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ• ๋•Œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Latch๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ Lock์„ ํ™•๋ณดํ•˜์—ฌ Latch๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž๋งŒ ํ•ด๋‹น Block์— ๋Œ€ํ•œ ์ž‘์—… ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 

 

Result Cache๋Š” ํŠน์ • SQL ์งˆ์˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ’ ๊ทธ ์ž์ฒด๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ Result Cache์—์„œ ๋ฐ”๋กœ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํ™ฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ์ฝ”๋“œํ‘œ์ฒ˜๋Ÿผ DML์ด ์ ์€ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. Result Cache์— Query์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ’ ์ž์ฒด๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ธ๋ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐ”๋€๋‹ค๋ฉด ํšจ์œจ์ด ์˜คํžˆ๋ ค ๋–จ์–ด์ง€๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Result Cache์— ์ €์žฅ ๊ฐ€๋Šฅํ•œ  ๊ฒฝ์šฐ

- ์ผ๋ฐ˜์ ์ธ SQL Query

- ํŠน์ • ์‹œ์ ์— ๋Œ€ํ•œ Flashback Query

- Query ๊ฒฐ๊ณผ๊ฐ€ Read-consistentํ•œ Snapshot

- View ๋˜๋Š” Inline view ํ˜•ํƒœ์˜ Query Block

 

Result Cache์— ์ €์žฅํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ

- Dictionary ๋ฐ Temporary Table์— ๋Œ€ํ•œ SQL Query

- Sequence์˜ Curval/Nextval์— ๋Œ€ํ•œSQL Query

- current_date, current_timestamp, local_timestamp, userenv/sys_context(with non_constant variables)

- sys_guid, sysdate, sys_timestamp ๋“ฑ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ํฌํ•จ๋œ SQL Query ๋ฌธ์žฅ

- Non-deterministic PL/SQL ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” SQL Query ๋ฌธ์žฅ

 

Result Cache Default Sizing

- memory_target ์‚ฌ์šฉ ์‹œ : memory_target * 0.0025(0.25%)

- sga_target ์‚ฌ์šฉ ์‹œ : sga_target * 0.005(0.5%)

- shared_pool_size : shared_pool_size * 0.01(1%)

 

 

show parameter result_cache_max_size;

Result Cache Size๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ ์ž ํ• ๋Š” ๊ฒฝ์šฐ์—๋Š” result_size_max_size ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 0์œผ๋กœ ์ง€์ •์‹œ disable๋˜๊ณ  ์ตœ๋Œ€ ๊ฐ’์€ shared pool์˜ 75%๊นŒ์ง€ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

Result Cache ์‹ค์Šต

Result Cache์— SQL Query์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„ฃ์–ด๋ณด๋Š” ์‹ค์Šต์„ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

show parameter result_cache_mode;

result_cache_max_size ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 0์ด ์•„๋‹Œ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ disable๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ๊ฒƒ์€ ์œ„์—์„œ ํ™•์ธํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ result_cache_mode ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ํ˜„์žฌ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š” ์ €์žฅ ๋ฐฉ์‹์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

result cache_mode์—๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

MANUAL : /*+ result_cache */ ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ

FORCE : ๋ชจ๋“  SQL ์ €์žฅ

 

Result Cache ํ†ต๊ณ„ ํ™•์ธ

SELECT
    ID
    ,NAME
    ,VALUE
FROM V$RESULT_CACHE_STATISTICS;

์—ฌ๊ธฐ์„œ ๋ด์•ผํ•  ํ•ญ๋ชฉ๋“ค์€

Create Count Success : Result Cache์— ์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ์˜ ์ˆ˜

Find Count : Result Cache๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์€ ์ˆ˜

 

๋งŒ์•ฝ ์ด ์ˆ˜์น˜๋“ค์ด 0์ด ์•„๋‹Œ๊ฒฝ์šฐ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ Result Cache, Shared Pool ๊ทธ๋ฆฌ๊ณ  Buffer Cache๋ฅผ ๋ชจ๋‘ Flush ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

SQL> EXECUTE DBMS_RESULT_CACHE.FLUSH;
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;

 

Result Cache SQL๋ฌธ์žฅ ์ €์žฅ

ํ˜„์žฌ MANUAL ๋ชจ๋“œ๋กœ ๋˜์–ด ์žˆ์–ด ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Result Cache์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰๊ณ„ํš์„ ํ™•์ธํ•˜๋ฉด์„œ ๋ณด๊ธฐ ์œ„ํ•ด autotrace๋Š” on์œผ๋กœ ์„ค์ •ํ•˜๊ณ  Queryํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

SET AUTOTRACE ON;
SELECT /*+ RESULT_CACHE */
    DEPTNO
    ,DNAME
FROM SCOTT.DEPT;

์‹คํ–‰๊ณ„ํš์„ ํ™•์ธํ•ด๋ณด๋‹ˆ Result Cache์— ์ €์žฅ๋˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

SELECT
    ID
    ,NAME
    ,VALUE
FROM V$RESULT_CACHE_STATISTICS;

๋‹ค์‹œ Result Cache์˜ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ Hash Chain Length๊ฐ€ ํ•˜๋‚˜ ์˜ค๋ฅด๊ณ  Create Count Success๊ฐ€ 1๋กœ ๋ฐ”๋€Œ์–ด ํ•˜๋‚˜์˜ Result Cache Object๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์•„์ง Find Count๋Š” 0์œผ๋กœ ํ•œ๋ฒˆ๋„ Result Cache์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Result Cache SQL ๋ฌธ์žฅ ์กฐํšŒ

์ด๋ฒˆ์—๋Š” Result Cache์˜ ๋ฌธ์žฅ์„ ์กฐํšŒํ•˜์—ฌ Find Count์˜ ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ์ „์— ํžŒํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ทธ๋ƒฅ ์งˆ์˜ํ–ˆ์„๋•Œ ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

SELECT
    DEPTNO
    ,DNAME
FROM SCOTT.DEPT;

ํžŒํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์กฐํšŒํ–ˆ์„๋•Œ ์ผ๋ฐ˜์ ์ธ Table Full Scan์„ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

SELECT
    ID
    ,NAME
    ,VALUE
FROM V$RESULT_CACHE_STATISTICS;

๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ Result Cache๋ฅผ ํ†ตํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์•„ Find Count๊ฐ€ ์˜ค๋ฅด์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์‹œ ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐํšŒ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

SELECT /*+ RESULT_CACHE */
    DEPTNO
    ,DNAME
FROM SCOTT.DEPT;

SELECT
    ID
    ,NAME
    ,VALUE
FROM V$RESULT_CACHE_STATISTICS;

ํ•œ๋ฒˆ ๋” ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐํšŒ๋ฅผ ํ•ด๋ณด๋‹ˆ Find Count๊ฐ€ ์˜ค๋ฅธ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Force Mode

์ด๋ฒˆ์—๋Š” Force Mode๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ชจ๋“  Query๊ฐ€ Result Cache๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ALTER SESSION SET RESULT_CACHE_MODE=FORCE;
SHOW PARAMETER RESULT_CACHE_MODE;

 

ํžŒํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค์‹œ ์งˆ์˜ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT
    DEPTNO
    ,DNAME
FROM SCOTT.DEPT;

ํžŒํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์งˆ์˜ ํ–ˆ์„ ๋•Œ๋„ Result Cache๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

SELECT
    ID
    ,NAME
    ,VALUE
FROM V$RESULT_CACHE_STATISTICS;

ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ Find Count์˜ ์ˆ˜๊ฐ€ 1์ฆ๊ฐ€ํ•˜์—ฌ 2๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FORCE MODE์—์„œ๋Š” ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  Query๋ฅผ Result Cache์— ๋„ฃ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

SQL> SET AUTOTRACE OFF:
SQL> ALTER SESSION SET RESULT_CACHE_MODE=MANUAL;

 

Result Cache ์ •๋ฆฌ

- 11g New Feature

- Query์˜ ๊ฒฐ๊ณผ๊ฐ’ ์ž์ฒด๋ฅผ ์ €์žฅ

- ์‚ฌ์šฉ์ž๋“ค์ด ๋Œ€๊ธฐํ•˜๋Š” ์ƒํ™ฉ์„ ํ•ด์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ

- DML์ด ๊ฑฐ์˜ ์—†๋Š” ๋ฐ์ดํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ 

 

๋Œ“๊ธ€