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์ด ๊ฑฐ์ ์๋ ๋ฐ์ดํฐ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์
๋๊ธ