๐Ÿ‘จโ€๐Ÿ’ป ์ธ๋ฑ์Šค ๊ธฐ๋ณธ ์›๋ฆฌ

 

1. ์ธ๋ฑ์Šค ๊ธฐ๋ณธ ์›๋ฆฌ

1.1 ์ธ๋ฑ์Šค ๊ตฌ์กฐ

์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์ฑ…์—์„œ ์–ด๋–ค ๋‚ด์šฉ์„ ์ฐพ๊ณ  ์‹ถ์„ ๋•Œ ์ฑ… ๋’ค์— ์‹ค๋ฆฐ ์ƒ‰์ธ(๋‹จ์–ด + ํŽ˜์ด์ง€)์„ ์ด์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ ๋กœ ์ฑ…์˜ ๋‚ด์šฉ์„ ์ˆœ์„œ๋Œ€๋กœ ํ‘œ์‹œํ•œ ๋ชฉ์ฐจ์™€ ์ƒ‰์ธ์€ ๋‹ค๋ฅธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

์ฑ…์˜ ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๋Š” ๋‹จ์–ด + ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ์ƒ‰์ธ์ฒ˜๋Ÿผ KEY + ROWID ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
(ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋Š” Free Block์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์ •๋ ฌ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

๐Ÿ”‘ AAAR5KAAFAAAADNAAX
ย ย ย ย Data-ObjFileBlockRow
ย ย ย ย DBA(Data Block Address) Location

SQLP ์ž๊ฒฉ ์‹œํ—˜

ROWID๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๋กœ ํ…Œ์ด๋ธ” ๋ธ”๋ก์— ์ ‘๊ทผํ•˜๋Š” ์ข‹์€ ์ˆ˜๋‹จ์ด ๋ฉ๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

์•„๋ž˜ ํ‘œ๋ฅผ ๋ณด์‹œ๋ฉด ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜๋Š” ๋™์ผํ•˜์ง€๋งŒ ํ‰๊ท  Row ์šฉ๋Ÿ‰ ๋ฐ ํ…Œ์ด๋ธ” ์šฉ๋Ÿ‰, ๋ธ”๋ก ์ˆ˜์—์„œ ๋งŽ์€ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ธ๋ฑ์Šค๋Š” Key + RowID ๋งŒ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ธ”๋ก(8K)์— ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย  ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค(Leaf Node)
๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ 10์–ต๊ฑด 10์–ต๊ฑด
ํ‰๊ท  Row ์šฉ๋Ÿ‰ 1,024 25
ํ…Œ์ด๋ธ” ์šฉ๋Ÿ‰ 1TB 25GB
๋ธ”๋ก ์ˆ˜ 1์–ต 3๋ฐฑ๋งŒ

์ธ๋ฑ์Šค๋Š” B*Tree(Root - Branch - Leaf) ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์–ด ๋น„๊ต์  ์ ์€ ํƒ์ƒ‰(์ˆ˜์ง์  ํƒ์ƒ‰ - ์ˆ˜ํ‰์  ์Šค์บ” - ํ…Œ์ด๋ธ” ๋žœ๋ค ์—‘์„ธ์Šค)์œผ๋กœ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

SQLP ์ž๊ฒฉ ์‹œํ—˜

SQLP ์ž๊ฒฉ ์‹œํ—˜

SQLP ์ž๊ฒฉ ์‹œํ—˜

๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ธ๋ฑ์Šค์—๋Š” ์†์ต๋ถ„๊ธฐ์ (10%)์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
์ฝ์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ผ์ • ์ˆ˜์ค€์„ ๋„˜์–ด์„œ๋Š” ์ˆœ๊ฐ„ ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

(์ง€๊ธˆ์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ณ„์‚ฐํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์•ž์œผ๋กœ ๋ฐฐ์šฐ๊ฒŒ ๋  Clustering Factor๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•จ)

๋ฐ์ดํ„ฐ์˜ ์–‘ Table Full Scan Index Range Scan
์ˆ˜์ง์  ํƒ์ƒ‰ ์ˆ˜ํ‰์  ์Šค์บ” ํ…Œ์ด๋ธ” R.A ํ•ฉ๊ณ„
10 100,000,000 3 1 10 14
100,000,000 100,000,000 3 300,000 100,000,000 100,300,003

โญ๏ธโญ๏ธโญ๏ธ ์ธ๋ฑ์Šค ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ฑฐ๋‚˜ Index Range Scan์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

  • ์ธ๋ฑ์Šค ์„ ๋‘ ์ปฌ๋Ÿผ์˜ ๊ฐ€๊ณต (WHERE SUBSTR(C1, 3) = '930426โ€™)
  • NULL ๊ฒ€์ƒ‰ (WHERE C1 IS NULL, ์ธ๋ฑ์Šค ๊ตฌ์„ฑ ์ปฌ๋Ÿผ ์ค‘ ํ•˜๋‚˜๋ผ๋„ NULL์ด ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  • ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜ (WHERE C1 = 10, C1 ์ปฌ๋Ÿผ์€ CHAR ํƒ€์ž…, ๋‹จ LIKE๋Š” ์ˆซ์ž โ†’ ๋ฌธ์ž)
  • ๋ถ€์ • ๊ฒ€์ƒ‰ (WHERE C1 <> 10)

1.2 ๋‹ค์–‘ํ•œ ์ธ๋ฑ์Šค ์Šค์บ” ๋ฐฉ์‹

SQLP ์ž๊ฒฉ ์‹œํ—˜

  • Index Range Scan

BTree ์ธ๋ฑ์Šค์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ํƒ์ƒ‰ ํ๋ฆ„์ž…๋‹ˆ๋‹ค.
๋ฃจํŠธ์—์„œ ๋ฆฌํ”„๊นŒ์ง€ ์ˆ˜์ง์  ํƒ์ƒ‰์„ ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ฒ”์œ„๊นŒ์ง€ ์ˆ˜ํ‰์  ์Šค์บ”์„ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
ํ•ญ์ƒ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ˆ˜ํ‰์  ์Šค์บ” ๋ฒ”์œ„์™€ Table Random Access๋ฅผ ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Index๋ฅผ Range Scan ํ•˜๋ ค๋ฉด, ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์„ ๋‘ ์ปฌ๋Ÿผ์„ ๊ฐ€๊ณตํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Index Range Scan์„ ์œ ๋„ํ•˜๋Š” ํžŒํŠธ๋Š” ์—†์œผ๋ฉฐ *index ํžŒํŠธ
๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

  • Index Full Scan

Index Full Scan์€ ์ˆ˜์ง์  ํƒ์ƒ‰ ์—†์ด Leaf ๋ธ”๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํƒ์ƒ‰(์ˆ˜ํ‰์  ์Šค์บ”)ํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ฑด์ ˆ์— ์ธ๋ฑ์Šค ๊ตฌ์„ฑ ์ปฌ๋Ÿผ์€ ์žˆ์œผ๋‚˜ ์„ ๋‘ ์ปฌ๋Ÿผ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์˜ตํ‹ฐ๋งˆ์ด์ €์˜ ํŒ๋‹จ์— ๋”ฐ๋ผ Full Scanํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ธ๋ฑ์Šค ์„ ๋‘ ์ปฌ๋Ÿผ์ด ์กฐ๊ฑด์ ˆ์— ์—†๋‹ค๋ฉด Table Full Scan์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ” ์šฉ๋Ÿ‰์ด ์ปค ๋ถ€๋‹ด์ด ํด ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ตœ์ข… ๊ฒฐ๊ณผ ๊ฐ’์ด ์ ์„ ๊ฒฝ์šฐ Index Full Scan์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
์ตœ์ข… ๊ฒฐ๊ณผ ๊ฐ’์ด ๋งŽ์„ ๊ฒฝ์šฐ Table Full Scan์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
Index Full Scan์„ ์œ ๋„ํ•˜๋Š” ํžŒํŠธ๋Š” ์—†์œผ๋ฉฐ index ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

  • Index Unique Scan

Index Unique Scan์€ ์ˆ˜์ง์  ํƒ์ƒ‰์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
Unique ์ธ๋ฑ์Šค๋ฅผ equal(โ€™=โ€™) ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์œ ์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฒ”์œ„ ์กฐ๊ฑด์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ฒ”์œ„ ์กฐ๊ฑด(BETWEEN, >, <, LIKE)์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๊ฒฝ์šฐ Index Range Scan์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Index Unique Scan์„ ์œ ๋„ํ•˜๋Š” ํžŒํŠธ๋Š” ์—†์œผ๋ฉฐ index ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

  • Index Skip Scan

Index Skip Scan์€ ์กฐ๊ฑด์ ˆ์— ๋น ์ง„ ์ธ๋ฑ์Šค ์„ ๋‘ ์ปฌ๋Ÿผ์˜ Distinct๊ฐ€ ๋‚ฎ๊ณ  ํ›„ํ–‰ ์ปฌ๋Ÿผ์˜ Distinct๊ฐ€ ๋†’์„ ๋•Œ ์œ ์šฉํ•œ Scan ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
์ธ๋ฑ์Šค ์„ ํ–‰ ์ปฌ๋Ÿผ์˜ ์กฐํšŒ ์กฐ๊ฑด์ด BETWEEN, LIKE, ๋ถ€๋“ฑํ˜ธ ์ผ ๋•Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Index Skip Scan์€ Leaf ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜๋‹ค๊ฐ€ Skip์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Root๋กœ ๋‹ค์‹œ ์˜ฌ๋ผ๊ฐ€ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ์ • Branch ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€ ์Šค์บ”์ด ํ•„์š”ํ•œ Leaf ๋…ธ๋“œ๊นŒ์ง€ ๋‚ด๋ ค์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— CR(Consistent Mode Block Read)๋กœ ์žกํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
index_ss ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Index Skip Scan์„ ์œ ๋„ํ•˜๋ฉฐ no_index_ss ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

  • Index Fast Full Scan

Index Fast Full Scan์€ Index Full Scan๋ณด๋‹ค ๋น ๋ฅธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
๊ทธ ์ด์œ ๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ ๊ตฌ๋กœ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค ์„ธ๊ทธ๋จผํŠธ ์ „์ฒด๋ฅผ Multi-Block I/O ๋ฐฉ์‹์œผ๋กœ ์Šค์บ”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
db_file_multiblock_read_count ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์ • ๊ฐ’ ๋งŒํผ ํ•œ ๋ฒˆ์— ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค. (extent ํฌ๊ธฐ ์ดˆ๊ณผ โŒ)
๋Œ€๊ฒŒ OS์˜ I/O ๋‹จ์œ„๋Š” 1MB์ž…๋‹ˆ๋‹ค. 8k ๋ธ”๋ก 128๊ฐœ๊ฐ€ ๋ชจ์ด๋ฉด 1MB๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ 128๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
๋ฆฌํ”„ ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์ด ์ธ๋ฑ์Šค ํ‚ค ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ(X)๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฟผ๋ฆฌ์— ์‚ฌ์šฉํ•œ ์ปฌ๋Ÿผ์ด ๋ชจ๋‘ ์ธ๋ฑ์Šค์— ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
index_ffsํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Index Fast Full Scan์„ ์œ ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SQLP ์ž๊ฒฉ ์‹œํ—˜

  • Index Range Scan Descending

SQLP ์ž๊ฒฉ ์‹œํ—˜

์ธ๋ฑ์Šค ์‚ฌ์šฉ์˜ ์ œ์•ฝ์‚ฌํ•ญ

์ถ”ํ›„ ์—…๋ฐ์ดํŠธ

์ธ๋ฑ์Šค ์‚ฌ์šฉ์˜ ์žฅ๋‹จ์ 

์ถ”ํ›„ ์—…๋ฐ์ดํŠธ