๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Round and Round
DB/SQLP

[SQLP] 1-5. I/O ๋ฉ”์ปค๋‹ˆ์ฆ˜

by ํ‰๊ธ€ํ‰๊ธ€ 2025. 2. 11.

๐Ÿงท I/O ๋ฉ”์ปค๋‹ˆ์ฆ˜

๐Ÿ–‡๏ธ ๋ธ”๋ก ๋‹จ์œ„ I/O

์˜ค๋ผํด์„ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„์˜ DBMS์—์„œ I/O๋Š” ๋ธ”๋ก(Block) ๋‹จ์œ„๋กœ ์ˆ˜ํ–‰๋œ๋‹ค. ์ด๋Š” ํŠน์ • ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ธ”๋ก ์ „์ฒด๋ฅผ ์ฝ๊ณ  ์จ์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์˜ค๋ผํด์˜ ๊ธฐ๋ณธ ๋ธ”๋ก ํฌ๊ธฐ๋Š” 8KB์ด๋ฉฐ, ๋‹จ 1๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋”๋ผ๋„ ์ตœ์†Œ 8KB๋ฅผ ์ฝ์–ด์•ผ ํ•œ๋‹ค. ์ด ์›์น™์€ ํ…Œ์ด๋ธ”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ๋‘ ๊ฐœ์˜ SQL ๋ฌธ์„ ๋น„๊ตํ•ด ๋ณด์ž.

SELECT COL FROM TBL WHERE NUM > 100;

SELECT * FROM TBL WHERE NUM > 100;

 

๋‘ ์ฟผ๋ฆฌ๊ฐ€ ๋™์ผํ•œ ์‹คํ–‰ ๊ณ„ํš์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” I/O ์ž‘์—…๋Ÿ‰์€ ๋™์ผํ•˜๋‹ค. ํŠน์ • ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜๋งŒ ์ฝ๋”๋ผ๋„ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ธ”๋ก ์ „์ฒด๋ฅผ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹จ, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ ์–‘์€ ์ฐจ์ด๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค.

 

SQL ์„ฑ๋Šฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋Š” ์•ก์„ธ์Šค ํ•˜๋Š” ๋ธ”๋ก ๊ฐœ์ˆ˜์ด๋ฉฐ, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ๊ฒฐ์ •ํ•  ๋•Œ๋„ ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋ธ”๋ก ๋‹จ์œ„ I/O๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ ์šฉ๋œ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ ์บ์‹œ์—์„œ ๋ธ”๋ก์„ ์ฝ๊ณ  ์“ธ ๋•Œ
  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ง์ ‘ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ → Direct Path I/O
  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ DB ๋ฒ„ํผ ์บ์‹œ๋กœ ๋ธ”๋ก์„ ์ ์žฌํ•  ๋•Œ → Single Block Read or Multiblock Read ๋ฐฉ์‹
  • ๋ฒ„ํผ์บ์‹œ์—์„œ ๋ณ€๊ฒฝ๋œ ๋ธ”๋ก์„ ๋‹ค์‹œ ๋ฐ์ดํ„ฐํŒŒ์ผ์— ์ €์žฅํ•  ๋•Œ
    • DBWR ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ธ”๋ก์”ฉ ์ฒ˜๋ฆฌ

์ฆ‰, SQL ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ์€ ๋ถˆํ•„์š”ํ•œ ๋ธ”๋ก ์•ก์„ธ์Šค๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.

 

โœ… Oracle Block Size

 

์˜ค๋ผํด์—์„œ ์ง€์›ํ•˜๋Š” ๋ธ”๋ก ํฌ๊ธฐ๋Š” 2K, 4K, 8K, 16K, 32K, 64K์ด๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ‘œ์ค€ ๋ธ”๋ก ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ๋ธ”๋ก์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค ๋ฐ ๋ฒ„ํผ ํ’€(Buffer Pool)์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

ํ˜„์žฌ ์„ค์ •๋œ ๋ธ”๋ก ํฌ๊ธฐ๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

SHOW PARAMETER BLOCK_SIZE; -- 1๋ฒˆ ๋ฐฉ๋ฒ•

SELECT VALUE-- 2๋ฒˆ ๋ฐฉ๋ฒ•
FROM V$PARAMTER
WHERE NAME = 'db_block_size';

 

๐Ÿ–‡๏ธ Sequential VS Random ์•ก์„ธ์Šค

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ธ”๋ก ๋‹จ์œ„ I/O๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๋ธ”๋ก์„ ์ฝ๋Š” ๋ฐฉ์‹์—๋Š” Sequential ์•ก์„ธ์Šค์™€ Random ์•ก์„ธ์Šค๊ฐ€ ์žˆ๋‹ค.

์•ก์„ธ์Šค ๋ฐฉ์‹

1. Sequential ์•ก์„ธ์Šค

Sequential ์•ก์„ธ์Šค๋Š” ๋ ˆ์ฝ”๋“œ ๊ฐ„ ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ์—ฐ์†๋œ ๋ธ”๋ก์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์บ”ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

(1) ์ธ๋ฑ์Šค ๋ธ”๋ก์—์„œ์˜ Sequential ์•ก์„ธ์Šค

์˜ค๋ผํด์˜ ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋ธ”๋ก(Leaf Block)์— ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ๋Š” ์ฃผ์†Œ ๊ฐ’์„ ๋”ฐ๋ผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ธ”๋ก์„ ์ฝ๋Š”๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ 5๋ฒˆ ๋ฐฉ์‹์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค. ์˜ค๋ผํด ๋‚ด๋ถ€์ ์œผ๋กœ ์ธ๋ฑ์Šค Prefetch ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•œ๋‹ค.

 

โž” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ: Index Range Scan

(2) ํ…Œ์ด๋ธ” ๋ธ”๋ก์—์„œ์˜ Sequential ์•ก์„ธ์Šค

ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋Š” ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ํฌ์ธํ„ฐ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์ ์ธ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ€ ์—†๋‹ค. ๋Œ€์‹ , ์˜ค๋ผํด์€ ์ต์Šคํ…ํŠธ(Extent) ์ •๋ณด๋ฅผ ์„ธ๊ทธ๋จผํŠธ ํ—ค๋”์—์„œ ๋งต(Map)์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†๋œ ๋ธ”๋ก์„ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์–ด ๋‚˜๊ฐ„๋‹ค. ์˜ค๋ผํด์€ Multiblock I/O ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์ฝ๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•œ๋‹ค.

 

โž” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ: Full Table Scan

2. ๋žœ๋ค(Random) ์•ก์„ธ์Šค

Random ์•ก์„ธ์Šค๋Š” ๋ ˆ์ฝ”๋“œ ๊ฐ„ ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ , ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ•œ ๋ธ”๋ก์”ฉ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ 5๋ฒˆ์„ ์ œ์™ธํ•œ ๋ฐฉ์‹์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค. ์˜ค๋ผํด์€ ๋ฒ„ํผ Pinning(Buffer Pinning)๊ณผ ํ…Œ์ด๋ธ” Prefetch ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ Random ์•ก์„ธ์Šค ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•œ๋‹ค.

 

โž” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ: Index Unique Scan, Index Range Scan ํ›„ Table Access by ROWID

3. I/O ํŠœ๋‹์˜ ํ•ต์‹ฌ

I/O ํŠœ๋‹์—์„œ๋Š” Sequential ์•ก์„ธ์Šค์™€ Random ์•ก์„ธ์Šค๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

Random ์•ก์„ธ์Šค๋Š” ํŠน์ • ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ•œ ๋ธ”๋ก์”ฉ ๋žœ๋ค ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด, I/O๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, Random ์•ก์„ธ์Šค๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

Sequential ์•ก์„ธ์Šค๊ฐ€ ํ•ญ์ƒ ํšจ์œจ์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๋Š”๋‹ค๊ณ  ํ•ด๋„, ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ ์ค‘ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ์„ ํƒ๋˜๋Š” ๋น„์œจ(์„ ํƒ๋„, Selectivity)์ด ๋‚ฎ๋‹ค๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  1๊ฐœ๋งŒ ์„ ํƒ๋œ๋‹ค๋ฉด, Random ์•ก์„ธ์Šค๋ณด๋‹ค ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค. ์ฆ‰, Sequential ์•ก์„ธ์Šค์˜ ํšจ์œจ์„ฑ์€ ์„ ํƒ๋„(Selectivity)์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.

 

โœ”๏ธ I/O ํŠœ๋‹์˜ ํ•ต์‹ฌ

  1. Sequential ์•ก์„ธ์Šค์˜ ์„ ํƒ๋„๋ฅผ ๋†’์ธ๋‹ค.
    • ๋ถˆํ•„์š”ํ•œ Full Table Scan์„ ์ค„์ด๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋„๋ก ์œ ๋„ํ•œ๋‹ค.
    • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ „์ฒด ์Šค์บ”์„ ์ค„์ธ๋‹ค.
  2. Random ์•ก์„ธ์Šค ๋ฐœ์ƒ๋Ÿ‰์„ ์ค„์ธ๋‹ค. : ์ธ๋ฑ์Šค๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ Random ์•ก์„ธ์Šค๋ฅผ ์ค„์ธ๋‹ค.

 

๐Ÿ–‡๏ธ Memory VS Disk I/O

1. I/O ํšจ์œจํ™” ํŠœ๋‹์˜ ์ค‘์š”์„ฑ

โ‘  Disk I/O์˜ ๋น„ํšจ์œจ์„ฑ

 

๋””์Šคํฌ๋ฅผ ํ†ตํ•œ ์ž…์ถœ๋ ฅ(I/O)์€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์•ก์„ธ์Šค ์•”(Arm)์ด ์›€์ง์—ฌ ํ—ค๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ๋ฐ˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” I/O๋Š” ์ „๊ธฐ์  ์‹ ํ˜ธ๋ฅผ ์ด์šฉํ•œ ์ž‘์—…์ด๋ฏ€๋กœ ๋””์Šคํฌ I/O์— ๋น„ํ•ด ์••๋„์ ์œผ๋กœ ๋น ๋ฅด๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ชจ๋“  DBMS๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ๋จผ์ € ๋ฒ„ํผ ์บ์‹œ(Buffer Cache)๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„, ์บ์‹œ์— ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

โ‘ก ๋ฐ์ดํ„ฐ ์บ์‹ฑ์˜ ํ•„์š”์„ฑ

 

SQL์„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ง€์†์ ์œผ๋กœ ์ฝ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋ก์„ ๋งค๋ฒˆ ๋””์Šคํฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฉฐ SQL ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ DBMS๋Š” ๋ฐ์ดํ„ฐ ์บ์‹ฑ(Caching) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ, ํ•œ ๋ฒˆ ๋””์Šคํฌ์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐ˜๋ณต์ ์ธ I/O ํ˜ธ์ถœ์„ ์ค„์ธ๋‹ค.

 

โ‘ข ์œ ํ•œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ž์›

 

์ด๋ก ์ ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ์ธ๋ฑ์Šค ๋ธ”๋ก์„ DB ๋ฒ„ํผ ์บ์‹œ์— ์˜ฌ๋ ค๋†“๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๊ทน๋Œ€ํ™”๋˜๊ฒ ์ง€๋งŒ, ๋น„์šฉ๊ณผ ๊ธฐ์ˆ ์  ํ•œ๊ณ„๋กœ ์ธํ•ด ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ œํ•œ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด LRU(Least Recently Used) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜์—ฌ ์ž์ฃผ ์•ก์„ธ์Šค๋˜๋Š” ๋ธ”๋ก์ด ์บ์‹œ์— ๋” ์˜ค๋ž˜ ์œ ์ง€๋˜๋„๋ก ํ•œ๋‹ค.

 

โžž ๊ฒฐ๊ตญ, ๋””์Šคํฌ I/O๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์ฒ˜๋ฆฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋ฒ„ํผ ์บ์‹œ์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋…ผ๋ฆฌ์  VS ๋ฌผ๋ฆฌ์  I/O

(1) ๋…ผ๋ฆฌ์  I/0

๋…ผ๋ฆฌ์  I/O 
    = SQL ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์— ๋ฐœ์ƒํ•œ ์ด ๋ธ”๋ก I/O
    = ๋ฉ”๋ชจ๋ฆฌ I/O + Direct Path I/O (๋ฒ„ํผ ์บ์‹œ๋ฅผ ๊ฒฝ์œ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํฌํ•จ)

 

Direct Path Read ๋ฐฉ์‹์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ๋ธ”๋ก I/O๋Š” ๋ฒ„ํผ ์บ์‹œ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ฆ‰, ์ฝ๊ณ ์ž ํ•˜๋Š” ๋ธ”๋ก์„ ๋จผ์ € ๋ฒ„ํผ ์บ์‹œ์—์„œ ์ฐพ์•„๋ณด๊ณ  ์—†์„ ๋•Œ ๋””์Šคํฌ๋กœ ์ฝ์–ด ๋“ค์ด๋ฉฐ, ์ด๋•Œ๋„ ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ๊ณง๋ฐ”๋กœ ์ฝ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋จผ์ € ๋ฒ„ํผ ์บ์‹œ์— ์ ์žฌํ•œ ํ›„ ์ฝ๋Š”๋‹ค.

 

๋”ฐ๋ผ์„œ, SQL์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ์ฝ์€ ์ด ๋ธ”๋ก I/O์˜ ๊ฐœ์ˆ˜ ๊ฐ€ ๋…ผ๋ฆฌ์  I/O ์— ํ•ด๋‹นํ•œ๋‹ค. ๋…ผ๋ฆฌ์  I/O๋Š” ๊ฐœ๋…์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ I/O ์™€ ๋‹ค๋ฅด์ง€๋งŒ, ์‹ค์ œ ์ˆ˜์น˜๋Š” ๋™์ผํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค.

(2) ๋ฌผ๋ฆฌ์  I/0

๋ฌผ๋ฆฌ์  I/O 
    = ๋””์Šคํฌ ์ƒ์—์„œ ๋ฐœ์ƒํ•œ ์ด ๋ธ”๋ก I/O
    = ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๋ฒ„ํผ ์บ์‹œ์—์„œ ์ฐพ์ง€ ๋ชปํ•œ ์ผ๋ถ€ ๋…ผ๋ฆฌ์  I/O
    = ๋””์ŠคํŠธ I/O

 

DB ๋ฒ„ํผ ์บ์‹œ์—์„œ ๋ธ”๋ก์„ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ๋””์Šคํฌ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ธ”๋ก I/O๊ฐ€ ๋ฌผ๋ฆฌ์  I/O์ด๋‹ค.

 

SQL์„ ์‹คํ–‰ํ•  ๋•Œ ๋…ผ๋ฆฌ์  I/O์˜ ์ด๋Ÿ‰์€ ๋™์ผํ•˜์ง€๋งŒ, ๋ฌผ๋ฆฌ์  I/O์˜ ๊ฐ’์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋™์ผํ•œ SQL์„ ๋ฐ˜๋ณต ์‹คํ–‰ํ• ์ˆ˜๋ก DB ๋ฒ„ํผ ์บ์‹œ์— ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๋ธ”๋ก์ด ์ ์  ๋” ๋งŽ์ด ์ ์žฌ๋˜๋ฏ€๋กœ, ๋””์Šคํฌ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ํ•„์š”๊ฐ€ ์ค„์–ด๋“ค์–ด ๋ฌผ๋ฆฌ์  I/O๊ฐ€ ๊ฐ์†Œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3. ๋ฒ„ํผ์บ์‹œ ํžˆํŠธ์œจ(Buffer Cache Hit Ratio)

๋ฒ„ํผ ์บ์‹œ ํžˆํŠธ์œจ(BCHR) ์€ ๋ฒ„ํผ ์บ์‹œ์˜ ํšจ์œจ์„ฑ์„ ์ธก์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์ง€ํ‘œ๋กœ, ์ „์ฒด ์ฝ์€ ๋ธ”๋ก ์ค‘ ๋””์Šคํฌ I/O ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ์ฐพ์€ ๋ธ”๋ก์˜ ๋น„์œจ์„ ์˜๋ฏธํ•œ๋‹ค.

 

BCHR์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ณต์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

BCHR 
    = (์บ์‹œ์—์„œ ๊ณง๋ฐ”๋กœ ์ฐพ์€ ๋ธ”๋ก ์ˆ˜ / ์ด ์ฝ์€ ๋ธ”๋ก ์ˆ˜) X 100
    = ( (๋…ผ๋ฆฌ์  I/O - ๋ฌผ๋ฆฌ์  I/O) / ๋…ผ๋ฆฌ์  I/O) X 100
    = (1 - ๋ฌผ๋ฆฌ์  I/O / ๋…ผ๋ฆฌ์  I/O) X 100

 

์ด ๊ณต์‹์„ ๋ณด๋ฉด, BCHR์ด ๋†’์„์ˆ˜๋ก ๋””์Šคํฌ I/O ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์€ ๋น„์œจ์ด ๋†’๋‹ค ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

โ‘  ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ SQL ํŠœ๋‹

 

๋…ผ๋ฆฌ์  I/O์˜ ์ด๋Ÿ‰์€ SQL์ด ์‹คํ–‰๋  ๋•Œ ์ผ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, BCHR์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฌผ๋ฆฌ์  I/O๋ฅผ ์ง์ ‘ ์ค„์ด๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค. ๋”ฐ๋ผ์„œ SQL ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋…ผ๋ฆฌ์  I/O ์ž์ฒด๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.

 

๋…ผ๋ฆฌ์  I/O๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ์–ด์•ผ ํ•  ์ด ๋ธ”๋ก ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ ์ด ํ•ต์‹ฌ์ด๋‹ค. SQL ์‹คํ–‰ ์‹œ ๋…ผ๋ฆฌ์  I/O๋Š” ์ผ์ •ํ•˜์ง€๋งŒ, SQL ํŠœ๋‹์„ ํ†ตํ•ด ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

 

์ฆ‰, I/O ํŠœ๋‹์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋Š” ๋…ผ๋ฆฌ์  ๋ธ”๋ก ์š”์ฒญ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์•ผ ํ•  ๋ธ”๋ก ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.

 

โ‘ก BCHR์˜ ํ•œ๊ณ„์ 

 

BCHR์€ ์ค‘์š”ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ์ด์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

  • ๊ฐ™์€ ๋ธ”๋ก์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์•ก์„ธ์Šค ํ•˜๋Š” ๊ฒฝ์šฐ
    • ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ™์€ ๋ธ”๋ก์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฝ์œผ๋ฉด, ๋…ผ๋ฆฌ์  I/O ์š”์ฒญ์ด ๋งŽ์•„๋„ BCHR์ด ๋†’๊ฒŒ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž‘์€ ํ…Œ์ด๋ธ”์„ ๋งค์šฐ ์ž์ฃผ ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋ธ”๋ก์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฆ‰์‹œ ๊ฒ€์ƒ‰ ๋˜๋ฏ€๋กœ BCHR์€ ๋†’์•„์ง„๋‹ค.
    • ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ธ”๋ก์„ ์ฐพ๋Š” ๊ณผ์ •์—์„œ ๋ž˜์น˜(Latch) ํš๋“ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ, ์˜ˆ์ƒ๋ณด๋‹ค ๋†’์€ ์„ฑ๋Šฅ ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ž˜์น˜ ๊ฒฝํ•ฉ ๋ฐ ๋ฒ„ํผ Lock ๊ฒฝํ•ฉ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ
    • ๊ฐ™์€ ๋ธ”๋ก์„ ์—ฌ๋Ÿฌ ์„ธ์…˜์ด ๋™์‹œ์— ์•ก์„ธ์Šค ํ•˜๋ฉด, ๋ž˜์น˜ ๊ฒฝํ•ฉ๊ณผ ๋ฒ„ํผ Lock ๊ฒฝํ•ฉ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ I/O ๋น„์šฉ์ด ์˜คํžˆ๋ ค ๋””์Šคํฌ I/O๋ณด๋‹ค ๋” ์ปค์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ BCHR์ด 100%๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ฝ์–ด์•ผ ํ•  ๋ธ”๋ก์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด SQL ํŠœ๋‹์„ ํ†ตํ•ด ๋…ผ๋ฆฌ์  I/O ์ž์ฒด๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค.

4. ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ ์บ์‹œ๊ฐ€ I/O ํšจ์œจ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

  • I/O ์„ฑ๋Šฅ์€ ๋ฉ”๋ชจ๋ฆฌ I/O, ๋””์Šคํฌ I/O ๋ฐœ์ƒ๋Ÿ‰๋ฟ ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ ์†๋„์—๋„ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.
  • NAS, SAN์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์ด ์ผ๋ฐ˜ํ™”๋˜๋ฉด์„œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๋ณ€์ˆ˜๋กœ ์ž‘์šฉํ•œ๋‹ค.
  • ์˜ค๋ผํด์€ CPU, RAM, ๋””์Šคํฌ๋ฅผ ์ผ์ฒดํ˜•์œผ๋กœ ๊ฐœ๋ฐœํ•œ MPP ๋ฐฉ์‹์˜ ์–ดํ”Œ๋ผ์ด์–ธ์Šค ์ œํ’ˆ๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์†๋„๋ฅผ ์ค„์ด๋ ค๊ณ  ํ•œ๋‹ค.
  • RAC ํ™˜๊ฒฝ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ์บ์‹œ ๊ณต์œ ๋กœ ์ธํ•ด ๋„คํŠธ์›Œํฌ ์†๋„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ I/O์—๋„ ์˜ํ–ฅ์„ ์ค€๋‹ค.
  • I/O ์ตœ์ ํ™”์˜ ๊ฐ€์žฅ ํ™•์‹คํ•˜๊ณ  ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ๋…ผ๋ฆฌ์  ๋ธ”๋ก ์š”์ฒญ์„ ์ค„์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿ–‡๏ธ Single Block I/O VS Multiblock I/O

 

๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๋ฒ„ํผ ์บ์‹œ์— ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ, I/O Call์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ๋ฒ„ํผ ์บ์‹œ์— ์ ์žฌํ•˜๋Š” ๋ฐฉ์‹์—๋Š” Single Block I/O์™€ Multiblock I/O๊ฐ€ ์žˆ๋‹ค.

1. Single Block I/O

ํ•œ ๋ฒˆ์˜ I/O Call์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋ธ”๋ก๋งŒ ์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”์„ ์•ก์„ธ์Šค ํ•  ๋•Œ๋Š”, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ๋ฑ์Šค์™€ ํ…Œ์ด๋ธ” ๋ธ”๋ก ๋ชจ๋‘ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

โœ”๏ธ์‚ฌ์šฉ์‚ฌ๋ก€

  • ์ธ๋ฑ์Šค ๋ฃจํŠธ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ์ธ๋ฑ์Šค ๋ฃจํŠธ ๋ธ”๋ก์—์„œ ์–ป์€ ์ฃผ์†Œ ์ •๋ณด๋กœ ๋ธŒ๋žœ์น˜ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ์ธ๋ฑ์Šค ๋ธŒ๋žœ์น˜ ๋ธ”๋ก์—์„œ ์–ป์€ ์ฃผ์†Œ ์ •๋ณด๋กœ ๋ฆฌํ”„ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋ธ”๋ก์—์„œ ์–ป์€ ์ฃผ์†Œ ์ •๋ณด๋กœ ํ…Œ์ด๋ธ” ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ

2. Multiblock I/O

I/O Call์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์ธ์ ‘ํ•œ ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ํ•œ๊บผ๋ฒˆ์— ์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์˜ค๋ผํด ๋ธ”๋ก ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด OS๋Š” ๋ณดํ†ต 1MB ๋‹จ์œ„๋กœ I/O๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. (OS๋งˆ๋‹ค ๋‹ค๋ฆ„)

 

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

 

Multiblock I/O์˜ ํฌ๊ธฐ๋Š” db_file_multiblock_read_count ํŒŒ๋ผ๋ฏธํ„ฐ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ’์ด 16์ด๋ฉด ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 16๊ฐœ ๋ธ”๋ก์„ ๋ฒ„ํผ ์บ์‹œ์— ์ ์žฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์•„๋ฌด๋ฆฌ ๋†’๊ฒŒ ์„ค์ •ํ•˜๋”๋ผ๋„ OS์˜ I/O ๋‹จ์œ„๊ฐ€ 1MB๋ผ๋ฉด ํ•œ ๋ฒˆ์— 1MB๊นŒ์ง€๋งŒ ์ฝ๋Š”๋‹ค.

 

โœ”๏ธ ์žฅ์ 

  • ๋งŽ์€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ ํšจ์œจ์ ์ด๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ” ์ „์ฒด ์Šค์บ”(Full Scan)์— ์œ ๋ฆฌํ•˜๋‹ค.
  • ํ…Œ์ด๋ธ”์ด ํด์ˆ˜๋ก Multiblock I/O ๋‹จ์œ„๋ฅผ ํฌ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค.
    • I/O ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ ํ์—์„œ ์‹คํ–‰ ๋Œ€๊ธฐํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

3. Table Full Scan VS Index Range Scan

(1) Table Full Scan VS Index Range Scan

โ‘  Table Full Scan

  • Sequential ์•ก์„ธ์Šค + Multiblock I/O ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
  • ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ธ”๋ก์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ ์ฝ๋Š” ๋ฐฉ์‹
  • ํ•œ ๋ธ”๋ก์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ์บ์‹œ์— ์—†์œผ๋ฉด ํ•œ ๋ฒˆ์˜ I/O Call๋กœ ์ธ์ ‘ํ•œ ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์ฝ๋Š”๋‹ค.

โ‘ก Index Range Scan

  • Random ์•ก์„ธ์Šค + Single Block I/O ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
  • ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ์–ป์€ ROWID๋ฅผ ์ด์šฉํ•ด ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ์‹
  • ํ•œ ๋ ˆ์ฝ”๋“œ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด 1๋ฒˆ ์ด์ƒ์˜ I/O Call์ด ํ•„์š”

โ‘ข ์„ฑ๋Šฅ ๋น„๊ต

 

Table Full Scan์€ ํ•œ ๋ฒˆ์˜ I/O Call๋กœ ์ธ์ ‘ํ•œ ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์ฝ์„ ์ˆ˜ ์žˆ์–ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์‹œ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค. ์Šคํ† ๋ฆฌ์ง€์˜ ์Šค์บ” ์„ฑ๋Šฅ์ด ์ข‹์•„์งˆ์ˆ˜๋ก SQL ์‹คํ–‰ ์„ฑ๋Šฅ๋„ ์ข‹์•„์ง„๋‹ค. ํ•˜์ง€๋งŒ, ํฐ ํ…Œ์ด๋ธ”์—์„œ ์†Œ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ๋Š” ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

Index Range Scan์„ ํ†ตํ•œ ํ…Œ์ด๋ธ” ์•ก์„ธ์Šค๋Š” ์บ์‹œ์—์„œ ๋ธ”๋ก์„ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด 1๋ฒˆ ์ด์ƒ์˜ I/O Call์„ ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” SQL์€ ์Šคํ† ๋ฆฌ์ง€ ์Šค์บ” ์„ฑ๋Šฅ์ด ์ข‹์•„์ ธ๋„ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ข‹์•„์ง€์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ, ์ฝ์—ˆ๋˜ ๋ธ”๋ก์„ ๋˜ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ์  I/O๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์  I/O์ธก๋ฉด์—์„œ๋„ ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

์ฆ‰, ์†Œ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์—๋Š” Index Range Scan์ด, ์ผ์ •๋Ÿ‰ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์—๋Š” Table Full Scan์ด ์œ ๋ฆฌํ•˜๋‹ค.

 

โœ… 10g๋ถ€ํ„ฐ ๋ฐ”๋€ ์ 

  • 10g๋ถ€ํ„ฐ๋Š” Index Range Scan ๋˜๋Š” Index Full Scan ์‹œ์—๋„ Multiblock I/O ๋ฐฉ์‹์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ…Œ์ด๋ธ” ์•ก์„ธ์Šค ์—†์ด ์ธ๋ฑ์Šค๋งŒ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•  ๋•Œ๊ฐ€ ๊ทธ๋ ‡๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ํ…Œ์ด๋ธ”์„ Random ์•ก์„ธ์Šค ํ•  ๊ฒฝ์šฐ์—๋Š” ์—ฌ์ „ํžˆ Single Block I/O ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

(2) Index Range Scan์ด Single Block I/O ๋ฐฉ์‹์„ ์“ฐ๋Š” ์ด์œ 

๋””์Šคํฌ I/O๋Š” ๋น„์šฉ์ด ํฌ๋ฏ€๋กœ I/O Call์ด ํ•œ ๋ธ”๋ก์”ฉ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์ฝ๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ธ๋ฑ์Šค ์Šค์บ” ์‹œ Single Block I/O ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ธ๋ฑ์Šค ๋ธ”๋ก ๊ฐ„ ๋…ผ๋ฆฌ์  ์ˆœ์„œ๋Š” ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋‹ค๋ฅด๋‹ค.
    • ๋…ผ๋ฆฌ์  ์ˆœ์„œ๋Š” ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋ธ”๋ก๋“ค์ด ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋œ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋œ ํ…Œ์ด๋ธ” ๋ธ”๋ก๊ณผ ๋‹ฌ๋ฆฌ, ์ธ๋ฑ์Šค ๋ธ”๋ก์€ ROWID์— ๋”ฐ๋ผ ๋ถˆ๊ทœ์น™ํ•˜๊ฒŒ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋…ผ๋ฆฌ์  ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด Single Block I/O ๋ฐฉ์‹์ด ๋” ํšจ์œจ์ ์ด๋‹ค.
    • ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ํ•œ๊บผ๋ฒˆ์— ์ฝ์œผ๋ฉด ํ•„์š”ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š์•„ ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Index Full Scan๋„ ๊ฐ™์€ ์›๋ฆฌ๋กœ ๋™์ž‘ํ•œ๋‹ค. ํ•˜์ง€๋งŒ Index Fast Full Scan์˜ ๊ฒฝ์šฐ ๋…ผ๋ฆฌ์  ์ˆœ์„œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋ฌผ๋ฆฌ์  ์ˆœ์„œ๋Œ€๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— Multiblock I/O๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

4. ๋ฒ„ํผ์บ์‹œ ํƒ์ƒ‰ ๋Œ€์ƒ

๋ชจ๋“  ๋ธ”๋ก I/O๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ ์บ์‹œ๋ฅผ ๊ฒฝ์œ ํ•œ๋‹ค. (๋‹จ, Direct Path I/O ์ œ์™ธ)

 

โœ”๏ธ ๋ฒ„ํผ ์บ์‹œ์— ์ ์žฌ๋˜๋Š” I/O ๋Œ€์ƒ

  • ์ธ๋ฑ์Šค ๋ฃจํŠธ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ์ธ๋ฑ์Šค ๋ฃจํŠธ ๋ธ”๋ก์—์„œ ์–ป์€ ์ฃผ์†Œ ์ •๋ณด๋กœ ๋ธŒ๋žœ์น˜ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ์ธ๋ฑ์Šค ๋ธŒ๋žœ์น˜ ๋ธ”๋ก์—์„œ ์–ป์€ ์ฃผ์†Œ ์ •๋ณด๋กœ ๋ฆฌํ”„ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋ธ”๋ก์—์„œ ์–ป์€ ์ฃผ์†Œ ์ •๋ณด๋กœ ํ…Œ์ด๋ธ” ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ
  • ํ…Œ์ด๋ธ” ๋ธ”๋ก์„ Full Scan ํ•  ๋•Œ

Single Block I/O๋กœ ์ฝ์€ ๋ธ”๋ก๋“ค์€ LRU ๋ฆฌ์ŠคํŠธ์˜ MRU(Most Recently Used) ์ชฝ์— ๋ฐฐ์น˜๋˜์–ด ์บ์‹œ์— ์˜ค๋ž˜ ๋‚จ๋Š”๋‹ค. ๋ฐ˜๋ฉด, Multiblock I/O๋กœ ์ฝ์€ ๋ธ”๋ก๋“ค์€ LRU(Least Recently Used) ์ชฝ์— ๋ฐฐ์น˜๋˜์–ด ๊ธˆ๋ฐฉ ์บ์‹œ์—์„œ ๋ฐ€๋ ค ๋‚จ๋Š”๋‹ค.๋”ฐ๋ผ์„œ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ Full Scan ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๋ฒ„ํผ ์บ์‹œ๋ฅผ ๋ชจ๋‘ ์ฐจ์ง€ํ•  ๊ฑฑ์ •์€ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

โœ… LRU ๋ฆฌ์ŠคํŠธ ์ƒ LRU์™€ MRU

  • MRU (Most Recently Used): ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉํ•œ ๋ธ”๋ก์„ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ
  • LRU (Least Recently Used): ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ธ”๋ก์„ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ

5. ์ฃผ์š” ๋Œ€๊ธฐ ์ด๋ฒคํŠธ

์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋””์Šคํฌ์—์„œ ๋ธ”๋ก์„ ์ฝ์„ ๋•Œ๋งˆ๋‹ค I/O ์š”์ฒญ์„ ํ•˜๋ฉฐ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง„๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • db file sequential readSingle Block I/O ์š”์ฒญ ์‹œ ๋ฐœ์ƒ
  • db file scattered readMultiblock I/O ์š”์ฒญ ์‹œ ๋ฐœ์ƒ

์ด๋Ÿฌํ•œ ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ๋ถ„์„ํ•˜๋ฉด SQL ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

 


Reference