Skip to content

Indexbr #52

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,99 @@ SERIALIZABLE
๊ฐ€์žฅ ๋†’์€ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์œผ๋กœ, Phantom Read ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๊ฒฉ๋ฆฌ์ˆ˜์ค€๋ณด๋‹ค ๋” ๋งŽ์€ Locking(์ž ๊ธˆ)์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ค‘์—์„œ๋„ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” REPEATABLE READ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํŠน์ • ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

------------ till 2023.03.18 -----------------------------

> Duble write buffer
> about undo log
> about change buffer
> about redo log
> adaptive_hash_index
> storage enginge diff

## ์“ฐ๊ธฐ๋ฅผ ๋ณด์žฅํ•˜๋Š” Double Write Buffer

- redo log : ๋ณ€๊ฒฝ๋œ ๊ฒƒ๋งŒ ๊ธฐ๋ก -> ๊ทธ๋Ÿผ ๋ณ€๊ฒฝ(๋”ํ‹ฐํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ๋กœ ํ”Œ๋Ÿฌ์‹œ) ์ค‘์— ์ผ๋ถ€๋Š” ์‹คํŒจํ•˜๋ฉด?
- ์ผ๋ถ€ ์‹คํŒจํ•œ ๋ณ€๊ฒฝ ๋‚ด์—ญ : ํŒŒ์…œํŽ˜์ด์ง€, ํ†ค ํŽ˜์ด์ง€ ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด '๋”๋ธ”๋ผ์ดํŒ…' ๊ธฐ๋Šฅ ์‚ฌ์šฉ
> ๋ฒ„ํผํ’€์˜ ๋”ํ‹ฐํŽ˜์ด์ง€์— a,b,c ๊ธฐ๋ก -> double write ๋ฒ„ํผ์— ๊ธฐ๋ก -> ์„ฑ๊ณตํ•˜๋ฉด dw ๋ฒ„ํผ๋Š” ์‚ญ์ œ, ์‹คํŒจํ•˜๋ฉด ์‚ฌ์šฉ
- innodb_boublewrite
- ์ˆœ์ฐจ ์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” hdd์—์„œ๋Š” ๋ถ€๋‹ด์ด ์—†์ง€๋งŒ ์ˆœ์ฐจ๋‚˜ ๋žœ๋คio๋‚˜ ๋น„์Šทํ•œ sdd ์—์„  ๊ณ ๋ ค ํ•„์š” <-> ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋†’ํž˜
- ์„œ๋ฒ„ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋ฆฌ๋‘๋กœ๊ทธ ๋™๊ธฐํ™”๋ฅผ off ํ–ˆ๋‹ค๋ฉด dw buffer๋„ off ์ถ”์ฒœ -> ๋ฆฌ๋‘๋กœ๊ทธ ๋™๊ธฐํ™”๋„ ์•ˆ์ผœ๊ณ  ์ผœ๋Š”๊ฑด ์˜๋ฏธ ์—†์Œ

## ํŠธ๋ Œ์ ์…˜์„ ์œ„ํ•ด ์–ธ๋‘๋กœ๊ทธ

### ์–ธ๋‘๋กœ๊ทธ๋ž€
- DML ๋ณ€๊ฒฝ ์ „ ์ด์ „ undo ํ•œ ๋ฒ„์ „์„ ์ €์žฅํ•œ ๋กœ๊ทธ
> ํŠธ๋ Œ์ ์…˜ ๋ณด์žฅ : ๋กค๋ฐฑ์‹œ ์‚ฌ์šฉ๋œ๋‹ค!
> ๊ฒฉ๋ฆฌ์ˆ˜์ค€ ๋ณด์žฅ : ๋ณ€๊ฒฝ ์ค‘์ธ ๋ฐ์ดํ„ฐ์— ์กฐํšŒ๊ฐ€ ๊ฑธ๋ฆด๋•Œ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ๋‹ค! (๊ฒฉ๋ฆฌ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)

### ์–ธ๋‘๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง๋ฒ•
> ์–ธ๋‘๋กœ๊ทธ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง„๋‹ค
- 5.5 ์ด์ „ ๋ฒ„์ „์˜ ์–ธ๋‘๋กœ๊ทธ ๊ณต๊ฐ„์€ ์ค„์ง€ ์•Š์•„์„œ 100G ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•ด๋„ ์–ธ๋‘๋กœ๊ทธ์— ๊ทธ ํฌ๊ธฐ์˜ ํ…Œ์ด๋ธ”์ด ๋ณต์ œ๋˜๋Š” ์…ˆ
- ํŠธ๋ Œ์ ์…˜์ด ์—ฌ๋Ÿฌ๊ฐœ ๋™์‹œ ์ผ์–ด๋‚ ๋•Œ ์ฒ˜์Œ์˜ ํŠธ๋ Œ์ ์…˜์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ ์‚ฌ์ด์— ์ปค๋ฐ‹๋œ ํŠธ๋ Œ์ ์…˜๋“ค๋„ ๊ฒฐ๊ตญ ์–ธ๋‘๋กœ๊ทธ๋ฅผ ๋“ค๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
- ๋‹คํ–‰์ด 5.7 ์ดํ›„์—๋Š” ์•Œ์•„์„œ ๊ณต๊ฐ„ ์ •๋ฆฌํ•ด์ค€๋‹ค

```mysql
SHOW ENGINE INNODB STATUS \G
SLELECT count FROM ino~~ --8.0 ๋ฒ„์ „์—์„œ ์“ธ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋กœ ์„œ๋ฒ„๋ณ„๋กœ ์–ธ๋‘๋กœ๊ทธ ๊ฑด์ˆ˜๋ฅผ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
--๋˜ํ•œ u,d ๋ช…๋ น์–ด๋Š” mvcc์™€ ๋ณต๊ตฌ ๋ชจ๋‘์— ์“ฐ์ด์ง€๋งŒ i๋Š” ๋กค๋ฐฑ์—๋งŒ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๋‘๋กœ๊ทธ ๊ฐฏ์ˆ˜์— ์น˜์ง€ ์•Š๋Š”๋‹ค
```

### ์–ธ๋‘๋กœ๊ทธ์˜ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค
- 5.6 ๋ฒ„์ „ ์ด์ „์—” ์–ธ๋‘๋กœ๊ทธ๋Š” ๋ชจ๋‘ ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์ €์žฅ ibdata.ibd
> ๋ฌธ์ œ๋Š” ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์˜ ์–ธ๋‘๋กœ๊ทธ๋Š” mysql ์„œ๋ฒ„ ์ดˆ๊ธฐํ™”๋ ๋•Œ ์ƒ์„ฑ๋˜์„œ ํ™•์žฅ์˜ ํ•œ๊ณ„.
> innodb_undo_tablespaces > 2 ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ณ„๋„์˜ ๋กœ๊ทธ ํŒŒ์ผ ์‚ฌ์šฉ ( 8.0 ๋ถ€ํ„ฐ๋Š” ๊ฐ•์ œ )
- undo tablespace truncate -> ํ•„์š”์—†์–ด์ง„ ์–ธ๋‘๋กœ๊ทธ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค ์šด์˜์ฒด๊ณ„์— ๋ฐ˜๋‚ฉ, 8๋ฒ„์ „๋ถ€ํ„ฐ์ด๋ฉฐ
์ž๋™๋ชจ๋“œ๋Š” undo thread๊ฐ€ undo purge ์ž‘์—…์„ ํ†ตํ•ด ์ปค๋ฐ‹๋˜์–ด ํ•„์š” ์—†์–ด์ง„ ์–ธ๋‘๋กœ๊ทธ ๊ณต๊ฐ„์„ ๋ฐ˜๋‚ฉํ•œ๋‹ค
์ˆ˜๋™๋ชจ๋“œ๋Š” ๋ช…๋ น์–ด๋กœ ํ•œ๋ฒˆ ์–ธ๋‘ํผ์ง€์ž‘์—…์„ ํ•˜๋Š” ์…ˆ. ํ–ˆ์œผ๋ฉด ์žฌ ํ™œ์„ฑํ™” ํ•„์š”.
??์•„๋‹ˆ ์•„๊น ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์ €์žฅ ์•ˆํ•œ๋‹ค๋ฉฐ 8.0๋ถ€ํ„ฐ -> ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋ž‘ ์–ธ๋‘ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด๋Š” ๋‹ค๋ฅธ๋“ฏ

## ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์ฒด์ธ์ง€ ๋ฒ„ํผ

> ๋ ˆ์ฝ”๋“œ ๋ณ€๊ฒฝ์—๋Š” ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ๋„ ํ•„์š” -> ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ์—๋Š” ๋žœ๋คํ•œ ๋””์Šคํฌ ๋ฆฌ๋”ฉ์ด ํ•„์š”ํ•ด ๋น„์šฉ ๋†’์Œ
> ๋ฒ„ํผ ํ’€์— ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์—…๋ฐ์ดํŠธ
> ๋ฒ„ํผ ํ’€์— ์—†๋‹ค๋ฉด ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„(์ฒด์ธ์ง€๋ฒ„ํผ) ์— ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ์—…๋ฐ์ดํŠธ (๋‹จ, ์œ ๋‹ˆํฌ์ธ๋ฑ์Šค๋Š” ์ค‘๋ณต์ฒดํฌ๊ฐ€ ํ•„์š”ํ•ด ๋ถˆ๊ฐ€๋Šฅ)
> ์ฒด์ธ์ง€ ๋ฒ„ํผ์˜ ๋‚ด์—ญ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ(์ฒด์ธ์ง€ ๋ฒ„ํผ ๋จธ์ง€ ์Šค๋ ˆ๋“œ)๊ฐ€ ๋ณ‘ํ•ฉ
> 5.5 ์ด์ „์—” ์ธ์„œํŠธ๋งŒ ์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜์„œ ์ธ์„œํŠธ ๋ฒ„ํผ๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ
> innodb_change_buffering ์— ๋ณ€์ˆ˜์— ๋”ฐ๋ผ, ์ถ”๊ฐ€ ์‚ญ์ œ ์—…๋ฐ์ดํŠธ ์ค‘ ๋ญ˜ ๋ฒ„ํผ๋ง ๊ฑธ๊ฑด์ง€ ์ •ํ•  ์ˆ˜ ์žˆ์Œ
> ์ฒด์ธ์ง€ ๋ฒ„ํผ๋Š” insert, update๊ฐ€ ๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•˜๋ฉด ์‚ฌ์ด์ฆˆ๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋ก  ๋ฒ„ํผํ’€์˜ 25~50%

## ์˜์†์„ฑ ๋“€๋Ÿฌ๋ธ”์„ ์œ„ํ•ด ๋ฆฌ๋‘๋กœ๊ทธ์™€ ๋กœ๊ทธ ๋ฒ„ํผ

> ๋น„์ •์ƒ ์ข…๋ฃŒ๋“ฑ์˜ ์ƒํ™ฉ์—์„œ ๋ฏธ์ฒ˜ ๊ธฐ๋ก๋˜์ง€ ๋ชปํ•œ ์•„์ด๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
> ๋ชจ๋“  DBMS๋Š” ์“ฐ๊ธฐ๋ณด๋‹ค ์ฝ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์–ด, ํŒŒ์ผ ์“ฐ๊ธฐ๋Š” ๋””์Šคํฌ ๋žœ๋ค ์—‘์„ธ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์ด์— ์“ฐ๊ธฐ ๋น„์šฉ์ด ๋‚ฎ์€ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ๋ฆฌ๋‘ ๋กœ๊ทธ๋กœ ๋จผ์ € ๊ธฐ๋กํ•œ๋‹ค.
> ๋ฆฌ๋‘๋กœ๊ทธ๋Š” 1. ์ปค๋ฐ‹๋˜์—ˆ์ง€๋งŒ ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ. 2. ๋กค๋ฐฑ๋˜์—ˆ์ง€๋งŒ ์ด๋ฏธ ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ ๋“ค์„ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค.
> 1.์€ ๋ฆฌ๋‘๋กœ๊ทธ ๋‚ด์—ญ์„ ๊ธฐ๋กํ•˜๋ฉด ๋˜๊ณ , 2๋Š” ๋ฆฌ๋‘๋กœ๊ทธ๋กœ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•˜๊ณ  ์–ธ๋‘๋กœ๊ทธ๋กœ ์›๋ณต์‹œํ‚จ๋‹ค.

```mysql
innodb_flush_log_at_trx_commit = 0 -- `์•ฝ 1์ดˆ์— ํ•œ๋ฒˆ ๋ฆฌ๋‘๋ฅผ ๋””์Šคํฌ๋กœ ๋™๊ธฐํ™” ํ•˜๋Š” ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ตœ๋Œ€ 1์ดˆ๊นŒ์ง€๋Š” ํŠธ๋žœ์ ์…˜์€ ์ปค๋ฐ‹์€ ํ–ˆ์ง€๋งŒ ๋””์Šคํฌ์—๋Š” ์•„์ง ์•ˆ์˜ฌ๋ฆฌ๊ณ  ๋ฆฌ๋‘์—๋งŒ ์žˆ๋‹ค๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜๋ฉด ๋””์Šคํฌ์—๋Š” ์—†์„ ์ˆ˜ ์žˆ๋‹ค. ?? ์•„๋‹ˆ ๋ฆฌ๋‘๋กœ๊ทธ๋‚ด์—ญ๋„ ์‚ฌ๋ผ์ง€๋Š”๊ฒจ?? ์•„๋‹ˆ๋ฉด ๋ฆฌ๋‘๋กœ๊ทธ๊ฐ€ ์žˆ์œผ๋‹ˆ ๋ณต๊ตฌ ๋  ์ˆ˜ ์žˆ๋‚˜?
= 1 --๋งค ์ปค๋ฐ‹๋งˆ๋‹ค ๋ฆฌ๋‘๋Š” ๋””์Šคํฌ๋กœ ์˜ฌ๋ฆฐ๋‹ค. ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง„๋‹ค - ์ด๊ฑด ์–ธ๋‘๋กœ๊ทธ์˜ ๋ฐ์ดํ„ฐ ์•„๋‹Œ๊ฒจ?
= 2 --๋งค ์ปค๋ฐ‹๋งˆ๋‹ค ๋””์Šคํฌ๋กœ ์ ์ง€๋งŒ ๋™๊ธฐํ™”๋Š” 1์ดˆ๋งˆ๋‹ค, ๋”ฐ๋ผ์„œ mysql ์„œ๋ฒ„๋Š” ์ฃฝ๊ณ  ์šด์˜์ฒด์ œ๊ฐ€ ์‚ด์•„์žˆ์œผ๋ฉด ํŠธ๋ Œ์ ์…˜ ๋ฐ์ดํ„ฐ๋Š” ์‚ด์•„์žˆ๋‹ค.?? ๋ญ”๋ง์ด์•ผ ์ด์ง ์ ์—ˆ๋‹ค๋ฉฐ
```

> 8๋ฒ„์ „๋ถ€ํ„ฐ ๋ฆฌ๋‘๋กœ๊ทธ ๋Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ ์žฌ๋“ฑ์—์„œ ์ ์žฌ์‹œ๊ฐ„ ๋‹จ์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
> ๋‹จ ์žฌ ํ™œ์„ฑํ™”๋ฅผ ์•ˆํ•ด์ค€๋‹ค๋ฉด, ๋น„์ •์ƒ ์ข…๋ฃŒ ํ›„์— ์žฌ์‹œ์ž‘ ๋˜๋ฉด ์„œ๋ฒ„๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์‹œ์ ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋น„ํ™œ๋ณด๋‹ค๋Š” ์ผ๋ถ€ ์†์‹ค์ด ์žˆ์–ด๋„ ๋œ๋‹ค๋ฉด ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ 0์ด๋‚˜ 2๋กœ ํ•ด์„œ ์“ฐ์ž

## ๋ฒ„ํผ ํ’€์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค

> ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์— ์‚ฌ์šฉ์ž๊ฐ€ ์„ธํŒ…ํ•ด๋‘” b-tree ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
> ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค๋Š” innodb ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ž๋™ ์ƒ์„ฑํ•œ ์ธ๋ฑ์Šค๋กœ, ๋„๊ณ  ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
> b-tree๋Š” ๋น ๋ฅด๋‹ค ๋ถˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ๋ถ€์กฑ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์— ๋งž๊ฒŒ ์ž์ฃผ ์ฝํžˆ๋Š” ๋ฐ์ด์ดํ„ฐ ํŽ˜์ด์ง€ ํ‚ค ๊ฐ’์œผ๋กœ ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ฆ‰์‹œ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ์‹์„ ๊ฐ€์ง„๋‹ค. -> ๋ฆฌํ”„๋…ธ๋“œ๊นŒ์ง€ ์ฐพ์•„๊ฐ€์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ฐพ์•„๊ฐ€๋Š”! -> ๋‚ด๋ถ€์ž ๊ธˆ(์„ธ๋งˆํฌ์–ด) ๊ฒฝํ•ฉ๋„ ํš๊ธฐ์ ์œผ๋กœ ์ค€๋‹ค!
> b-tree ์ธ๋ฑ์Šค ๊ณ ์œ  ๋ฒˆํ˜ธ์™€ ์‹ค์ œ ํ‚ค๊ฐ’์˜ ์กฐํ•ฉ
> 8.0๋ถ€ํ„ฐ๋Š” ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค์˜ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋Šฅ ์ œ๊ณต
> ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์ด๋“ :
1. ๋””์Šคํฌ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์ง€ ์•Š์€, ๋””์Šคํฌ๋ฐ์ดํ„ฐ ํฌ๊ธฐ = ๋ฒ„ํผํ’€ ํฌ๊ธฐ
2. ๋™๋“ฑ ์กฐ๊ฑด =, in ๊ฒ€์ƒ‰์ด ๋งŽ์€ ๊ฒฝ์šฐ
3. ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€์—๋งŒ ์ง‘์ค‘๋˜๋Š”๊ฒฝ์šฐ
???์™œ
> ๋‹ค์Œ์—์„œ ์†ํ•ด :
1. ๋””์Šคํฌ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ
2. ์กฐ์ธ์ด๋‚˜ like ๋งŽ์€ ๊ฒฝ์šฐ
3. ๋งค์šฐ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํญ์ด ๋„“๊ฒŒ ์ฝ๋Š” ๊ฒฝ์šฐ
> ์š”์ ์€ ๋ฒ„ํผ ํ’€ ๋‚ด์—์„œ ๋น ๋ฅธ์ ‘๊ทผ์„ ๋” ๋น ๋ฅด๊ฒŒ ํ•ด์ค€ ๋‹ค๋Š” ๊ฒƒ
> ๋‹จ, ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ด ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ฐพ๋А๋ผ ํšจ์šฉ์ด ์—†์–ด๋„ ์ฐพ์„ ๊ฑฐ๋ž€ ๊ฒƒ
> ๋‹จ, ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ๋ฐ ์‚ญ์ œ์—๋„ ์–ด๋Œ‘ํ‹ฐํ”„ ํ•ด์‹œ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋ฉด ๋‹ค ์ œ๊ฑฐํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ด์„œ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค๋Š” ๊ฒƒ.

## ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๊ฐ„ ๋น„๊ต ๊ฐ„๋‹จํžˆ

'8.0 ๋ถ€ํ„ฐ๋Š” innodb ๊ฐ€ ์งฑ์ž„'
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

## ํ‚ค ์บ์‹œ
## ์šด์˜์ฒด์ œ์˜ ์บ์‹œ ๋ฐ ๋ฒ„ํผ
## ๋ฐ์ดํ„ฐ ํŒŒ์ผ๊ณผ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ตฌ์กฐ

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
> 5.1 ํŠธ๋žœ์ ์…˜
> 5.2 MySQL์—”์ง„ ์ž ๊ธˆ /
> 5.3 InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ž ๊ธˆ
> 5.4 ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

## ํŠธ๋ Œ์žญ์…˜

- ์ž ๊ธˆ์€ ๋™์‹œ์„ฑ(์—ฌ๋Ÿฌ๊ตฐ๋ฐ์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ์˜ˆ์ธก ๋ถˆ๊ฐ€!), ํŠธ๋žœ์ ์…˜์€ ์ •ํ•ฉ์„ฑ(์›ํ•˜๋Š” ๊ฐ’)์„ ๋ณด์žฅํ•œ๋‹ค
- ํŠธ๋ Œ์ ์…˜์„ ์ง€์›ํ•˜๋Š” InnoDB, ์•ˆํ•˜๋Š” MYIsam
- ํŠธ๋ Œ์ ์…˜์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ฟผ๋ฆฌ ์ž‘์—…์˜ ์ค‘๊ฐ„ ์‹คํŒจ์— ๋Œ€ํ•œ ์กฐ๊ฑด ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋ถ„๊ธฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค!

- ํŠธ๋ Œ์ ์…˜์€ ์ตœ์†Œํ•œ์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์ข‹๋‹ค -> ์—ฌ๋Ÿฌ ํŠธ๋ Œ์ ์…˜์œผ๋กœ ์ชผ๊ฐœ๊ธฐ, ์™ธ๋ถ€ํ†ต์‹ ์€ ํŠธ๋žœ์ ์…˜์œผ๋กœ ์žก์ง€ ์•Š๊ธฐ, ๋ถˆํ•„์š”ํ•œ ์‹œ์ ์—์„œ ์žก์ง€ ์•Š๊ธฐ

## 5.2 MySQL ์—”์ง„ ์ž ๊ธˆ

- `๊ธ€๋กœ๋ฒŒ๋ฝ` : mysql ์„œ๋ฒ„ ์ „๋ฐ˜์— ๊ฑธ์ณ db, table ์ด ๋‹ฌ๋ผ๋„ ์˜ํ–ฅ ๋ฐ›๋Š”๋‹ค. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” MyIsam์ด๋‚˜ Memory ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ๋คํ”„(๋ฐฑ์—…) ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. InnoDB ์—์„œ ๋ฐฑ์—…์‹œ์— ๊ธ€๋กœ๋ฒŒ๋ฝ์ด ๊ฑธ๋ ค๋„ ๋ณ€๊ฒฝ ํ—ˆ์šฉํ•˜๋ฉฐ ๋ฐฑ์—…์„ ์ž ์‹œ ๋ฉˆ์ถ”๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค
- `ํ…Œ์ด๋ธ”๋ฝ` : ๋ช…์‹œ์  ๋ฌต์‹œ์ ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ž ๊ตฌ๋Š” ๊ฒƒ์œผ๋กœ, ์ฟผ๋ฆฌ ์‹คํ–‰์‹œ์— ์ž‘๋™๋˜๋‚˜, InnoDB์˜ ๊ฒฝ์šฐ ๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ์„ ์ œ๊ณตํ•ด์„œ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์‹œ์—๋งŒ ์ž ๊ตฌ๊ณค ํ•œ๋‹ค.
- `๋„ค์ž„๋“œ๋ฝ` : ํด๋ผ์ธ์–ธํŠธ๊ฐ„์˜ ์ƒํ˜ธ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ž์ฃผ ์“ฐ์ด์ง„ ์•Š์ง€๋งŒ, ๋ณต์žกํ•œ ์š”๊ฑด์œผ๋กœ ๋ ˆ์ฝ”๋“œ ๋ณ€๊ฒฝ์‹œ์— ๋ฐ๋“œ๋ฝ์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ๋‹ค.
- `๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฝ` : ๋ช…์‹œ์ ์œผ๋กœ ์“ฐ์ด์ง„ ์•Š์œผ๋ฉฐ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„๋“ค ๋“ฑ์„ ๋ฐ”๊ฟ€๋•Œ ์›๋ณธ๊ณผ ๋Œ€์ƒ์„ ๋ชจ๋‘ ์ž ๊ตฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค. ์šด์˜์ค‘์ธ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ์‹œ์— InnoDB ํŠธ๋žœ์ ์…˜๊ณผ ๋™์‹œ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๊ทผ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ๋‹ค.

## InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ž ๊ธˆ

- ์Šคํ† ๋ฆฌ์ง€ ์ž์ฒด ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ์ž ๊ธˆ๋ฐฉ์‹์„ ํƒ‘์žฌ -> ๋†’์€ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ
- ๋ ˆ์ฝ”๋“œ์™€ ๋ ˆ์ฝ”๋“œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ž ๊ทธ๋Š” ๊ฐญ๋ฝ
- ๋ ˆ์ฝ”๋“œ๋ฝ : ์ธ๋ฑ์Šค์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๋Š” ๋ฐฉ์‹ ***
- ๊ฐญ๋ฝ : ๋ ˆ์ฝ”๋“œ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ, ๋„ฅ์ŠคํŠธ ํ‚ค ๋ฝ์˜ ์ผ๋ถ€๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ
- ๋„ฅ์ŠคํŠธ ํ‚ค๋ฝ : ๋ ˆ์ฝ”๋“œ๋ฝ + ๊ฐญ๋ฝ -> ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ ์ปค๋ฆฌ๊ฐ€ ๋ ˆํ”Œ๋ฆฌ์นด ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋ ๋•Œ ์†Œ์Šค ์„œ๋ฒ„์—์„œ ๋งŒ๋“คใ…‡ ๋‚ธ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ
- ์ž๋™ ์ฆ๊ฐ€๋ฝ : autoincrement ์†์„ฑ์žˆ๋Š” ์ปฌ๋Ÿผํ…Œ์ด๋ธ” ๋™์‹œ insert ์‹œ ํ…Œ์ด๋ธ” ์ˆ˜์ค€์˜ ๋ฝ์ด ํ•„์š”, 5.1 ๋ถ€ํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•œ๋ฐ, 0 -๋ชจ๋“  insert๋ฌธ์žฅ ์ž๋™์ฆ๊ฐ€๋ฝ, 1- insert ๊ฑด์ˆ˜๋ฅผ ์˜ˆ์ธก๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋” ๋น ๋ฅธ ๋ž˜์น˜(๋ฎคํ…์Šค)๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋ฆฌ, 2- ๋ฌด์กฐ๊ฑด ๊ฒฝ๋Ÿ‰ ๋ž˜์น˜(๋ฎคํ…์Šค) ์‚ฌ์šฉํ•œ๋‹ค. ์—ฐ์†๋œ ์ž๋™์ฆ๊ฐ€๊ฐ’์„ ๋ณด์žฅํ•˜์ง„ ์•Š์œผ๋ฉฐ ์ธํ„ฐ๋ฆฌ๋น™ ๋ชจ๋“œ๋ผ๊ณ  ์ง€์นญํ•œ๋‹ค. ๋™์‹œ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์ด ์ข‹์•„์ง€๋‚˜, ์œ ๋‹ˆํฌ ๊ฐ’๋งŒ ๋ณด์žฅํ•˜๊ณ  ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

-`์ธ๋ฑ์Šค์™€ ์ž ๊ธˆ` : InnoDB๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ตฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์ „์ฒด ํ…Œ์ด๋ธ”, ํ˜น์€ ๊ณผ๋„ํ•œ ๋ฒ”์œ„๋ฅผ ์ž ๊ตด ์ˆ˜ ์žˆ๋‹ค. -`๋ ˆ์ฝ”๋“œ ์ˆ˜์ค€์˜ ์ž ๊ธˆ์˜ ๋ฌธ์ œ` : ํ…Œ์ด๋ธ” ์ž ๊ธˆ์€ ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌ, ํ•ด๊ฒฐ ๋  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ ˆ์ฝ”๋“œ๋ผ๋ฉด ์ž˜ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

## 5.4 ๊ฒฉ๋ฆฌ์ˆ˜์ค€

- read uncommitted, read committed(์˜ค๋ผํด), repeatable read(MySQL), serializable (๊ฒฉ๋ฆฌ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ์ฒ˜๋ฆฌ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๋‹จ seariable์ˆ˜์ค€์ด ์•„๋‹ˆ๋ฉด ์„ฑ๋Šฅ ์ฐจ์ด๋Š” ๊ฑฐ์˜ ์—†๋‹ค.)
- R unc : Drity read, non-repeatable read, phantom read
- R com : non-r, ph
- Rp re : ph(inno๋Š” ์ œ์™ธ)
- serial : ํ•ด๋‹น์‚ฌํ•ญ ์—†์Œ

- `RUC` : ์ปค๋ฐ‹์•ˆํ•œ๊ฒƒ๋„ ์ฝ๋Š” ๋ฐฉ์‹, ๋”ํ‹ฐ ๋ฆฌ๋“œ, ์ฆ‰ ์ž‘์—…์ด ์™„๋ฃŒ ๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ๊ฐ’๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์ ์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๊ฒฉ๋ฆฌ์ˆ˜์ค€์œผ๋กœ ์ธ์ • ๋ฐ›์ง€ ๋ชปํ•˜๊ธฐ๋„ํ•˜๋Š” ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฉ๋ฆฌ์ˆ˜์ค€.
- `RC` : ๋ณ€๊ฒฝ ํ›„ ์ปค๋ฐ‹๋˜์ง€์•Š์•˜๋‹ค๋ฉด, ์–ธ๋‘ ์—ฌ์—ญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋‹ค๋งŒ, repeatable read ์ฆ‰ ๋™์ผ ํŠธ๋ Œ์ ์…˜ ๋‚ด ๋ฐ˜๋ณต์ ์ธ ๋ฆฌ๋“œ์—๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํƒ€ ํŠธ๋žœ์ ์…˜์—์„œ ๊ฐ’์„ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ. (์ž…๊ธˆ ์ด ํ•ฉ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋Œ๋ฆฐ๋‹ค๊ณ  ํ• ๋•Œ ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.)
- `RR` : InnoDB ๊ธฐ๋ณธ ์ƒํƒœ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง„ mysql ์„œ๋ฒ„์—์„œ๋Š” ์ด ์ˆ˜์ค€ ์ด์ƒ์ด ํ•„์š”. ๋กค๋ฐฑ์„ ์œ„ํ•ด ์–ธ๋‘๋กœ๊ทธ์— ๋ฐฑ์—…ํ•˜๊ณ  ์‹ค์ œ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ MVCC ๋ผ๊ณ  ํ•œ๋‹ค. ๋ฆฌ๋“œ ์ปค๋ฐ‹ํ‹ฐ๋“œ์™€์˜ ์ฐจ์ด๋Š” ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œใ…ˆ์ค‘ ์–ด๋–ค ์˜์—ญ์„ ์ฝ๋Š” ๊ฐ€ ์ด๋‹ค. ํŠธ๋žœ์ ์…˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์œผ๋กœ ์ฝ๋Š”๋ฐ, ๋‹ค์‹œ๋งํ•ด ๋‚ด๊ฐ€ ํŠธ๋žœ์ ์…˜ ์‹œ์ž‘ํ•˜๊ณ ๋‚˜์„œ ๋ˆ„๊ฐ€ ๋ฐ”๊พผ๊ฑด ๋ฌด์‹œํ•œ๋‹จ ๋ง์ด๋‹ค. ๋˜ํ•œ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ๋‹ค๋ฅธ ํŠธ๋žœ์ ์…˜์—์„œ ์ถ”๊ฐ€ํ–ˆ์„ ๊ฒฝ์šฐ๋“ฑ์— ํ•ด๋‹นํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ PHANTOM READ ๋ผ๊ณ  ํ•œ๋‹ค.
- `SR` : ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์œผ๋กœ ๋™์‹œ์ฒ˜๋ฆฌ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ์ฝ๊ธฐ ์ž‘์—…์กฐ์ฐจ ๋ฝ์„ ๊ฑธ๊ฒŒ๋œ๋‹ค. ๋‹จ ์ด๋…ธ๋””๋น„์—์„œ๋Š” ํŒฌํ†ค ๋ฆฌ๋“œ๊ฐ€ ๊ฐญ๋ฝ๊ณผ ๋„ฅ์ŠคํŠธ ํ‚ค๋ฝ ๋•๋ถ„์— ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ตณ์ด ์ด ์ˆ˜์ค€๊นŒ์ง€ ์‚ฌ์šฉ ํ•  ํ•„์š”๋Š” ์—†๋‹ค.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
> 8.1 ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹
> 8.2 ์ธ๋ฑ์Šค๋ž€
> 8.3 B- tree ์ธ๋ฑ์Šค (๋‹ค์ค‘์ปฌ๋Ÿผ์ธ๋ฑ์Šค)

- ์ธ๋ฑ์Šค์˜ ์„ฑ๋Šฅ์€ ์˜ตํ‹ฐ๋งˆ์ด์ €์˜ ๋ฐœ์ „์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ด€๋ฆฌ์ž์˜ ์—ญํ• ๋กœ์„œ, ์ฟผ๋ฆฌ ํŠœ๋‹์— ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

## 8.1 ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹

- ์„ฑ๋Šฅ ํŠœ๋‹๊ณผ ์ง์ ‘์ ์ธ ๋””์Šคํฌ io
- ๋žœ๋คio(hdd sdd ๋น„์Šท)์™€ ์ˆœ์ฐจio(hdd์—์„œ sdd์— ๋น„ํ•ด ๋А๋ฆผ)

- `๋žœ๋คio` ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€๋งŒํผ ์‹œ์Šคํ…œ ์ฝœ ์š”์ฒญ์ด ํ•„์š”ํ•˜๋ฉฐ,
- hdd์—์„œ๋Š” ๋งค io๋งˆ๋‹ค ๋””์Šคํฌํ—ค๋”์˜ ์›€์ง์ด ํ•„์š”ํ•˜๋‹ค. sdd์—์„œ๋„ ์ „์ฒด throughput์ด ๋–จ์–ด์ง€๋Š” ํŽธ
- ์ฃผ๋กœ ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์— ํ•ด๋‹น.

- `์ˆœ์ฐจio`์—์„œ๋„ ๋นˆ๋ฒˆํ•œ ๋™๊ธฐํ™” ์ž‘์—…์€ ๋žœ๋คio๋งŒํผ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ค๋ฉฐ, ์ด์— ๊ธฐ์—…์šฉ๋“ค์€ RAID์ปจํŠธ๋กค๋Ÿฌ์˜ ์บ์‹œ๋“ฑ์œผ๋กœ ํšจ์œจ์  ์ฒ˜๋ฆฌํ•œ๋‹ค.
- ํฐ ํ…Œ์ด๋ธ”์˜ ๋ฐ๋ถ€๋ถ„์„ ์ฝ์„ ๊ฒฝ์šฐ ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”-์ˆœ์ฐจIO๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นจ๋ฆฌ ๋งŽ์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋Š”๋‹ค.

- `์ฟผ๋ฆฌ์„ฑ๋Šฅ๊ฐœ์„ `์€ ๊ฒฐ๊ตญ `๋žœ๋คIO`๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋ฉฐ, ๋‹ค์‹œ๋งํ•ด, `์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ`๋งŒ ์ฝ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

## 8.2 ์ธ๋ฑ์Šค

- ์ธ๋ฑ์Šค๋Š” ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ - ํ‚ค ์˜ ์Œ์œผ๋กœ ๋น ๋ฅธ ํƒ์ƒ‰์„ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋ฉฐ, ์ •๋ ฌ์ด ์ค‘์š”ํ•˜๋‹ค.

### ์ž๋ฃŒ๊ตฌ์กฐ์  ๋ถ„๋ฅ˜

- SortedList : ์ธ๋ฑ์Šค, ํ•ญ์ƒ ์ •๋ ฌ ์œ ์ง€, ์ €์žฅ์‹œ(i,u,d)๋งˆ๋‹ค ๋†’์€ ๋น„์šฉ, ๋น ๋ฅธ ํƒ์ƒ‰(select) -> ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฑด ์ €์žฅ์†๋„๋ฅผ ๊ฐ์ˆ˜ํ•œ๋‹ค๋Š” ๊ฒƒ/ ๊ณผํ•œ ์ธ๋ฑ์Šค๋Š” ์ €์žฅ์šฉ๋Ÿ‰๋„ ์˜ํ–ฅ
- ArrayList : ๋ฐ์ดํ„ฐ ํŒŒ์ผ, ์ €์žฅ์ˆœ์„œ ์œ ์ง€

- ์ธ๋ฑ์Šค : pk - ๋ ˆ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•  ๋Œ€ํ‘œ ์นผ๋Ÿผ, not null, no dup / sk - ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค, pk๋น„์Šท ๋Œ€์ฒด์ œ

### ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ๋ถ„๋ฅ˜

- `B-Tree ์ธ๋ฑ์Šค` : ์˜ค๋ž˜๋˜๊ณ  ๋ฐœ์ „๋œ ๊ธฐ๋ฒ•, ์นผ๋Ÿผ ๋ณ€๊ฒฝ ์—†์ด ์ธ๋ฑ์‹ฑ, ์œ„์น˜๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐœ์ „๋œ๊ฒŒ R-Tree\
- balanced, ์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ, ์ผ๋ฐ˜์  ์šฉ๋„
- ๋ฆฌํ”„ ๋…ธ๋“œ - ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ/ ๋ฃจํŠธ, ๋ธŒ๋ Œ์ง€ ๋…ธ๋“œ - ์ž์‹๋…ธ๋“œ ์ฃผ์†Œ (์ด๋•Œ ๋ฐ์ดํ„ฐ ์ž์ฒด๋Š” ๋น„์ •๋ ฌ์ , innoDB๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง-๋ฐ์ดํ„ฐํŒŒ์ผ ๋‚ด๋ถ€์— ๋น„ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์…ˆ, ๋•Œ๋ฌธ์— MyISAM์€ sk๊ฐ€ ๋ฌผ๋ฆฌ์ ์ฃผ์†Œ๋ฅผ InnoDB๋Š” sk๊ฐ€ ๋…ผ๋ฆฌ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค, ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค)
- Hash ์ธ๋ฑ์Šค : ์นผ๋Ÿผ ๊ฐ’์œผ๋กœ ํ•ด์‹œ๊ฐ’ ๊ณ„์‚ฐํ•ด ์ธ๋ฑ์‹, ๋น ๋ฅธ ๊ฒ€์ƒ‰, but ๊ฐ’ ๋ณ€๊ฒฝ ๋ฐฉ์‹์œผ๋กœ ์ „๋ฐฉ์ผ์น˜ ๋“ฑ `๊ฐ’์˜ ์ผ๋ถ€ ๊ฒ€์ƒ‰`์ด๋‚˜ `๋ฒ”์œ„ ๊ฒ€์ƒ‰`์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€, ๋ฉ”๋ชจ๋ฆฌ๊ธฐ๋ฐ˜DB์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

- unique ์กฐ๊ฑด์€ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ๋Š” 1๊ฐœ ์ด์ƒ์„ ์ฐพ์•„์•ผ ํ• ์ง€ ๋ง์ง€์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๋ฌธ์ œ
ใ…ก

### ์ธ๋ฑ์Šค์˜ ์ถ”๊ฐ€ ์‚ญ์ œ

- B-Tree ๊ตฌ์กฐ์—์„œ ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค ํ‚ค๊ฐ€ ์ถ”๊ฐ€๋ ๋•Œ, ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ์žˆ๋‹ค๋ฉด ๋ฆฌํ”„๋…ธ๋“œ์˜ split์ด ์ด๋ค„์ ธ์•ผ ํ•˜๋ฉฐ, ์ด๋•Œ ์ƒ์œ„ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๊นŒ์ง€ ์ฒ˜๋ฆฌ๋ฒ”์œ„๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.
- ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ๊ธฐ ๋น„์šฉ์ด 1์ด๋ฉด ์ธ๋ฑ์Šค๋‹น 1.5 ๋น„์šฉ์ด ์ถ”๊ฐ€๋œ๋‹ค.
- InnoDB์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค์ถ”๊ฐ€ ์ž‘์—…์„ ์ง€์—ฐ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์œ ๋‹ˆํฌ ์นผ๋Ÿผ์€ ์•„๋‹ˆ๋‹ค.

- InnoDB๋Š” ์‚ญ์ œ ๋งˆํ‚น ํ›„ ํ›„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๊ฐ™์€ ๊ฒฝ์šฐ ์ฒด์ธ์ง€๋ฒ„ํผ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์—†์–ด์„œ ์ธ๋ฑ์Šคํ‚ค ์‚ญ์ œํ›„ ์ฟผ๋ฆฌ๊ฐ€ ๋Œ์•„๊ฐ„๋‹ค.(๋ณ€๊ฒฝ์€ ์‚ญ์ œ์™€ ์ถ”๊ฐ€์˜ ํ•ฉ)

- B-Tree ์ธ๋ฑ์Šค์˜ ๊ฒ€์ƒ‰์€ ์ „์ฒด ์ผ์น˜, ์•ž๋ถ€๋ถ„ ์ผ์น˜์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ ์—ฐ์‚ฐ์„ ํ†ตํ•œ(๋ณ€ํ˜•๋œ) ์ •๋ ฌ์ด๋‚˜ ๊ฒ€์ƒ‰์€ ์žฅ์ ์„ ์ด์šฉ ํ•  ์ˆ˜ ์—†๋‹ค.
- ํŠนํžˆ ์ด๋…ธ๋””๋น„์—์„œ๋Š” ๊ฒ€์ƒ‰ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ถˆ์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ถˆ, ์ธ๋ฑ์Šค๊ฐ€ ์ ์ ˆํžˆ ์—†๋‹ค๋ฉด ์ „์ฒด๋ฅผ ์ž ๊ถˆ๋ฒ„๋ฆด ์ˆ˜ ๋„ ์žˆ๋‹ค.

### ๋น„ํŠธ๋ฆฌ ์ธ๋ฑ์Šค ์‚ฌ์šฉ์— ๋ฏธ์น˜๋Š” ์š”์†Œ

- ํŽ˜์ด์ง€(์ด๋…ธ๋””๋น„ ์Šคํ† ๋ฆฌ์ง€์—”์ง„์ด ๋””์Šคํฌ์— ์ €์žฅํ•˜๋Š” ์ตœ์†Œ๋‹จ์œ„)๋Š” ์ฝ์“ฐ์˜ ์ตœ์†Œ๋‹จ์œ„์ด์ž, ๋ฒ„ํผ๋ง ์ตœ์†Œ๋‹จ์œ„์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋„ ๋…ธ๋“œ ๊ตฌ๋ถ„์ด ํŽ˜์ด์ง€ ๋‹จ์œ„์ด๋‹ค.
- ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋Š” ๋ณดํ†ต 16kb๋กœ 16\*1024 / 16(ํ‚ค๊ฐ’ ์˜ˆ์‹œํฌ๊ธฐ)+12(์ž์‹๋…ธ๋“œ์ฃผ์†Œ์˜ˆ์‹œํฌ๊ธฐ) = 585๊ฐœ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค. -> ์ด๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋ ˆ์ฝ”๋“œ 500๊ฐœ๋ฅผ ์ฝ์„๋•Œ๋งˆ๋‹ค ๋””์Šคํฌ ์ฝ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š”๊ฒƒ.
- ์ธ๋ฑ์Šค ํ‚ค๊ฐ€ ์ปค์ง€๋ฉด ์ „์ฒด์  ์ธ๋ฑ์Šค ํ‚ค๊ฐ€ ์ปค์ง€๊ณ , ์ธ๋…ธ๋””๋น„ ๋ฒ„ํผํ’€์ด๋‚˜ ๋งˆ์ด์•„์ด์‚ผ ํ‚ค์บ์‹œ ์˜์—ญ์€ ํ•œ์ •์ ์ด ์บ์‹œ๊ฐ€๋Šฅํ•œ ๋ ˆ์ฝ”๋“œ ์ˆ˜๋Š” ์ค„์–ด๋ฒ„๋ฆฐ๋‹ค.

- ๊ธฐ์ˆ˜์„ฑ, ์„ ํƒ๋„, selectivity, cardinality : ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’ ๊ฐ€์šด๋ฐ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ์ˆ˜ -> ์ค‘๋ณต์ด ์—†์„ ์ˆ˜๋ก ์„ ํƒ๋„๊ฐ€ ๋†’๊ณ , ๊ฒ€์ƒ‰์ด ๋นจ๋ผ์ง„๋‹ค
- ์„ ํƒ๋„๊ฐ€ ๋‚ฎ์•„๋„ ์ •๋ ฌ๊ณผ ๊ทธ๋ฃจํ•‘ ์ž‘์—…์œผ๋กœ ๊ฐœ์„  ์‹œํ‚ฌ์ˆ˜๋„ ์žˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ํ•ญ์ƒ ๊ฒ€์ƒ‰๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ.
- `์œ ๋‹ˆํฌ ๊ฐ’` ????

- ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ํ…Œ์ด๋ธ”์„ ์ฝ์€๊ฑด, ๊ทธ๋ƒฅ ์ฝ๋Š” ๊ฒƒ์— ๋น„ํ•ด ๋น„์šฉ์ด ๋†’๋‹ค. -> ์ผ๋ฐ˜์  ์˜ตํ‹ฐ๋งˆ์ด์ €์—์„œ๋Š” ์ง์ ‘ 1๊ฑด๋ณด๋‹ค 4.5๋ฐฐ ๋น„์šฉ์ด ๋†’๊ฒŒ ์ธ๋ฑ์Šค ํ†ตํ•œ ์ฝ๊ธฐ๋ฅผ ์˜ˆ์ธกํ•œ๋‹ค. -> ์ „์ฒด์˜ 20% ๋„˜์€ ๋‚ด์šฉ์„ ์ฝ์œผ๋ฉด ์ธ๋ฑ์Šค๋กœ ์ฝ๊ธฐ๋Š” ์†ํ•ด. -> ๋”ฐ๋ผ์„œ ํžŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์˜๋ฏธ ์—†๋‹ค.

### ๋น„ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋กœ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ

`์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”`

- ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅธ ๋ฐฉ์‹์œผ๋กœ, ์ฝ์–ด์•ผํ•˜๋Š” ๋ฒ”์œ„ ๊ฒฐ์ •์‹œ ์‚ฌ์šฉ. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹๋„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ฝ์–ด์•ผํ•˜๋Š” ๊ฐฏ์ˆ˜๋งŒํผ io๋ฅผ ํ•„์š”ํ•˜๋ฏ€๋กœ 20% ์ด์ƒ ์ฝ์–ด์•ผ ํ• ๋• ๋žœ๋คio๋ณด๋‹ค ์ง์ ‘์ฝ๊ธฐ๋กœ ์ˆœ์ฐจio๊ฐ€ ๋‚˜์€์…ˆ.
`์ธ๋ฑ์Šค ํ’€ ์Šค์บ”`
- ์ธํ…์Šค์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€๋ฅผ ๋ชจ๋‘ ์ฝ๋Š” ๋ฐฉ์‹. ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ฝ๋Š”๊ฑฐ๋ณด๋‹จ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์€ ์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋‘ ์ฝ๋Š”๊ฒŒ ์ €๋ ด -> ์ธ๋ฑ์Šค ๋ช…์‹œ๋œ ์นผ๋Ÿผ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ• ๋•Œ. ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€๋ณด๋‹ค ๋А๋ฆฌ๊ณ  ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”๋ณด๋‹จ ๋น ๋ฅด๋‹ค.
`๋ฃจ์Šค ์ธ๋ฑ์Šค ์Šค์บ”`
- ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€,ํ’€ ์Šค์บ”์ด ํƒ€์ดํŠธ ์Šค์บ”์ด๋ฉฐ ์ด์— ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…
- ๋ ˆ์ธ์ง€ ์Šค์บ”๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ž‘๋™ ๋˜๋‚˜ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์Šคํ‚ต,
- group by, max min ์— ์ตœ์ ํ™” ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
`์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”`
- ๋ฃจ์Šค ์ธ๋ฑ์Šค ์Šค์บ”๊ณผ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ฃนํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉ ๋˜๋˜ ๊ฒƒ๋“ค์ด WHERE ์กฐ๊ฑด์ ˆ ๊ฒ€์ƒ‰์—๋„ ์‚ฌ์šฉ ๋˜๋Š” ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง„ ๊ฒƒ์ด๋‹ค.
- ๋ฃจ์Šค ์ธ๋ฑ์Šค ์Šค์บ”๊ณผ ๋™์ผํ•˜๊ฒŒ ์ธ๋ฑ์Šค์— ๋ฌด์Šจ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ํ•„์š” ์—†๋Š” ๊ฒƒ๋“ค์„ ์Šคํ‚ตํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹!

### ๋‹ค์ค‘ ์นผ๋Ÿผ ์ธ๋ฑ์Šค

- ์ผ๋ฐ˜์  ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋‹ค์ค‘ ์นผ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ธ๋ฑ์Šค์˜ ๋‘๋ฒˆ์งธ ์นผ๋Ÿผ์€ ์ฒซ๋ฒˆ์งธ ์นผ๋Ÿผ์— ์˜์กดํ•ด ์ •๋ ฌ๋œ๋‹ค. ์„ธ๋ฒˆ์งธ๋Š” ๋‘๋ฒˆ์งธ์— ์˜์กด ํ•˜๋Š” ๋ฐฉ์‹, ๋”ฐ๋Ÿฌ์„œ ์นผ๋Ÿผ์˜ ์œ„์น˜๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

--end 230509
Loading