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

๐ŸŒพBackEnd/โœ…DataBase4

MySQL - ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ๋˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๋œ๋‹ค. ์ด ํฌ์ŠคํŠธ๋Š” ์ธ๋ฑ์Šค์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค. 2๊ฐœ์˜ ์ฝ๊ธฐ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ฉด ์ข‹์€๋ฐ ๋žœ๋คI/O์™€ ์ˆœ์ฐจI/0 ๋ฐฉ์‹์ด๋‹ค. ๋žœ๋คI/O๋ฐฉ์‹๊ณผ ์ˆœ์ฐจI/O ๋ฐฉ์‹์˜ ๊ณตํ†ต์ ์ธ ํ–‰๋™์ด ์žˆ๋Š”๋ฐ ํ”Œ๋ž˜ํ„ฐ๋ฅผ ๋Œ๋ ค์„œ ์ฝ์–ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋กœ ๋””์Šคํฌ ํ—ค๋”๋ฅผ ์ด๋™์‹œํ‚จ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๋ถ€๋ถ„์€ ์ˆœ์ฐจI/O๋Š” 1๋ฒˆ์˜ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๊ณ  ๋žœ๋คI/O๋Š” 3๋ฒˆ์˜ ํ˜ธ์ถœ์„ ํ•˜์˜€๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ดํŽด๋ณด๋ฉด ์ˆœ์ฐจI/O๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ด ์ข‹๊ฒ ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋žœ๋คI/O๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” MySQL์„ ํ˜„์‹ค์  ํŠน์„ฑ์ƒ ์ˆœ์ฐจI/O๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ๊ทธ๋ž˜์„œ ๋žœ๋คI/O๋ฅผ ์‚ฌ์šฉ์„ ํ•˜๋ฉด์„œ ์ ‘๊ทผํ•˜๋Š”.. 2023. 2. 28.
MySQL - ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ MYSQL ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ๋•Œ ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 1. Read Uncommitted Read Uncommitted ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ๊ฐ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด commit , Rollback ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๋ณด์ธ๋‹ค. (Dirty Read) → ์‚ฌ์šฉ์ž A๊ฐ€ insert๋ฅผ ํ•˜๊ณ  ์‚ฌ์šฉ์ž B๊ฐ€ commit ์ด ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ select๋กœ ์ ‘๊ทผ์„ ํ•œ๋‹ค. → ๋งŒ์•ฝ์— Insert ํ•˜๋Š” ๊ฒฝ์šฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋กค๋ฐฑ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์žB๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผ์„ ํ•˜๊ณ  ์žˆ์„๊นŒ? — ๋กค๋ฐฑ์ด ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผ → ์ด์ฒ˜๋Ÿผ Read Uncommitted๋Š” ์ •ํ•ฉ์„ฑ์— ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ .. 2023. 2. 28.
MYSQL - LOCK Lock ๋ฝ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. ์ฆ‰. ๋ฝ์€ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•  ๋•Œ ๋ฝ์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”๋ฅผ ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฝ์˜ ๋ฒ”์œ„๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ๋Œ€์ง€์ค‘์ธ ์ปค๋„ฅ์…˜์ด ๋งŽ์•„์ง€๊ณ  ๋‚˜์ค‘์—๋Š” ์ปค๋„ฅ์…˜ ํ’€์ด ๊ณ ๊ฐˆ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ MySQL์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ , ๋ก๋ฐฑ์‹œ์ ์— ๋ฝ์ด ํ’€๋ฆฐ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ๊ณง ๋ฝ์˜ ๋ฒ”์œ„๊ฐ€ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. MySQL์—์„œ ๋ฝ์€ ํฌ๊ฒŒ InnoDB ์—”์ง„ , MySQL ์—”์ง„ ๋ ˆ๋ฒจ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“Œ ๋น„๊ด€์  ๋™์‹œ์„ฑ ์ œ์–ด(PCC, Pessimistic Concurrency Control) ๋น„๊ด€์  ๋ฝ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ํŠธ๋žœ์žญ์…˜์ด ์ถฉ๋Œํ•˜๋Š” ๊ฐ€์ •ํ•˜์— ์ž ๊ธˆ์„ ๊ฑฐ๋Š” ๋ฐฉ์‹ ์ผ๋ฐ˜์ ์œผ๋กœ Shared Lock, Exclusive Lock์„ ํ†ตํ•ด ์ด๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ๐Ÿ“Œ ๋‚™๊ด€์  ๋™์‹œ ์ˆ˜ํ–‰ ์ œ์–ด(OCC, Opti.. 2023. 2. 28.
MySQL ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ ๐Ÿšฉ MySQL ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ MySQL์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž MySQL ์„œ๋ฒ„๋Š” ํฌ๊ฒŒ MySQL ์—”์ง„ + ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์žˆ๋‹ค. MySQL์—”์ง„ ํฌ๊ฒŒ 3๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. (์ฟผ๋ฆฌ ํŒŒ์‹ฑ, ์ฟผ๋ฆฌ ์˜คํ‹ฐ๋งˆ์ด์ง•, ์ฟผ๋ฆฌ ์‹คํ–‰์„ ํ•œ๋‹ค.) ์ฟผ๋ฆฌ ํŒŒ์‹ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ DB์— ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด๋ฉด SQL์ด ์ดํ•ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ฟผ๋ฆฌ ์˜คํ‹ฐ๋งˆ์ด์ง• ํŒŒ์‹ฑ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์˜คํ‹ฐ๋งˆ์ด์ง•์„ ํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ํ•œ๋‹ค. ์ฟผ๋ฆฌ ์‹คํ–‰ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ MyISAM ์ฒ˜์Œ์— ๊ธฐ๋ณธ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉ์„ ํ•˜์˜€๋‹ค. ํ‚ค ์บ์‹ฑ์ด๋ผ๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๋ฉฐ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. InnoDB ๋ฒ„ํผ๋ง, FK์ œ์•ฝ ์กฐ๊ฑด, ์ถฉ๋Œ ๋ณต๊ตฌ, ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์—ฌ ์ฃผ๋กœ InnoDB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ํ†ตํ•˜์—ฌ ๋””์ŠคํฌI/O ์ž‘์—…์„ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ(๋ฒ„ํผ ํ’€).. 2023. 2. 10.