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

[ORACLE] Library cache ์—ญํ•  ๋ฐ ํ™•์ธ

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

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 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

 

๋Œ“๊ธ€