๐งท 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 ํ๋์ ํต์ฌ
- Sequential ์ก์ธ์ค์ ์ ํ๋๋ฅผ ๋์ธ๋ค.
- ๋ถํ์ํ Full Table Scan์ ์ค์ด๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ก ์ ๋ํ๋ค.
- ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ์ ์ฒด ์ค์บ์ ์ค์ธ๋ค.
- 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 read → Single Block I/O ์์ฒญ ์ ๋ฐ์
- db file scattered read → Multiblock I/O ์์ฒญ ์ ๋ฐ์
์ด๋ฌํ ๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ๋ถ์ํ๋ฉด SQL ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋๋ค.
Reference
'DB > SQLP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLP] 2-2. ์ธ๋ฑ์ค ํ์ฉ (0) | 2025.02.23 |
---|---|
[SQLP] 2-1. ์ธ๋ฑ์ค ๊ตฌ์กฐ (0) | 2025.02.22 |
[SQLP] 1-4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์ ์ต์ ํ (0) | 2025.02.09 |
[SQLP] 1-3. SQL ๊ณต์ ๋ฐ ์ฌ์ฌ์ฉ (0) | 2025.02.09 |
[SQLP] 1-2. SQL ํ์ฑ๊ณผ ์ต์ ํ (0) | 2025.02.09 |