๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

MySQL

(4)
'์‹คํ–‰๊ณ„ํš์—์„œ ๋ฌด์—‡์„ ์ค‘์š”ํ•˜๊ฒŒ ๋ณผ ๊ฒƒ์ธ๊ฐ€?' - ๊ฐœ์ธ์ ์ธ ํ†ต์ฐฐ Real MySQL 8.0 10์žฅ ์‹คํ–‰๊ณ„ํš์„ 150๋งŒ๊ฐœ์˜ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค."์‹คํ–‰ ๊ณ„ํš์„ ์–ด๋–ป๊ฒŒ ์ฝ์–ด์•ผ ํ•˜๋Š”์ง€, ๋ฌด์—‡์„ ์ฝ์–ด์•ผ ํ•˜๋Š”์ง€?" ์— ๋Œ€ํ•ด ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด ๋“ค์–ด๊ฐ”์Œ์„ ๋ฐํžˆ๋ฉฐ, ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ์Œ์„ ๋ฏธ๋ฆฌ ์–‘ํ•ด ๊ตฌํ•ฉ๋‹ˆ๋‹ค.1. ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ๋•Œ ๊ณ ๋ คํ•˜๋Š” ๊ธฐ์ค€ ์ €๋Š” ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ์ปฌ๋Ÿผ์„ ์„ ํƒํ•  ๋•Œ ๋‹ค์Œ 3๊ฐ€์ง€ ๊ธฐ์ค€์„ ์ฃผ๋กœ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.* ์ถ”๊ฐ€๋กœ, ์ธ๋ฑ์Šค ์„ค์ • ์‹œ ์ฃผ์˜ํ•  ์ ๋“ค์€ ํ•ด๋‹น ๋ชฉ์ฐจ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚จ์œผ๋กœ ์ƒ๋žตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! โ“ ์นด๋””๋„๋ฆฌํ‹ฐ(Cardinality)๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์ธ๊ฐ€?์นด๋””๋„๋ฆฌํ‹ฐ๋Š” ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๊ณ ์œ  ๊ฐ’ ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.InnoDB ๊ฐ€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ, ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์„์ˆ˜๋ก ๋น ๋ฅด๊ฒŒ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์€ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ๋•Œ ์šฐ..
๋™์‹œ์„ฑ ์ œ์–ด ์‹œ JPA์˜ ๋น„๊ด€์  ๋ฝ(select ... for update)์— ๋Œ€ํ•ด ํšŒ์˜์ ์ธ ์ด์œ  ์ด ๊ธ€์—์„œ๋Š” MySQL์„ ์‚ฌ์šฉํ•ด, ํŠน์ • ๋ ˆ์ฝ”๋“œ์— ๋ฝ์ด ๊ฑธ๋ฆฐ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์— ์–ด๋Š ์ž‘์—…๊นŒ์ง€ ํ—ˆ์šฉํ•˜๋Š”์ง€ ์‹คํ—˜ํ•ด๋ณด๊ณ , MySQL ๋‚ด๋ถ€์—์„œ ์–ธ์ œ ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋ฉฐ ๋น„๊ด€์  ๋ฝ์— ๋Œ€ํ•ด ํšŒ์˜์ ์ธ ์ด์œ ๋ฅผ ์–˜๊ธฐํ•˜๋Š” ๊ฐœ์ธ์ ์ธ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ Real MySQL ์„ ์ฝ๊ณ , ๊ณต์œ  ๋ฝ๊ณผ ๋ฐฐํƒ€ ๋ฝ์— ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์žˆ๋Š” ๋ถ„๋“ค์ด ์‰ฝ๊ฒŒ ์ดํ•ด ๋  ๊ฒƒ ๊ฐ™์œผ๋ฉฐ, ๊ฒฐ๋ก ์€ ๋งˆ์น˜๋ฉฐ.. ์— ์ •๋ฆฌํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ์ฐจ๋Š” ๋‹ค์Œ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ณต์œ  ๋ฝ/๋ฐฐํƒ€ ๋ฝ ํš๋“ ์‹œ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ€๋Šฅํ•œ ์ฟผ๋ฆฌ ์†Œ๊ฐœ๊ณต์œ  ๋ฝ/๋ฐฐํƒ€ ๋ฝ ์‚ฌ์šฉ ์‹œ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์“ฐ๊ธฐ ์ž‘์—…์ด ๋Œ€๊ธฐํ•˜๋Š” ์ด์œ UPDATE / DELETE ์ฟผ๋ฆฌ ์‹œ WHERE ์ ˆ์˜ ์ธ๋ฑ์Šค ์—ฌ๋ถ€์˜ ์ค‘์š”์„ฑMySQL8.0 Repetable Read ์—์„œ Phanto..
MySQL 8.0์˜ B-Tree ์ธ๋ฑ์Šค ์•Œ์•„๋ณด๊ธฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๋ฉด ์กฐํšŒ๊ฐ€ ์™œ ๋น ๋ฅธ์ง€์— ๋Œ€ํ•œ ์˜๋ฌธ์„ ํ•ด์†Œํ•˜๊ณ ์ž Real MySQL์„ ํ•™์Šต์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์•Œ๊ธฐ ์ „, ์–ด๋–ป๊ฒŒ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.8.1 ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹# ๊ธฐ๊ณ„์‹ ์žฅ์น˜์ธ HDD(ํ•˜๋“œ ๋””์Šคํฌ)๊ธฐ์กด ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๊ณ„์‹ ์žฅ์น˜์ธ ์›ํŒ ๋ชจ์–‘์˜ HDD(ํ•˜๋“œ ๋””์Šคํฌ)์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.HDD๋Š” ์›ํŒ์„ ๋Œ๋ ค๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋žœ๋คI/O ์ž‘์—…์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. # ์ „์ž์‹ ์žฅ์น˜์˜ ๋“ฑ์žฅHDD์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ ์ž SSD, CPU, ๋ฉ”๋ชจ๋ฆฌ ๊ฐ™์ด ์ „๊ธฐ์  ํŠน์„ฑ์„ ๋ˆ ์ „์ž์‹ ์žฅ์น˜๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.SSD๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด HDD๋ฅผ ํšŒ์ „์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , DBMS๊ฐ€ ์ด SSD๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ..
[๋™์‹œ์„ฑ ์ œ์–ด] ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ๋‚™๊ด€์ /๋น„๊ด€์  ๋ฝ์˜ ํ•„์š”์„ฑ ๋น„๊ด€์  ๋ฝ๊ณผ ๋‚™๊ด€์  ๋ฝ์— ๋Œ€ํ•œ ๊ณต๋ถ€ ์ž๋ฃŒ๋Š” ์ € ์ด์™ธ์—๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ, ํ•ด๋‹น ๊ธ€์—์„œ๋Š” ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋ฝ์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ณ  ์žˆ๋Š” ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ๊ฒฌํ•˜์‹ ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์ดํ•ดํ•ด์„œ ๋‚™๊ด€์ , ๋น„๊ด€์  ๋ฝ์„ ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.1. ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation level) ์ดํ•ดํ•˜๊ธฐํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation)์ด๋ž€?๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์–ด๋Š ์ •๋„๋กœ ์ œํ•œํ•  ์ง€๋ฅผ ๋ ˆ๋ฒจ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค๋ฉด, AํŠธ๋žœ์žญ์…˜์—์„œ id=1 ์— ๋Œ€ํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒ ํ•  ๋•Œ, BํŠธ๋žœ์žญ์…˜์—์„œ id=1 ์— ๋Œ€ํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.์ด ๋•Œ, AํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ..