DrawingProcess
๋“œํ”„ DrawingProcess
DrawingProcess
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (967)
    • Profile & Branding (25)
      • Career (18)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (97)
      • Book (66)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • ์ธ์ƒ์„ ์‚ด๋ฉด์„œ (64)
      • ๋‚˜์˜ ์ทจ๋ฏธ๋“ค (7)
      • ๋‚˜์˜ ์ƒ๊ฐ๋“ค (42)
      • ์—ฌํ–‰์„ ๋– ๋‚˜์ž~ (10)
      • ๋ถ„๊ธฐ๋ณ„ ํšŒ๊ณ  (5)

๊ฐœ๋ฐœ์ž ๋ช…์–ธ

โ€œ ๋งค์ฃผ ๋ชฉ์š”์ผ๋งˆ๋‹ค ๋‹น์‹ ์ด ํ•ญ์ƒ ํ•˜๋˜๋Œ€๋กœ ์‹ ๋ฐœ๋ˆ์„ ๋ฌถ์œผ๋ฉด ์‹ ๋ฐœ์ด ํญ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ผ.
์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์ผ์ด ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๋ฐ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•  ์ƒ๊ฐ์„ ์•ˆ ํ•œ๋‹ค. โ€

- Jef Raskin

๋งฅ์˜ ์•„๋ฒ„์ง€ - ์• ํ”Œ์ปดํ“จํ„ฐ์˜ ๋งคํ‚จํ† ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋„

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
DrawingProcess

๋“œํ”„ DrawingProcess

[DB] MySQL ์•„ํ‚คํ…์ฒ˜ (feat. Real MySQL)
Study: ComputerScience(CS)/CS: Database(SQL)

[DB] MySQL ์•„ํ‚คํ…์ฒ˜ (feat. Real MySQL)

2022. 11. 18. 18:29
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” MySQL์˜ ๊ธฐ๋ณธ์„œ๋ผ ๋ถˆ๋ฆฌ๋Š” Real MySQL์ด๋ผ๋Š” ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ 'MySQL ์•„ํ‚คํ…์ฒ˜'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ ์ฟผ๋ฆฌ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ MySQL ์ž์ฒด์—์„œ๋Š” ์–ด๋–ค์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ์ •๋ฆฌํ•ด๋‘์—ˆ์œผ๋‹ˆ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

1. MySQL์˜ ์ „์ฒด ๊ตฌ์กฐ

MySQL ์„œ๋ฒ„๋Š” ํฌ๊ฒŒ MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” MySQL์˜ ์ฟผ๋ฆฌ ํŒŒ์„œ๋‚˜ ์˜ตํ‹ฐ๋งˆ์ด์ € ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๊ณผ ๊ตฌ๋ถ„ํ•˜๊ณ ์ž ์œ„์˜ ๊ทธ๋ฆผ์—์„œ๋Š” "MySQL์—”์ง„"๊ณผ "์Šคํ† ๋ฆฌ์ง€ ์—”์ง„"์œผ๋กœ ๊ตฌ๋ถ„ํ–ˆ์œผ๋ฉฐ, ์ด ๋‘˜์„ ๋ชจ๋‘ ํ•ฉ์ณ์„œ ๊ทธ๋ƒฅ MySQL ๋˜๋Š” MySQL ์„œ๋ฒ„๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

1.1 MySQL ์—”์ง„

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ ‘์† ๋ฐ ์ฟผ๋ฆฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ฅ์…˜ ํ•ธ๋“ค๋Ÿฌ์™€ SQLํŒŒ์„œ ๋ฐ ์ „์ฒ˜๋ฆฌ๊ธฐ, ์ฟผ๋ฆฌ์˜ ์ตœ์ ํ™”๋œ ์‹คํ–‰์„
์œ„ํ•œ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ค‘์‹ฌ์„ ์ด๋ฃน๋‹ˆ๋‹ค. ์š”์ฒญ๋œ SQL ๋ฌธ์žฅ์„ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”ํ•˜๋Š” ๋“ฑ DBMS ๋‘๋‡Œ์— ํ•ด๋‹นํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด MyISAM์˜ ํ‚ค ์บ์‹œ๋‚˜ InnoDB์˜ ๋ฒ„ํผ ํ’€๊ณผ ๊ฐ™์€ ๋ณด์กฐ ์ €์žฅ์†Œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, MySQL์€ ํ‘œ์ค€ SQL(ANSI SQL-92) ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์ค€ ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ ์ž‘์„ฑ๋œ ์ฟผ๋ฆฌ๋Š” ํƒ€ DBMS์™€ ํ˜ธํ™˜๋˜์–ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.2 ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋””์Šคํฌ ์Šคํ† ๋ฆฌ์ง€๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ถ€๋ถ„์€ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด
์ „๋‹ดํ•ฉ๋‹ˆ๋‹ค. MYSQL ์„œ๋ฒ„์—์„œ MySQL ์—”์ง„์€ ํ•˜๋‚˜์ง€๋งŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด ํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉํ•  ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์ง€์ •ํ•˜๋ฉด ์ดํ›„ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ฝ๊ธฐ ์ž‘์—…์ด๋‚˜ ๋ณ€๊ฒฝ ์ž‘์—…์€ ์ •์˜๋œ
์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

mysql > CREATE TABLE test_table (fd1 IT, fd2 INT) ENGINE = INNODB;

1.3 ํ•ธ๋“ค๋Ÿฌ API

MySQL ์—”์ง„์˜ ์ฟผ๋ฆฌ ์‹คํ–‰๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ์–ด์•ผ ํ•  ๋•Œ๋Š” ๊ฐ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—๊ฒŒ ์“ฐ๊ธฐ ๋˜๋Š” ์ฝ๊ธฐ๋ฅผ ์š”์ฒญํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ํ•ธ๋“ค๋Ÿฌ(Handler) ์š”์ฒญ์ด๋ผ๊ณ  ํ•˜๊ณ , ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” API๋ฅผ ํ•ธ๋“ค๋Ÿฌ API๋ผ๊ณ  ํ•œ๋‹ค. InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋˜ํ•œ ์ด ํ•ธ๋“ค๋Ÿฌ API๋ฅผ ์ด์šฉํ•ด MySQL ์—”์ง„๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค. ์ด ํ•ธ๋“ค๋Ÿฌ API๋ฅผ ํ†ตํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ(๋ ˆ์ฝ”๋“œ) ์ž‘์—…์ด ์žˆ์—ˆ๋Š”์ง€๋Š” ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"SHOW GLOBAl STATUS LIKE 'Handler%';"

1.4 MySQL ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋น„๊ต

๋Œ€๋ถ€๋ถ„์˜ ์—”์ง„๋“ค์ด ์˜ค๋ผํด ์—”์ง„์„ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ค„์ด๊ฑฐ๋‚˜ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์„ ์ค„์ธ ์—”์ง„์€ ๊ทธ๋งŒํผ ๋ฝ ๊ฒฝํ•ฉ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์‹œ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋ฉด์„œ ๋Œ€๋Ÿ‰ ์ธ์„œํŠธ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋‚ด์˜ ์กฐํšŒ๋กœ ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ  ์žˆ๋Š” ๊ฒฝํ–ฅ์„ ๋ณด์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MySQL ์„œ๋ฒ„(mysqld)์—์„œ ์ง€์›๋˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 'SHOW ENGINES'๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ์˜ ํ‘œ๋กœ ๋น„๊ต ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋ฒ„์ „ ํŠธ๋žœ์žญ์…˜ LOCK ์„ธ๋ถ„์„ฑ ๊ฐ•์  ์•ฝ์ 
MyISAM ๋ชจ๋“ ๋ฒ„์ „ ์ง€์› ์•ˆํ•จ  ๋™์‹œ ์‚ฝ์ž… ๊ฐ€๋Šฅ
ํ…Œ์ด๋ธ” ๋ฝ
SELECT, INSERT, ๋Œ€๋Ÿ‰์ ์žฌ ์ฝ๊ธฐ/์“ฐ๊ธฐ
ํ˜ผํ•ฉ ์ž‘์—…
MyISAM Merge ๋ชจ๋“  ๋ฒ„์ „ ์ง€์› ์•ˆํ•จ  ๋™์‹œ ์‚ฝ์ž… ๊ฐ€๋Šฅ
ํ…Œ์ด๋ธ” ๋ฝ 
๋ถ„ํ•  ๋ณด๊ด€,
๋ฐ์ดํ„ฐ์›จ์–ดํ•˜์šฐ์ง• 
์ „์—ญ์  ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰ 
Memory(HEAP) ๋ชจ๋“  ๋ฒ„์ „  ์ง€์› ์•ˆํ•จ  ํ…Œ์ด๋ธ” ๋ฝ  ์ค‘๊ฐ„ ๊ณ„์‚ฐ,
ํ†ต๊ณ„ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ 
 ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹,
์ง€์†์ ์ธ ์Šคํ† ๋ฆฌ์ง€
 InnoDB ๋ชจ๋“  ๋ฒ„์ „  ์ง€์›  MVCC์˜ ROW๋ฝ   ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ  
Falcon  6.0 ์ด์ƒ  ์ง€์›   MVCC์˜ ROW ๋ฝ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ   
Archive  4.1 ์ด์ƒ  ์ง€์› ์•ˆํ•จ  ROW ๋ฝ  ๋กœ๊น…, ์ง‘๊ณ„ ๋ถ„์„  ์ž„์˜ ์ ‘๊ทผ(์ธ๋ฑ์‹ฑ), ๊ฐฑ์‹ , ์‚ญ์ œ
CSV 4.1 ์ด์ƒ  ์ง€์› ์•ˆํ•จ  ํ…Œ์ด๋ธ” ๋ฝ  ๋กœ๊น…, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ๋Œ€๋Ÿ‰ ์ ์žฌ ์ž„์˜ ์ ‘๊ทผ(์ธ๋ฑ์‹ฑ)
Bloackhole 4.1 ์ด์ƒ  ์ง€์› ์•ˆํ•จ  ๋ฝ ์ง€์› ์•ˆํ•จ  ๋กœ๊น…, ๋ณต์ œ ์•„์นด์ด๋ธŒ ํŠน์ˆ˜ ๋ชฉ์ (๋กœ๊น…) ์ด์™ธ์˜ ์‚ฌ์šฉ 
 Federated 5.0 ์ด์ƒ   ์ง€์› ์•ˆํ•จ ๋ฝ ์ง€์› ์•ˆํ•จ  ๋ฐฐํฌ๋œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ด€๋ฆฌ  ํŠน์ˆ˜ ๋ชฉ์ (์›๊ฒฉ ๋ฐ์ดํ„ฐ ์กฐํšŒ) ์ด์™ธ์˜ ์‚ฌ์šฉ 
 NDB ํด๋Ÿฌ์Šคํ„ฐ 5.0 ์ด์ƒ  ์ง€์›  ROW ๋ฝ  ๊ณ ๋„์˜ ๊ฐ€์šฉ์„ฑ  ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์–ด๋ ค์›€ 
PBXT 5.0 ์ด์ƒ  ์ง€์›  MVCC์˜ ROW ๋ฝ  ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ, ๋กœ๊น…  ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค ์ง€์› ์•ˆํ•จ 
 SolidDB 5.0 ์ด์ƒ  ์ง€์›  MVCC์˜ ROW ๋ฝ  ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ   
Maria  6.X ์ด์ƒ  ์ง€์›  MVCC์˜ ROW ๋ฝ  MyISAM ์—”์ง„ ๋Œ€์ฒด   
  • ์ฝ๊ธฐ ์ „์šฉ ํ…Œ์ด๋ธ”์—์„œ ๊ตณ์ด ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋™์‹œ์„ฑ์„ ์š”๊ตฌํ•  ํ•„์š”๋Š” ์—†๊ธฐ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฌํ•œ ๊ฒƒ์„ ๋ฐฐ์ œํ•œ ์—”์ง„์„ ์„ ํƒํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • MySQL ์—”์ง„๋“ค ์ค‘ ๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ์“ฐ์ด๋ฉด์„œ ์˜ค๋ผํด๊ณผ ์œ ์‚ฌํ•œ ์—”์ง„์€ InnoDB ์—”์ง„์ž…๋‹ˆ๋‹ค.

2. MySQL ์Šค๋ ˆ๋”ฉ ๊ตฌ์กฐ

MySQL์€ ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ํฌ๊ฒŒ ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.1 ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ(ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ)

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ฒŒ ๋˜๋ฉด MySQL ์„œ๋ฒ„๋Š” ๊ทธ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด ์ค„ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด ๊ทธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ• ๋‹นํ•ด์ค๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋Š” DBMS์˜ ์•ž๋‹จ์—์„œ ์‚ฌ์šฉ์ž(ํด๋ผ์ด์–ธํŠธ์™€) ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋–„๋ฌธ์— ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋Š” ์ตœ์†Œํ•œ MySQL ์„œ๋ฒ„์— ์ ‘์†๋œ ํด๋ผ์ด์–ธํŠธ์˜ ์ˆ˜๋งŒํผ ์กด์žฌํ•˜๋ฉฐ, ์ฃผ๋กœ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ž„๋ฌด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•˜๋ฉด, ํ•ด๋‹น ์ปค๋„ฅ์…˜์„ ๋‹ด๋‹นํ•˜๋˜ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค์‹œ ์Šค๋ ˆ๋“œ ์บ์‹œ(Thread pool)๋กœ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์ด๋•Œ ์ด๋ฏธ ์Šค๋ ˆ๋“œ ์บ์‹œ์— ์ผ์ • ๊ฐœ์ˆ˜ ์ด์ƒ์˜ ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด, ์Šค๋ ˆ๋“œ ์บ์‹œ์— ๋„ฃ์ง€ ์•Š๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ ์ผ์ • ๊ฐœ์ˆ˜์˜ ์Šค๋ ˆ๋“œ ๋งŒ ์Šค๋ ˆ๋“œ ์บ์‹œ์— ์กด์žฌํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ thread_cache_size์ž…๋‹ˆ๋‹ค. MyISAM ํ…Œ์ด๋ธ”์€ ๋””์Šคํฌ ์“ฐ๊ธฐ ์ž‘์—…๊นŒ์ง€ ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, InnoDB ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋‚˜ ์บ์‹œ๊นŒ์ง€๋งŒ ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฒ„ํผ๋กœ๋ถ€ํ„ฐ ๋””์Šคํฌ๊นŒ์ง€ ๊ธฐ๋กํ•˜๋Š” ์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

2.2 ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ

์ธ์„œํŠธ ๋ฒ„ํผ(Insert Buffer)๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ์Šค๋ ˆ๋“œ, ๋กœ๊ทธ๋ฅผ ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•˜๋Š” ์Šค๋ ˆ๋“œ, InnoDB ๋ฒ„ํผ ํ’€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋Š” ์Šค๋ ˆ๋“œ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋กœ ์ฝ์–ด๋“ค์ด๋Š” ์Šค๋ ˆ๋“œ, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž ๊ธˆ์ด๋‚˜ ๋ฐ๋“œ๋ฝ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ์ด๊ด„ํ•˜๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋‘ ์ค‘์š”ํ•œ ์—ญํ• ์ด์ง€๋งŒ, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋กœ๊ทธ ์Šค๋ ˆ๋“œ(Log thread)์™€ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๋กœ ๋‚ด๋ ค์“ฐ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๊ธฐ ์“ฐ๋ ˆ๋“œ ์ž…๋‹ˆ๋‹ค.

  • ์ฝ๊ธฐ / ์“ฐ๊ธฐ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ : innodb_write_io_threads / innodb_read_io_threads

SQL ์ฒ˜๋ฆฌ ๋„์ค‘ ๋ฐ์ดํ„ฐ์˜ ์“ฐ๊ธฐ ์ž‘์—…์€ ์ง€์—ฐ(๋ฒ„ํผ๋ง)๋˜์–ด ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ธฐ ์ž‘์—…์€ ์ ˆ๋Œ€ ์ง€์—ฐ๋˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž๊ฐ€ SELECT ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ, "์š”์ฒญ๋œ SELECT๋Š” 10๋ถ„ ๋’ค์— ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๊ฒ ๋‹ค"๋ผ๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” DBMS๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค). ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์ธ ์ƒ์šฉ DBMS์—๋Š” ๋Œ€๋ถ€๋ถ„ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ฒ„ํผ๋งํ•ด์„œ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋ผ ์žˆ์œผ๋ฉฐ InnoDB ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ InnoDB์—์„œ๋Š” INSERT์™€ UPDATE ๊ทธ๋ฆฌ๊ณ  DELETE ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ์™„์ „ํžˆ ์ €์žฅ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ MyISAM์—์„œ ์ผ๋ฐ˜์ ์ธ ์ฟผ๋ฆฌ๋Š” ์“ฐ๊ธฐ ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

3. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ์‚ฌ์šฉ๊ตฌ์กฐ

3.1 ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

MySQL์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ํฌ๊ฒŒ ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ MySQL ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด์„œ ๋ฌด์กฐ๊ฑด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ์—ญ์—ญ์˜ ์ฐจ์ด๋Š” MySQL ์„œ๋ฒ„ ๋‚ด์— ์กด์žฌํ•˜๋Š” ๋งŽ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋˜๋ฉฐ ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3.1.1 ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ์˜ ์ˆ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋งŒ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • ๋‹จ, ํ•„์š”์— ๋”ฐ๋ผ 2๊ฐœ ์ด์ƒ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์˜ ์Šค๋ ˆ๋“œ ์ˆ˜์™€๋Š” ๋ฌด๊ด€ํ•˜๋ฉฐ, ์ƒ์„ฑ๋œ ๊ธ€๋กœ๋ฒŒ ์˜์—ญ์ด N๊ฐœ๋ผ ํ•˜๋”๋ผ๋„ ๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.

3.1.2 ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • MySQL ์„œ๋ฒ„์ƒ์— ์กด์žฌํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์™€ MySQL ์„œ๋ฒ„์™€์˜ ์ปค๋„ฅ์…˜์„ ์„ธ์…˜ ์ด๋ผ๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น๋˜๋ฉฐ ์ ˆ๋Œ€ ๊ณต์œ ๋˜์–ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋„ฅ์…˜์ด ์—ด๋ ค ์žˆ๋Š” ๋™์•ˆ ๊ณ„์† ํ• ๋‹น๋œ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ๋Š” ๊ณต๊ฐ„๋„ ์žˆ๊ณ (์ปค๋„ฅ์…˜ ๋ฒ„ํผ๋‚˜ ๊ฒฐ๊ณผ ๋ฒ„ํผ), ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ˆœ๊ฐ„์—๋งŒ ํ• ๋‹นํ—€๋‹ค๊ฐ€ ๋‹ค์‹œ ํ•ด์ œํ•˜๋Š” ๊ณต๊ฐ„(์†ŒํŠธ ๋ฒ„ํผ๋‚˜ ์กฐ์ธ ๋ฒ„ํผ)๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

3.2 MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ ์—”์ง„์˜ ์˜์—ญ ์ฒ˜๋ฆฌ

SQL ํŒŒ์„œ <-> SQL ์˜ตํ‹ฐ๋งˆ์ด์ € <-> SQL ์‹คํ–‰๊ธฐ <-> ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ <-> ๋””์Šคํฌ ์Šคํ† ๋ฆฌ์ง€

MySQL์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ํฌ๊ฒŒ ๋‚˜๋ˆˆ๋‹ค๋ฉด ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์ด MySQL ์—”์ง„(SQL ํŒŒ์„œ, ์˜ตํ‹ฐ๋งˆ์ด์ €, ์‹คํ–‰๊ธฐ)์—์„œ ์ฒ˜๋ฆฌ๋˜๊ณ , ๋งˆ์ง€๋ง‰ "๋ฐ์ดํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ" ์ž‘์—…๋งŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค.(์•„์ฃผ ์ƒˆ๋กœ์šด ์šฉ๋„์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๋งŒ๋“ ๋‹ค ํ•˜๋”๋ผ๋„ DBMS์˜ ์ „์ฒด ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ์ผ๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ์—”์ง„์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ) ํ•˜์ง€๋งŒ, ์‹ค์งˆ์ ์ธ GROUP BY๋‚˜ ORDER BY๋“ฑ ๋งŽ์€ ๋ณต์žกํ•œ ์ฒ˜๋ฆฌ๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์˜์—ญ์ด ์•„๋‹ˆ๋ผ MySQL ์—”์ง„์˜ ์ฒ˜๋ฆฌ ์˜์—ญ์ธ ์ฟผ๋ฆฌ ์‹คํ–‰๊ธฐ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

4. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ

[ oreilly.com/high-performance-mysql ]

4.1 ํŒŒ์„œ(Parser)

์‚ฌ์šฉ์ž ์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ํ† ํฐ(MySQL์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋‹จ์œ„์˜ ์–ดํœ˜๋‚˜ ๊ธฐํ˜ธ)์œผ๋กœ ๋ถ„๋ฆฌํ•ด ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋ฌธ์žฅ์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” ์ด ๊ณผ์ •์—์„œ ๋ฐœ๊ฒฌ๋˜๋ฉฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

4.2 ์ „์ฒ˜๋ฆฌ๊ธฐ(Preprocessor)

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

4.3 ์˜ตํ‹ฐ๋งˆ์ด์ €(Query Optimizer)

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ์ €๋ ดํ•œ ๋น„์šฉ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

4.4 ์‹คํ–‰ ์—”์ง„(Query Execution Engine)

์‹คํ–‰ ์—”์ง„์€ ๋งŒ๋“ค์–ด์ง„ ๊ณ„ํš๋Œ€๋กœ ๊ฐ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์š”์ฒญํ•ด์„œ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ๋˜ ๋‹ค๋ฅธ ํ•ธ๋“ค๋Ÿฌ ์š”์ฒญ์˜ ์ž…๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ GROUP BY๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ex) ์‹คํ–‰์—”์ง„์ด ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด, WHERE ์ ˆ์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์ฝ์–ด์™€, ์ฝ์–ด์˜จ ๋ ˆ์ฝ”๋“œ๋“ค ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅํ•ด๋“ฑ์„ ์š”์ฒญํ•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰ ์—”์ง„์€ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž๋‚˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—๊ฒŒ ๋„˜๊น๋‹ˆ๋‹ค.

์ฆ‰, ์‹คํ–‰ ์—”์ง„์€ ๋งŒ๋“ค์–ด์ง„ ๊ณ„ํš๋Œ€๋กœ ๊ฐ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์š”์ฒญํ•ด์„œ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ๋˜ ๋‹ค๋ฅธ ํ•ธ๋“ค๋Ÿฌ ์š”์ฒญ์˜ ์ž…๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

4.5 ํ•ธ๋“ค๋Ÿฌ(Handler): ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

MySQL ์„œ๋ฒ„์˜ ๊ฐ€์žฅ ๋ฐ‘๋‹จ์—์„œ MySQL ์‹คํ–‰ ์—”์ง„์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๋กœ ์ €์žฅํ•˜๊ณ  ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์˜ค๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

4.6 ์ฟผ๋ฆฌ ์บ์‹œ(Query Cache): MySQL 8.0 ๋ถ€ํ„ฐ ์ œ๊ฑฐ

์ฟผ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ์€ ๋™์ผ SQL ์‹คํ–‰์‹œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ Parsing, Preprocesor, Query Optimizer ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ์— ๋‹ด๊ฒจ์ง„ ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋‹จ์ ์œผ๋กœ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ํ€ด๋ฆฌ ์บ์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์“ฐ๋ ˆ๋“œ์— Lock์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๊ณ (Waiting for query cache lock) ๊ทธ์— ๋”ฐ๋ผ์„œ ๋™์‹œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ MySQL 8.0 ์—์„œ๋Š” Query Cache ๊ธฐ๋Šฅ์ด Remove ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์š”์ฒญ๋œ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์ด ์ฟผ๋ฆฌ ์บ์‹œ์— ์กด์žฌํ•˜๋Š”๊ฐ€?
  • ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?
  • ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์‹คํ–‰๋œ ์ฟผ๋ฆฌ์ธ ๊ฒฝ์šฐ ๊ฐ€์‹œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๊ฒฐ๊ณผ์ธ๊ฐ€?
    • ํŠธ๋žœ์žญ์…˜์€ ์ž์‹ ์˜ ID๋ณด๋‹ค ID ๊ฐ’์ด ํฐ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•œ ์ž‘์—… ๋‚ด์—ญ์ด๋‚˜ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ๊ฐ€์‹œ๋ฒ”์œ„ ๋ผ๊ณ  ํ•œ๋‹ค. ์ฟผ๋ฆฌ ์บ์‹œ๋„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ ํŠธ๋žœ์žญ์…˜์˜ ID๊ฐ€ ๊ฐ€์‹œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์„ ๋–„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
  • CURRENT_DATE(), SYSDATE(), RAND() ๋“ฑ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”๊ฐ€?
  • ํ”„๋ฆฌํŽ˜์–ด ์Šคํ…Œ์ดํŠธ๋จผํŠธ์˜ ๊ฒฝ์šฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๊ฐ€?
    • ํ”„๋ฆฌํŽ˜์–ด ์Šคํ…Œ์ดํŠธ๋จผํŠธ(๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ ์ฟผ๋ฆฌ)์˜ ๊ฒฝ์šฐ์—๋Š” ์ฟผ๋ฆฌ ๋ฌธ์žฅ ์ž์ฒด์— ๋ณ€์ˆ˜("?")๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ๋ฌธ์žฅ ์ž์ฒด๋กœ ์ฟผ๋ฆฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์‚ฌ์šฉํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„ ์‹ค์ œ MySQL ์„œ๋ฒ„์—์„œ๋Š” ํ”„๋ฆฌํŽ˜์–ด ์Šคํ…Œ์ดํŠธ๋จผํŠธ์˜ ํ˜•ํƒœ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์ง„์ •ํ•œ ํ”„๋ฆฌํŽ˜์–ด ์Šคํ…Œ์ดํŠธ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ ํŠน๋ณ„ํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
  • ์บ์‹œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋‚œ ์ดํ›„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”๊ฐ€?
  • ์ฟผ๋ฆฌ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ๊ฐ€ ์บ์‹œํ•˜๊ธฐ์— ๋„ˆ๋ฌด ํฌ์ง€ ์•Š์€๊ฐ€?

5. ๋ณต์ œ(Replication)

MySQL์˜ ๋ณต์ œ๋Š” ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ, ๋ณต์ œ๋Š” 2๋Œ€ ์ด์ƒ์˜ MySQL ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋„๋ก ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™” ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋ณต์ œ์—๋Š” INSERT๋‚˜ UPDATE์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” MySQL์„œ๋ฒ„์™€ SELECT ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ์ˆ˜์žˆ๋Š” MySQL์„œ๋ฒ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

5.1 ๋งˆ์Šคํ„ฐ(Master) / ์Šฌ๋ ˆ์ด๋ธŒ(Slave)

MySQL์—์„œ๋Š” ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•ด, ์ „์ž๋ฅผ ๋งˆ์Šคํ„ฐ๋ผ๊ณ  ํ•˜๊ณ  ํ›„์ž๋ฅผ ์Šฌ๋ ˆ์ด๋ธŒ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ๋ณต์ œ์—์„œ๋Š” ๋จธ์Šคํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ 1๊ฐœ์ด๋ฉฐ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” 1๊ฐœ ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.1.1 ๋งˆ์Šคํ„ฐ

์ฃผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ ๋ฐ ๋ณ€๊ฒฝ, ์‚ญ์ œ๋˜๋Š” ์ฃผ์ฒด(์‹œ์ž‘์ )๋ฅผ ๋งˆ์Šคํ„ฐ ์žฅ๋น„๋ผ ํ•˜๋ฉฐ, MySQL์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์–ด๋–ค MySQL ์„œ๋ฒ„๋“  ๋งˆ์Šคํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณต์ œ์— ์ฐธ์—ฌํ•˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๊ฐ€์šด๋ฐ ๋ณ€๊ฒฝ์ด ํ—ˆ์šฉ๋˜๋Š” ์„œ๋ฒ„๋ฅผ ๋งˆ์Šคํ„ฐ๋กœ ํ•œ์ •ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ณต์ œ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์—์„œ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์š”์ฒญํ•˜๋ฉด ๋งˆ์Šคํ„ฐ ์žฅ๋น„ ๋Š” ๊ทธ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ์ฝ์–ด ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ๋„˜๊น๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ์žฅ๋น„์˜ ํ”„๋กœ์„ธ์Šค ๊ฐ€์šด๋ฐ "Bimlog dump"๋ผ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์ด ์ผ์„ ์ „๋‹ดํ•˜๋Š” ์Šค๋ ˆ๋“œ์ž…๋‹ˆ๋‹ค.

5.1.2 ์Šฌ๋ ˆ์ด๋ธŒ

๋ฐ์ดํ„ฐ(๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ)๋ฅผ ๋ฐ›์•„ ์˜ฌ ๋งˆ์Šคํ„ฐ ์žฅ๋น„์˜ ์ •๋ณด(IP์ฃผ์†Œ์™€ ํฌํŠธ ์ •๋ณด ๋ฐ ์ ‘์† ๊ณ„์ •)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. (๋งˆ์Šคํ„ฐ๋‚˜ ์Šฌ๋ ˆ์ด๋ธŒ๋ผ๊ณ  ํ•ด์„œ ๋ณ„๋„์˜ ๋นŒ๋“œ ์˜ต์…˜์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.)๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋Š” ๋ฆด๋ ˆ์ด ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์˜ I/O ์Šค๋ ˆ๋“œ๋Š” ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ‘์†ํ•ด ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์š”์ฒญํ•˜๊ณ  ๋ฐ›์•„ ์˜จ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๋ฆด๋ ˆ์ด ๋กœ๊ทธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์˜ SQL ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฆด๋ ˆ์ด ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์žฌ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์Šคํ„ฐ์™€ ๋™์ผํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. I/O ์Šค๋ ˆ๋“œ์™€ SQL ์Šค๋ ˆ๋“œ๋Š” ๋งˆ์Šคํ„ฐ MySQL์—์„œ๋Š” ๊ฐ€๋™๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋ณต์ œ๊ฐ€ ์„ค์ •๋œ ์Šฌ๋ ˆ์ด๋ธŒ MySQL ์„œ๋ฒ„์—์„œ ์ž๋™์ ์œผ๋กœ ๊ฐ€๋™ํ•˜๋Š” ์Šค๋ ˆ๋“œ์ž…๋‹ˆ๋‹ค.

5.2 ๋ณต์ œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ฃผ์˜ํ•  ์ 

  • ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ๋งŒ ์„ค์ • ๊ฐ€๋Šฅ
  • ๋งˆ์Šคํ„ฐ์™€ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •
  • ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์šฉ ์žฅ๋น„๋Š” ๋งˆ์Šคํ„ฐ์™€ ๋™์ผํ•œ ์‚ฌ์–‘์ด ์ ํ•ฉ
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰๋œ ์ฟผ๋ฆฌ๊ฐ€ ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ ์ง€์—ฐ๋˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ณด๋‹ค๋Š” 10๋ถ„์˜ 1 ์ˆ˜์ค€์œผ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฏ€๋กœ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์™€ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋ฅผ ๊ฐ™์€ ์‚ฌ์–‘์œผ๋กœ ์œ ์ง€ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
    • ๋˜ํ•œ, ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋Š” ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋œ ๊ฒฝ์šฐ ๊ทธ์— ๋Œ€ํ•œ ๋ณต๊ตฌ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ๋  ๋–„๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์–‘์„ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค
  • ๋ณต์ œ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ์ค‘์ง€.
    • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ๊ฐญ ๋ฝ(Gap lock)์„ ์œ ์ง€ํ•˜๊ณ , ๋งค๋ฒˆ ํŠธ๋žœ์žญ์…˜ ์ด ์ปค๋ฐ‹๋  ๋•Œ ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚จ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์ž‘์—…์€ AutoCommit์ด ํ™œ์„ฑํ™” ๋œ MySQL ์„œ๋ฒ„์—์„œ ์‹ฌ๊ฐํ•œ ๋ถ€ํ•˜๋กœ ๋‚˜ํƒ€๋‚  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์™€ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation level)
    • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ์€ ์–ด๋–ค ๋‚ด์šฉ์ด ๊ธฐ๋ก๋˜๋ƒ๋А์— ๋”ฐ๋ผ STATEMENT ํฌ๋งท ๋ฐฉ์‹๊ณผ ROW ํฌ๋งท ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • STATEMENT ๋ฐฉ์‹์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ์— ๋งˆ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ROW ํฌ๋งท์€ ๋งˆ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋œ ์ฟผ๋ฆฌ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋œ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

MySQL์˜ ๋ณต์ œ๋Š” ๋งˆ์Šคํ„ฐ์—์„œ ์ฒ˜๋ฆฌ๋œ ๋‚ด์šฉ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋กœ ๊ธฐ๋ก๋˜๊ณ , ๊ทธ ๋‚ด์šฉ์ด ์Šฌ๋ ˆ์ด๋ธŒ MySQL ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜์–ด ์žฌ์‹คํ–‰ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ์— SQL ๋ฌธ์žฅ์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์„ ๋ฌธ์žฅ ๊ธฐ๋ฐ˜ ๋ณต์ œ ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ณ€๊ฒฝ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์„ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ๋ณต์ œ ๋ผ๊ณ ํ•œ๋‹ค. SQL ๊ธฐ๋ฐ˜์˜ ๋ณต์ œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด REPEATABLE-READ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋กœ ์ธํ•ด InnoDB ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋ ˆ์ฝ”๋“œ ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ž ๊ทธ๋Š” ๊ฐญ๋ฝ์ด๋‚˜ ๋„ฅ์ŠคํŠธ ํ‚ค ๋ฝ์ด ํ•„์š”ํ•ด์ง„๋‹ค. ๋ฐ˜๋ฉด ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ๋ณต์ œ๋Š” 
๋งˆ์Šคํ„ฐ ์Šฌ๋ ˆ์ด๋ธŒ MySQL ์„œ๋ฒ„ ๊ฐ„์˜ ๋„คํ‹ฐ์›Œํฌ ํŠธ๋ ˆํ”ฝ์„ ๋งŽ์ด ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ READ-COMMITTED ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ InnoDB ํ…Œ์ด๋ธ”์—์„œ ์ž ๊ธˆ์˜ ๊ฒฝํ•ฉ์€ ์ค„์–ด๋“ ๋‹ค.

 

6. InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜

InnoDB๋Š” MySQL์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ค‘์—์„œ ๊ฑฐ์˜ ์œ ์ผํ•˜๊ฒŒ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋•Œ๋ฌธ์— ๋†’์€ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ๋˜ํ•œ ํ•œ์ •์ ์ด๋ฉฐ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

6.1 InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ํŠน์„ฑ

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

6.2 InnoDB ๋ฒ„ํผํ’€

  • InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์œผ๋กœ, ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋‚˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•ด ๋‘๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ ์ผ๊ด„ ์ž‘์—…์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฒ„ํผ ์—ญํ• ๋„ ๊ฐ™์ด ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํผ ํ’€์ด ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ๋žœ๋คํ•œ ๋””์Šคํฌ ์ž‘์—…์˜ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„ํผ ํ’€์˜ ํฌ๊ธฐ๋Š” innodb_buffer_pool_size๋กœ ์„ค์ •ํ•˜๋Š”๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒด ์žฅ์ฐฉ๋œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ 50 ~ 80% ์ˆ˜์ค€์—์„œ ๋ฒ„ํผ ํ’€์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ์™€ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ๋„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•ด์„œ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • InnoDB ๋ฒ„ํผ ํ’€์€ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ Dirty page๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค).
  • ์ด๋Ÿฌํ•œ Dirty page๋Š” InnoDB์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋˜๋Š” ์–ด๋–ค ์กฐ๊ฑด์ด ๋˜๋ฉด ์ฒดํฌํฌ์ธํŠธ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋–„ Write ์Šค๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋งŒ ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

6.3 ์–ธ๋‘(Undo)๋กœ๊ทธ

์–ธ๋‘ ์˜์—ญ์€ UPDATE ๋ฌธ์žฅ์ด๋‚˜ DELETE์™€ ๊ฐ™์€ ๋ฌธ์žฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์„ ๋–„ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์˜ ๋ฐ์ดํ„ฐ(์ด์ „ ๋ฐ์ดํ„ฐ)๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์–ธ๋‘์˜ ๋ฐ์ดํ„ฐ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ, ํŠธ๋žœ์žญ์…˜์˜ ๋กค๋ฐฑ ๋Œ€๋น„์šฉ์œผ๋กœ ์–ธ๋‘ ์˜์—ญ์˜ ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ(๋ฐ์ดํ„ฐ/์ธ๋ฑ์Šค ๋ฒ„ํผ)๋กœ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ, ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋†’์€ ๋™์‹œ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

6.4 ์ธ์„œํŠธ ๋ฒ„ํผ(Insert Buffer)

  • RDBMS์—์„œ ๋ ˆ์ฝ”๋“œ๊ฐ€ INSERT๋˜๊ฑฐ๋‚˜ UPDATE ๋  ๋•Œ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—… ๋ฟ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ํฌํ•จ๋œ ์ธ๋ฑ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์ธ๋ฑ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์€ ๋žœ๋คํ•˜๊ฒŒ ๋””์Šคํฌ๋ฅผ ์ฝ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ ์Šค๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ด ์ž‘์—…์€ ์ƒ๋‹นํžˆ ๋งŽ์€ ์ž์›์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ InnoDB๋Š” ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์žˆ์œผ๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์™€์„œ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ด๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ž„์‹œ ๊ณต๊ฐ„์— ์ €์žฅํ•ด ๋‘๊ณ  ๋ฐ”๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ธ์„œํŠธ ๋ฒ„ํผ(Insert Buffer)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•˜๋Š” ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ์ธ์„œํŠธ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ธ์„œํŠธ ๋ฒ„ํผ์— ์ž„์‹œ๋กœ ์ €์žฅ๋ผ ์žˆ๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ ์กฐ๊ฐ์€ ์ดํ›„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๋ณ‘ํ•ฉ๋˜๋Š”๋ฐ, ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ธ์„œํŠธ ๋ฒ„ํผ ๋จธ์ง€ ์Šค๋ ˆ๋“œ(Merge thread)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

MySQL 5.5๋ถ€ํ„ฐ๋Š” innod_change_buffering์ด๋ผ๋Š” ์„ค์ • ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ƒˆ๋กœ ๋„์ž…๋˜์–ด ์ž‘์—…์˜ ์ข…๋ฅ˜๋ณ„๋กœ ์ธ์„œํŠธ ๋ฒ„ํผ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ธ์„œํŠธ ๋ฒ„ํผ๊ฐ€ ๋น„ํšจ์œจ์ ์ผ ๋•Œ๋Š” ์ธ์„œํŠธ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ๋์Šต๋‹ˆ๋‹ค.

6.5 ๋ฆฌ๋‘(Redo) ๋กœ๊ทธ ๋ฐ ๋กœ๊ทธ ๋ฒ„ํผ

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•ด ๋‘๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” InnoDB ๋ฒ„ํผ ํ’€๋กœ๋งŒ์€ ACID๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋Š” ๋กœ๊ทธ ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๋ฆฌ๋‘ ๋กœ๊ทธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋‘ ๋กœ๊ทธ ๋•๋ถ„์— DBMS ๋ฐ์ดํ„ฐ๋Š” ๋ฒ„ํผ๋ง์„ ํ†ตํ•ด ํ•œ๊บผ๋ฒˆ์— ๋””์Šคํฌ์— ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  ๊ทธ๋กœ ์ธํ•ด ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์‚ฌ์šฉ๋Ÿ‰(ํŠนํžˆ ๋ณ€๊ฒฝ ์ž‘์—…)์ด ๋งค์šฐ ๋งŽ์€ DBMS ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฆฌ๋‘ ๋กœ๊ทธ์˜ ๊ธฐ๋ก ์ž‘์—…์ด ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ACID ์†์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ˆ˜์ค€์—์„œ ๋ฒ„ํผ๋งํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฆฌ๋‘ ๋กœ๊ทธ ๋ฒ„ํผ๋ง์— ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„์ด ๋กœ๊ทธ ๋ฒ„ํผ๋ผ ํ•ฉ๋‹ˆ๋‹ค.

6.6 MVCC(Multi Version Concirrency Control)

์ผ๋ฐ˜์ ์œผ๋กœ ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” DBMS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ, MVCC์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€
์•Š๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ
๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. InnoDB๋Š” ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ 1๋ฒˆ ์‚ฌ์šฉ์ž๊ฐ€ 'A' ๋‚ด์šฉ์—์„œ 'B' ๋‚ด์šฉ์œผ๋กœ UPDATE ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.

  • InnoDB ๋ฒ„ํผ ํ’€ : ์ˆ˜์ •๋œ 'B' ๋‚ด์šฉ์ด ๋ฐ˜์˜(๋ ˆ์ฝ”๋“œ ์ „์ฒด)
  • Undo ๋กœ๊ทธ : ์ˆ˜์ • ์ „์˜ 'A' ๋‚ด์šฉ์ด ๋ฐ˜์˜(PK, ๋ฉ”ํƒ€์ •๋ณด ๋ฐ ์ˆ˜์ •๋œ ์นผ๋Ÿผ๋งŒ ๋ฐฑ์—…)
  • ์ด ๋•Œ ์ปค๋ฐ‹์ด๋‚˜ ๋กค๋ฐฑ์ด ์•„์ง ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์—์„œ, 2๋ฒˆ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

์ด ์งˆ๋ฌธ์˜ ๋‹ต์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ DBMS ์—์„œ๋Š” MVCC ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

  • READ_UNCOMMITTED : InnoDB ๋ฒ„ํผ ํ’€์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ณ€๊ฒฝ๋œ 'B' ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • READ_COMMITTED ์ด์ƒ : ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๋‘ ์˜์—ญ์˜ 'A' ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

6.7 ์ž ๊ธˆ ์—†๋Š” ์ผ๊ด€๋œ ์ผ๊ธฐ(Non-locking consistent read)

  • InnoDB์—์„œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด SERIALIZABLE์ด ์•„๋‹Œ READ-UNCOMMITTED์ด์ƒ์˜ ์ˆ˜์ค€์ธ ๊ฒฝ์šฐ, INSERT์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ ์ฝ๊ธฐ(SELECT) ์ž‘์—…์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ ์ž‘์—…๊ณผ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ์ž ๊ธˆ์„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ์œผ๋ ค๋Š” ํ–‰์ด ์‹ค์ œ๋กœ lock์ด ๊ฑธ๋ ค์žˆ์–ด๋„ ์ฝ์„ ๋•Œ๋Š” undo์˜์—ญ์—์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— lock์ด ๊ฑธ๋ฆฌ๋“  ๋ง๋“  ์ƒ๊ด€์—†์ด ์ด์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ 

  • [book] ์ด์„ฑ์šฑ. ใ€Ž๊ฐœ๋ฐœ์ž์™€ DBA๋ฅผ ์œ„ํ•œ Real MySQLใ€. ์œ„ํ‚ค๋ถ์Šค. 2012.
  • [Blog] Real MySQL ์ •๋ฆฌ, 3์žฅ MySQL ์•„ํ‚คํ…์ฒ˜: https://junghyungil.tistory.com/135
  • [Blog] MySQL ์•„ํ‚คํ…์ณ: https://enterone.tistory.com/223
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Study: ComputerScience(CS) > CS: Database(SQL)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] RDB ํŠธ๋žœ์žญ์…˜ (feat. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€)  (0) 2022.11.08
[DB] DB ๋ฐ์ดํ„ฐ dumpํ•˜๋Š” ๋ฐฉ๋ฒ• : MySQL ๋ฐ์ดํ„ฐ๋ฅผ export, import ํ•˜์ž! (feat. mysqldump)  (0) 2022.09.09
[DB] ์ปค๋„ฅ์…˜ ํ’€(DBCP)์ด๋ž€? DB Connection Pool  (0) 2022.08.22
[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šฉ์–ด์ •๋ฆฌ  (0) 2022.04.16
    'Study: ComputerScience(CS)/CS: Database(SQL)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [DB] RDB ํŠธ๋žœ์žญ์…˜ (feat. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€)
    • [DB] DB ๋ฐ์ดํ„ฐ dumpํ•˜๋Š” ๋ฐฉ๋ฒ• : MySQL ๋ฐ์ดํ„ฐ๋ฅผ export, import ํ•˜์ž! (feat. mysqldump)
    • [DB] ์ปค๋„ฅ์…˜ ํ’€(DBCP)์ด๋ž€? DB Connection Pool
    • [DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šฉ์–ด์ •๋ฆฌ
    DrawingProcess
    DrawingProcess
    ๊ณผ์ •์„ ๊ทธ๋ฆฌ์ž!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”