๋ชฉ๋ก๐Ÿ“–/Real MySQL 8.0 (7)

DevLog ๐Ÿ˜ถ

[Real MySQL 8.0] ์ธ๋ฑ์Šค์™€ B-Tree ์•Œ์•„๋ณด๊ธฐ

๐ŸŒฑ ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹ ๐Ÿ’ฌ HDD (ํ•˜๋“œ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ) / SSD (์†”๋ฆฌ๋“œ ์Šค๋ ˆ์ดํŠธ ๋“œ๋ผ์ด๋ธŒ) ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ํ•ด ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์žฅ์น˜์˜ ๋ฐœ์ „์€ ๋น„๊ต์  ๋Š๋ฆฌ๊ฒŒ ๋ฐœ์ „ํ•œ๋‹ค๋Š” ์†Œ๋ฆฌ๋ฅผ ๋“ค์€ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํŠนํžˆ HHD๋Š” ํ”Œ๋ž˜ํ„ฐ(์›ํŒ)์„ ๋Œ๋ ค์„œ ์ฝ๊ณ ๋‚˜ ์“ฐ๋‹ค ๋ณด๋‹ˆ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋Š๋ฆด ์ˆ˜๋ฐ–์— ์—†๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ SSD์˜ ๊ฒฝ์šฐ ๊ธฐ์กด ํ•˜์Šคํฌ ๋“œ๋ผ์ด๋ธŒ์—์„œ ๋ฐ์ดํ„ฐ ์ €์žฅ์šฉ ํ”Œ๋ž˜ํ„ฐ(์›ํŒ)์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ๋Œ€์‹  ํ”Œ๋ž˜์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฅ์ฐฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค. ํ”Œ๋ž˜์‹œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ „์›์ด ์—†์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค๋Š” ๋Š๋ฆฌ์ง€๋งŒ ๊ทธ๋ž˜๋„ ํ•˜๋“œ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ๋ณด๋‹ค๋Š” ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. ๐Ÿ’ฌ ๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O ๋””์Šคํฌ ์ฝ๊ธฐ ์—ฐ์‚ฐ์—์„œ '๋žœ๋ค I/O'์™€ '์ˆœ์ฐจ I/O'๋ผ๋Š” ๋ง์„ ๋“ค์€ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋žœ๋ค ..

๐Ÿ“–/Real MySQL 8.0 2023. 7. 10. 21:40
[Real MySQL 8.0] InnoDB์˜ ์ธ๋ฑ์Šค์™€ ๋ฝ, ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” InnoDB์˜ ์ธ๋ฑ์Šค์™€ ๋ฝ์˜ ์ƒ๊ด€๊ด€๊ณ„์™€ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๐ŸŒฑ ์ธ๋ฑ์Šค์™€ ๋ฝ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋ ˆ์ฝ”๋“œ ๋ฝ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒผ๋‹ค.innoDB์˜ ๊ฒฝ์šฐ ๋ ˆ์ฝ”๋“œ ์ž์ฒด๋ฅผ ์ž ๊ทธ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ์ธ๋ฑ์Šค์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทผ๋‹ค.์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทธ๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ฝ”๋“œ ๊ฒ€์ƒ‰ ์‹œ ๋ฐœ๊ฒฌ๋œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์˜ ๋ฝ์„ ๊ฑธ๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, crew ํ…Œ์ด๋ธ”์— age = 23์ธ ์‚ฌ๋žŒ์ด 100๋ช…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด๋•Œ, age์—๋Š” ์ธ๋ฑ์Šค๊ฐ€, name์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค์žˆ์ง€ ์•Š์€ ์ƒํƒœ๋‹ค.SELECT COUNT(*) FROM crew WHERE age = 23; # result: 100 ํ•˜์ง€๋งŒ, age = 23์ด๋ฉด์„œ name = 'journey'์ธ ๊ฒฐ๊ณผ๋Š” 1๊ฐœ๋งŒ ๋‚˜์˜จ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.SELEC..

๐Ÿ“–/Real MySQL 8.0 2023. 6. 19. 00:51
[Real MySQL 8.0] InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•Œ์•„๋ณด๊ธฐ - 3ํŽธ (Buffer Pool - on disk structures)

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” InnoDB์˜ ์ „๋ฐ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์ค‘์—์„œ ๋””์Šคํฌ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ณ ์ž ํ•œ๋‹ค. ๐ŸŒฑ Tablespaceํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํฐ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„์ด๋ฉฐ, Segment -> Extent -> Page -> Row์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. MySQL์—์„œ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋Š” ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ 5๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. - System tablespace - File-Per-Table tablespace - General Tablespace - Temporary Tablespace - Undo Tablespace ๐ŸŒฑ System tablespaceSystem tablespace์˜ ๊ฒฝ์šฐ My..

๐Ÿ“–/Real MySQL 8.0 2023. 6. 15. 13:52
[Real MySQL 8.0] InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•Œ์•„๋ณด๊ธฐ - 2ํŽธ (Buffer Pool - in memory structures)

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” InnoDB์˜ ์ „๋ฐ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์ค‘์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋žต์ ์ธ ๋‚ด์šฉ๋งŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๐ŸŒฑ InnoDB ๋ฒ„ํผ ํ’€ (Buffer Pool)์œ„ ๊ทธ๋ฆผ์€ MySQL 8.0 ๊ธฐ์ค€ InnoDB ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ทธ๋ฆผ์ด๋‹ค. ์ด์ค‘์—์„œ ๋ฒ„ํผ ํ’€์˜ ๊ฒฝ์šฐ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์ด๋‹ค. ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ, ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œ๋„ ํ•ด๋‘˜ ์ˆ˜ ์žˆ๊ณ , ์“ฐ๊ธฐ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ์„œ ์ผ๊ด„ ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.๐Ÿ’ก ๊ทธ๋ ‡๋‹ค๋ฉด ํฌ๊ธฐ๋Š” ์–ด๋Š ์ •๋„๋กœ ์„ค์ •ํ•ด์•ผ ํ• ๊นŒ? ๋ณดํ†ต OS ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด 8๊ธฐ๊ฐ€ ์ดํ•˜๋ผ๋ฉด 50% ์ •๋„๋งŒ ๋ฒ„ํผ ํ’€๋กœ ์„ค์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•  ๊ณต๊ฐ„์œผ๋กœ ๋‚จ๊ฒจ๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋งŒ์•ฝ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋” ..

๐Ÿ“–/Real MySQL 8.0 2023. 6. 14. 21:48
[Real MySQL 8.0] InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•Œ์•„๋ณด๊ธฐ - 1ํŽธ (ํด๋Ÿฌ์Šคํ„ฐ๋ง / ์™ธ๋ž˜ํ‚ค / MVCC)

๐ŸŒฑ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜MySQL์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ธ 'InnoDB'์— ๋Œ€ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์•Œ์•„๋ณด์ž.๊ทธ๋ฆผ์ด ๋ณต์žกํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์™ผ์ชฝ์€ ์ด์ „์— ๋ดค๋˜ MySQL ์—”์ง„์ด๊ณ , ์˜ค๋ฅธ์ชฝ์ด InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ตฌ์„ฑ๋„์ด๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” innoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. 1. PK์— ์˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง๊ธฐ๋ณธ์ ์œผ๋กœ InnoDB์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์€ PK๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง๋˜์–ด ์ €์žฅ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ง๋œ๋‹ค๋Š” ๊ฒƒ์€, PK ๊ฐ’์ด ๋น„์Šทํ•œ ๋ ˆ์ฝ”๋“œ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. PK ๊ฐ’์ด ๋ ˆ์ฝ”๋“œ์˜ ์ €์žฅ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ DBMS์—์„œ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค์˜ ๋ฆฌํ”„ ๋…ธ๋“œ์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์‹ค์งˆ์ ์ธ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€์„œ, ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๋ฐ์ด..

๐Ÿ“–/Real MySQL 8.0 2023. 6. 11. 16:32
[Real MySQL 8.0] MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„, ์ฟผ๋ฆฌ ์‹คํ–‰ ์ฒ˜๋ฆฌ ์ˆœ์„œ

๐ŸŒฑ MySQL ์ „์ฒด ๊ตฌ์กฐMySQL ์„œ๋ฒ„๋Š” ํฌ๊ฒŒ MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. MySQL ์—”์ง„์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ ‘์†ํ•˜๊ณ , ์ฟผ๋ฆฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ฅ์…˜ ํ•ธ๋“ค๋Ÿฌ์™€ SQL ํŒŒ์„œ, ์˜ต์ง€๋งˆ์ด์ €๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฟผ๋ฆฌ ๊ด€๋ จ ์ฒ˜๋ฆฌ๋Š” ์ด๊ณณ์—์„œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ์˜ '๋‘๋‡Œ'์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ž. ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, ํ˜น์€ ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ž‘์—…์„ ํ•˜๋ฉฐ ํ•˜๋‚˜์˜ MySQL ์„œ๋ฒ„๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์„œ๋กœ 'ํ•ธ๋“ค๋Ÿฌ API'๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ, ์–ด๋Š ์ •๋„์˜ ๋ฐ์ดํ„ฐ ์ž‘์—…์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. show global s..

๐Ÿ“–/Real MySQL 8.0 2023. 6. 11. 00:30