๐Ÿ“š Databases/RealMySQL 8.0

๐Ÿ“š Databases/RealMySQL 8.0

8.3 B-Tree ์ธ๋ฑ์Šค

์ธ๋ฑ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜. B๋Š” Binary์˜ ์•ฝ์ž๊ฐ€ ์•„๋‹Œ, Balanced์˜ ์•ฝ์ž์ด๋‹ค. 8.3.1 ๊ตฌ์กฐ ๋ฐ ํŠน์„ฑ B-Tree์˜ ๊ตฌ์กฐ ์ œ์ผ ์ƒ๋‹จ์— ์žˆ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ, ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ํ•ญ์ƒ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๊ฐ€๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ธ๋ฑ์Šค๋“ค์€ ๋ชจ๋‘ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ๋กœ ์ €์žฅ์ด ๋˜์–ด ์žˆ๋‹ค. ์‹ค์ œ ๋””์Šคํฌ์˜ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋Š” ์ •๋ ฌ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด, InnoDB์—์„œ๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋˜์–ด ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ PK ์ˆœ์„œ๋กœ ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค. ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ ๊ตฌ์กฐ (InnoDB) ๋ฆฌํ”„ ๋…ธ๋“œ์™€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๊ตฌ์กฐ๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž. ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—๋Š” ๊ฒฐ๊ตญ PK๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” B-Tree..

๐Ÿ“š Databases/RealMySQL 8.0

8.1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค๋ž€?

8.1 ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹ HDD vs SSD ์ˆœ์ฐจ I/O ๋ฐฉ์‹์€ ์‚ฌ์‹ค SSD๊ฐ€ HDD๋ณด๋‹ค ์กฐ๊ธˆ ๋น ๋ฅด๊ฑฐ๋‚˜ ๊ฑฐ์˜ ๋น„์Šทํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ, ๋žœ๋ค I/O์—์„œ๋Š” ๋Œ€๋žต 5000๋ฐฐ ์ •๋„ ๋น ๋ฅด๋‹ค. ๋žœ๋ค I/O, ์ˆœ์ฐจ I/O๋ž€? ์ˆœ์ฐจ I/O๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ 1 ๋ฒˆ ์‹œ์Šคํ…œ์—๊ฒŒ ์š”์ฒญ์„ ํ•œ๋‹ค. ์ฆ‰, ๋””์Šคํฌ ํ—ค๋”๋ฅผ 1 ๋ฒˆ ์›€์ง์˜€๋‹ค. ๋žœ๋ค I/O๋Š” ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค ์‹œ์Šคํ…œ์—๊ฒŒ ์š”์ฒญ์„ ํ•œ๋‹ค. ์ฆ‰, ๋””์Šคํฌ ํ—ค๋”๋ฅผ n ๋ฒˆ ์›€์ง์˜€๋‹ค. ๊ฒฐ๊ตญ, ์ˆœ์ฐจ I/O๋Š” ๋žœ๋ค I/O๋ณด๋‹ค ๊ฑฐ์˜ 3๋ฐฐ์ •๋„ ๋น ๋ฅด๋‹ค. ๐Ÿ’ก ๋””์Šคํฌ์˜ ์„ฑ๋Šฅ์€ ๋””์Šคํฌ ํ—ค๋”์˜ ์œ„์น˜ ์ด๋™ ์—†์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๊ธฐ๋กํ•˜๋Š๋ƒ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์ฟผ๋ฆฌ๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๊ฒƒ์€ ๋žœ๋ค I/O๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•จ์ด๋‹ค. 8..

๐Ÿ“š Databases/RealMySQL 8.0

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

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation level)์ด๋ž€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ๋•Œ ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. READ UNCOMMITED (=DIRTY READ) ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. READ COMMITED Oracle ๊ฐ™์€ DBMS์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ REPEATABLE READ MySQL์—์„œ ์‚ฌ์šฉ SERIALIZABLE ๋™์‹œ์„ฑ์ด ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐˆ ์ˆ˜๋ก ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ(๊ณ ๋ฆฝ) ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์€ ๋‚ฎ์•„์ง„๋‹ค. ํ•˜์ง€๋งŒ, SERIALIZABLE์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ 3๊ฐœ๋Š” ํฌ๊ฒŒ ์„ฑ๋Šฅ์˜ ๊ฐœ์„ ์ด๋‚˜ ์ €ํ•˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. 5.4.1 READ ..

๐Ÿ“š Databases/RealMySQL 8.0

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

5.3 InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ž ๊ธˆ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ MySQL๊ณผ ๋ณ„๊ฐœ๋กœ ์ž ๊ธˆ์„ ์ œ๊ณตํ•œ๋‹ค. ๐Ÿ’ก ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋‚ด๋ถ€์—์„œ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ ๋ฐฉ์‹์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ๋‹ค. 5.3.1 InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ์ž ๊ธˆ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ž ๊ธˆ ์ •๋ณด๊ฐ€ ์ƒ๋‹นํžˆ ์ž‘์€ ๊ณต๊ฐ„์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— *๋ฝ ์—์Šค์ปฌ๋ ˆ์ด์…˜(๋ ˆ์ฝ”๋“œ ๋ฝ์ด ํŽ˜์ด์ง€ ๋ฝ์œผ๋กœ, ๋˜๋Š” ํ…Œ์ด๋ธ” ๋ฝ์œผ๋กœ ๋ ˆ๋ฒจ์—…๋˜๋Š” ๊ฒฝ์šฐ)๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋˜ํ•œ InnoDB์—์„œ๋Š” ํŠน์ง•์ธ ๋ ˆ์ฝ”๋“œ์™€ ๋ ˆ์ฝ”๋“œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ž ๊ทธ๋Š” ๊ฐญ(GAP) ๋ฝ์ด๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•œ๋‹ค. ์ ์„ ์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋œปํ•œ๋‹ค. 5.3.1.1 ๋ ˆ์ฝ”๋“œ ๋ฝ ๋ ˆ์ฝ”๋“œ ์ž์ฒด๋งŒ์„ ์ž ๊ทธ๋Š” ๊ฒƒ์„ *๋ ˆ์ฝ”๋“œ ๋ฝ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ ˆ์ฝ”๋“œ ? ๋ ˆ์ฝ”๋“œ๋ž€ ํ…Œ์ด๋ธ”์˜ ํ•œ ๋ฐ์ดํ„ฐ์˜..

๐Ÿ“š Databases/RealMySQL 8.0

5.2 MySQL ์—”์ง„์˜ ์ž ๊ธˆ

์ž ๊ธˆ์˜ ๋ ˆ๋ฒจ MySQL ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ ๋ชจ๋“  ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ์˜ํ–ฅ์„ ๋ฏธ์นจ ํ…Œ์ด๋ธ” ๋ฝ ์™ธ์—๋„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ(ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์ž ๊ธˆ), ๋„ค์ž„๋“œ ๋ฝ ๋“ฑ ๊ธฐ๋Šฅ ์ œ๊ณต ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๊ฐ„ ์ƒํ˜ธ ์˜ํ–ฅ ์—†์Œ 5.2.1 Global Lock(๊ธ€๋กœ๋ฒŒ ๋ฝ) DML(Data Manipulation Language, ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด)๋ž€? ์ •์˜๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž…๋ ฅ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์˜ ์—ญํ• ์„ ํ•˜๋Š” ์–ธ์–ด SELECT INSERT UPDATE DELETE DDL(Data Definition Language, ๋ฐ์ดํ„ฐ ์ •์˜์–ด)๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์–ธ์–ด (๋ฐ์ดํ„ฐ ์ „์ฒด์˜ ๊ณจ๊ฒฉ์„ ๊ฒฐ์ •) CREATE ALTER DROP TRUNCATE FLUSH TABLES WITH READ LOCK ๋ช…๋ น์œผ๋กœ ํš๋“ MyS..

๐Ÿ“š Databases/RealMySQL 8.0

5.1 ํŠธ๋žœ์žญ์…˜

ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ Transaction(ํŠธ๋žœ์žญ์…˜)์˜ 4๊ฐ€์ง€ ์„ฑ์งˆ (ACID) Atomicity(์›์ž์„ฑ) all or nothing ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์—ฐ์‚ฐ๋“ค์ด ์ •์ƒ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์–ด๋– ํ•œ ์—ฐ์‚ฐ๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ๋ณด์žฅ Consistency(์ผ๊ด€์„ฑ) ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ํŠธ๋žœ์žญ์…˜์€ ์ •๋‹นํ•œ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜์—ˆ์Œ์„ ์˜๋ฏธ DB์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ์‚ฌ์ „์— ์„ค์ •๋˜์–ด ์žˆ๋Š” ๋ฃฐ์— ๋งž์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ Isolation(๋…๋ฆฝ์„ฑ/๊ณ ๋ฆฝ์„ฑ) ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ˆ˜ํ–‰ ๋˜๋”๋ผ๋„ ๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•จ ๋‹ค์ˆ˜์˜ ์„ธ์…˜ ๋˜๋Š” ์œ ์ €๊ฐ€ ๊ฐ™์€ ์‹œ๊ฐ„์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ณ  ์ฒ˜๋ฆฌ ์ค‘์ผ ๋•Œ ์ˆ˜ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ ๋  ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ผ์–ด ๋“ค์ง€ ๋ชปํ•˜๊ฒŒ..

iseunghan
'๐Ÿ“š Databases/RealMySQL 8.0' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก