Oracle Library Cache
Library Cache๋ Oracle Instance SGA Shared Pool ์์ญ์ ์กด์ฌํ๋ค. ์กด์ฌ์ ๊ถ๊ทน์ ์ธ ๋ชฉํ๋ Oracle์ ์ฑ๋ฅ์ ๋์ฌ์ฃผ๊ธฐ ์ํจ์ด๋ค. ์ฌ์ฉ์๊ฐ SQL ๋ฌธ์ฅ์ ์ง์ ํ์๋ Oracle ๋ด๋ถ์์๋ Parse - Execute - Fetch ๋จ๊ณ๋ฅผ ์งํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ฃผ๋๋ฐ Library Cache์ ์ ์ฅ๋์ด ์๋ ์ ๋ณด์ ๋ฐ๋ผ Parse ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
Library Cache ๋ด๋ถ์๋ ๊ณต์ SQL ์์ญ(Shared SQL Area)๊ณผ ๊ณต์ PL/SQL ์์ญ(Shared PL/SQL Area)์ด ์กด์ฌํ๋๋ฐ, ํ์ค ๊ณผ์ ์ด ์๋ฃ๋๋ฉด ์ฌ์ฉ์๊ฐ ์คํํ SQL ๋ฌธ์ฅ๊ณผ ์คํ๊ณํ์ด ์ ์ฅ๋๋ ๊ณต๊ฐ์ด๋ค. Shared Pool์ ์กด์ฌํ์ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์ ์ํด ์ง์์ ์ผ๋ก ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
Library Cache ์ ์ฅ ๊ณผ์
์ง์ํ ์ฟผ๋ฆฌ๋ฌธ์ฅ์ Parsing ์์ ์ ํตํด์ Library Cache์ ์ ์ฅ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ง์ํ ๋ฌธ์ฅ์ด ํด๋น ์ธ์คํด์ค๋ฅผ ํตํด ํ๋ฒ๋ Oracle์ ์์ฒญ๋์ง ์์๋ค๋ฉด Hard Parse ์์ ์ ์งํํ์ฌ Library Cache์ ์ ์ฅ ํฉ๋๋ค. ๋ง์ฝ ์ด๋ฏธ Library Cache์ ๋ฌธ์ฅ์ด ์ ์ฅ๋์ด ์๋ค๋ฉด Soft Parse๋ฅผ ์งํํ์ฌ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์ Parse ์์ ์ด ํ์ ์์ผ๋ฏ๋ก ์์๋๋ ์์์ ์ต์ํ ์์ผ์ค ์ ์์ด ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋๋ฅผ ๋์ฌ์ค ์ ์์ต๋๋ค.
Hard Parsing์ ํตํด Library Cache์ SQL ๋ฌธ์ฅ๊ณผ ์คํ๊ณํ์ด ์ ์ฅ๋๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
1. ์ฌ์ฉ์ ์ง์
SQL> SELECT DEPTNO, DNAME FROM SCOTT.DEPT;
์์ ๊ฐ์ ์ง์๋ฅผ ์ฌ์ฉ์๊ฐ ํ์ ๋, ๊ฐ์ฅ๋จผ์ Library Cache๋ฅผ ํ์ธํ์ฌ ๋์ผ ํ ๋ฌธ์ฅ๊ณผ ์คํ๊ณํ์ด ์๋์ง ํ์ธํฉ๋๋ค. Hard Parse๋ ํด๋น ๋ฌธ์ฅ์ด Library Cache์ ์์ด Syntax์ Semantic check ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค.
2. Syntax and Semantic check
Syntax์ Semantic check๋ ํด๋น ๋ฌธ์ฅ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ๋จ๊ณ์ ๋๋ค.
Syntax : ์คํ ํน์ ๋ฌธ๋ฒ์ ๋ํ ํ์ธ์ ๋๋ค.
Semantic : SQL ๋ฌธ์ฅ์ ์ ์๋ ํ ์ด๋ธ, ์นผ๋ผ๋ช ์ด ์กด์ฌํ๋์ง ๊ทธ๋ฆฌ๊ณ ์ง์ํ๋ ์ฌ์ฉ์์ ๊ถํ์ ์ถฉ๋ถํ์ง ๋ฑ Data Dictionary๋ฅผ ํ์ธํ์ฌ ์ ๋ณด์ ๋ถ์ผ์น๊ฐ ์๋์ง ํ์ธํ๋ ๋จ๊ณ์ ๋๋ค.
3. ์ฟผ๋ฆฌ ๋ณํ
Oracle ๋ด๋ถ์ ์ผ๋ก SQL๋ฌธ์ฅ์ ๋ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ๋ฌธ์ฅ์ ๋ณํํ๋ ์์ ์ ๋๋ค.
4. ์คํ ๊ณํ ์์ฑ
์ด๋ค ๋ฐฉ์์ผ๋ก ์คํํ ๊ฒ์ธ์ง Optimizer๊ฐ ์คํ๊ณํ์ ์์ฑํฉ๋๋ค.
์ด๋ฌํ ๋จ๊ณ๋ฅผ ํตํด SQL ๋ฌธ์ฅ๊ณผ ์คํ๊ณํ์ ์์ฑํ์ฌ Library Cache์ ์ ์ฅํ์ฌ ์ดํ์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์๊ฒ ๊ณต์ ๋ฉ๋๋ค.
Library Cache ์ ์ฅ ๊ด๋ฆฌ
์ฌ์ฉ์๋ค์ ์ง์๊ฐ parsing ์์ ์ ํตํด ๊ณ์ Library Cache์ ์ ์ฅ๋๋ค ๋ณด๋ฉด ์ด๋์๊ฐ, ํ์ ๋์ด์๋ Library Cache์ ํฌ๊ธฐ๋ฅผ ๋์ด ๋ ๋ง์ ๊ณต๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๊น๋๋ค. ๊ทธ๋์ Oracle์ LRU(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ๋ฌธ์ฅ์ ํ ์์๋ก ๋๊ณ ์์ฃผ ์คํ๋๋ SQL ๋ฌธ์ฅ๋ค๋ง ๋ณด๊ดํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ด๋ฆฌ๊ฐ ๋ฉ๋๋ค.
Library Cache SQL ํ์ธ
SELECT SQL_ID, SQL_TEXT, IS_SHAREABLE FROM V$SQL WHERE SQL_TEXT LIKE '%TESTING%';
V$SQL์ด๋ผ๋ view๋ฅผ ํตํด์ Library Cache์ ์ ์ฅ๋์ด ์๋ SQL ๋ฌธ์ฅ์ ํ์ธํ ์ ์์ต๋๋ค. ์์ ๊ฐ์ด ํ์ฌ ์ง์ํ Query์ ๋ํด์ ์ ์ฅ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. TESTING์ ๊ฒ์ ํธ์๋ฅผ ์ํด์ Query์ ํํธ๋ฅผ ๋ฃ์ด ์์ ํ๊ธฐ ์ํด LIKE ์กฐ๊ฑด์ ๋ฃ์์ต๋๋ค.
SELECT /* TESTING */ DEPTNO, DNAME FROM SCOTT.DEPT;
SCOTT ๊ณ์ ์ DEPT ํ ์ด๋ธ์ ์กฐํํ๋ Query ์ ๋๋ค.
SELECT SQL_ID, SQL_TEXT, IS_SHAREABLE FROM V$SQL WHERE SQL_TEXT LIKE '%TESTING%';
DEPT ํ ์ด๋ธ์ ์กฐํํ Query๊ฐ Library Cache์ ์กด์ฌํ๋์ง ํ์ธํ๊ธฐ ์ํด์ ๋ค์ V$SQL View๋ฅผ ์กฐํํ์ต๋๋ค.
๊ฒฐ๊ณผ๋ก ์์์ ์กฐํํ ๋ด์ฉ์ด ํ์ธ๋ฉ๋๋ค.
Parsing๋์ด Library Cache์ ์ ์ฅ๋๋ Query๋ ๊ณต๋ฐฑ, ๋์๋ฌธ์ ๋ฑ ๋ชจ๋ ํํ๊ฐ ๊ฐ์์ผ Soft Parse๋ฅผ ์งํํฉ๋๋ค. ์ฆ, ํ ์จํ๋ ํ๋ฆฌ์ง ์๊ณ ๋ค์ด์ค๋ ์ง์์ ๋ํ ๋ด์ฉ๋ง Parse ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ด์ฉ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
Oracle Database๊ฐ ์๋น์ค๋๋ Application ๋จ์์ 3 tier ์ด์์ ํํ๋ก ์์คํ ์ด ๊ตฌ์ถ๋์ด ์์ผ๋ฉด ๋์ผํ Query๊ฐ ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ ๊ณต๋ฐฑ์ด๋ ๋๋ฌธ์์ ๋ํ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์์ง๋ง, WHERE์ ์ ์ฐพ๊ณ ์ํ๋ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋ณ๋์ด ์์ ์์๋ ์๋ก์ด ์คํ๊ณํ์ ์์ฑํ๊ณ Hard Parse๋ฅผ ์งํํด์ผํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ BIND๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด Library Cache์ ์ ์ฅ๋ ํ๋์ ์ง์์ ํ๋์ ์คํ๊ณํ์ผ๋ก ์ฌ๋ฌ ์กฐ๊ฑด์ ์ง์๋ฅผ Parsing ์์ ์์ด ์ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
Library Cache ์ ๋ฆฌ
-Library Cache๋ SGA Shared Pool์ ์กด์ฌ
-Hard Parse๋ฅผ ํตํด Library Cache์ SQL ๋ฌธ์ฅ๊ณผ ์คํ๊ณํ์ด ์ ์ฅ
-์ด๋ฏธ Library Cache์ ์ ์ฅ๋์ด ์๋ SQL ๋ฌธ์ฅ์ ์คํํ ๊ฒฝ์ฐ, Parse ์์ ์ ๊ฑฐ์น์ง ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ฌ์ค ์ ์์
-LRU ์๊ณ ๋ฆฌ์ฆ์ ํตํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
๋๊ธ