๐Ÿ›ข๏ธDatabase

[Real MySQL 8.0] InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ (MVCC, ๋ฐ๋“œ๋ฝ ๊ฐ์ง€, ...)

DevPoong 2023. 8. 7. 14:22

MySQL 5.5 ๋ฒ„์ „ ์ดํ›„ ๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

1. InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

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

 

 

1-1. PK์— ์˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง

InnoDB์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์€ ๊ธฐ๋ณธ์ ์œผ๋กœ PK๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง๋˜์–ด ๋””์Šคํฌ์— ์ €์žฅ๋˜๋ฉฐ,
๋ชจ๋“  ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋Š” ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ ๋Œ€์‹  PK์˜ ๊ฐ’์„ ๋…ผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

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

MyISAM ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ‚ค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

1-2. ์™ธ๋ž˜ ํ‚ค ์ง€์›

์™ธ๋ž˜ ํ‚ค ์ง€์›์€ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋ ˆ๋ฒจ์—์„œ ์ง€์›ํ•˜๋ฉฐ, MyISAM์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋‹ค.

InnoDB์—์„œ ์™ธ๋ž˜ ํ‚ค๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”๊ณผ ์ž์‹ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์ƒ์„ฑ์ด ํ•„์š”ํ•˜๊ณ , ๋ณ€๊ฒฝ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์ด๋‚˜ ์ž์‹ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ž ๊ธˆ์ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ์ „ํŒŒ๋˜๊ณ , ๊ทธ๋กœ ์ธํ•ด ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ๋„ ์™ธ๋ž˜ ํ‚ค์˜ ์กด์žฌ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

foreign_key_checks ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ OFF๋กœ ์„ค์ •ํ•˜๋ฉด ์™ธ๋ž˜ ํ‚ค ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ฒดํฌ ์ž‘์—…์„ ์ผ์‹œ์ ์œผ๋กœ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๊ณ  ์ˆ˜๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๊ฑฐ๋‚˜ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๋“ฑ์˜ ๊ด€๋ฆฌ ์ž‘์—…์„ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ถ€๋ชจ์™€ ์ž์‹ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๊นจ์ง„ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ฉด์€ ์•ˆ๋˜๊ณ  ๋ฌด์กฐ๊ฑด ์ผ๊ด€์„ฑ์„ ๋งž์ถฐ์ค€ ํ›„์— ์™ธ๋ž˜ ํ‚ค ์ฒดํฌ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ํ•ด์•ผ ํ•œ๋‹ค.

 

 

1-3. MVCC ( Multi Version Concurrency Control)

MVCC์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ ๋ฒ„์ „์ด๋ž€ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ„์ „์ด ๋™์‹œ์— ๊ด€๋ฆฌ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.
InnoDB๋Š” ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. 

ํ•œ Member ํ…Œ์ด๋ธ”์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

INSERT INTO MEMBER (m_id, m_name) VALUES (12, '๋ฐ๋ธŒํ’');

INSERT๋ฌธ์ด ์‹คํ–‰๋˜๋ฉด InnoDB ๋ฒ„ํผํ’€๊ณผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ•์ ๋˜์–ด ์žˆ๋‹ค.

๊ทธ ํ›„์—, 12๋ฒˆ์˜ ์ด๋ฆ„์„ 'ํ™๊ธธ๋™'์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ • ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค.

UPDATE member SET m_name = 'ํ™๊ธธ๋™' where m_id = 12;

UPDATE๋ฌธ์ด ์‹คํ–‰๋˜๋ฉด InnoDB ๋ฒ„ํผํ’€์—๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์ธ 'ํ™๊ธธ๋™'์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—๋Š” ์ฒดํฌํฌ์ธํŠธ๋‚˜ Write Thread์— ์˜ํ•ด ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. (InnoDB๊ฐ€ ACID๋ฅผ ๋ณด์žฅํ•˜๊ธฐ์— ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ฒ„ํผ ํ’€๊ณผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ๋™์ผํ•œ ์ƒํƒœ๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋„ ๋จ)
๊ทธ๋ฆฌ๊ณ  ์–ธ๋‘ ๋กœ๊ทธ์—๋Š” ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „์˜ ๋ฐ์ดํ„ฐ์ค‘์— m_name ์ปฌ๋Ÿผ์˜ ๊ฐ’๋งŒ ๋ณต์‚ฌํ•ด์„œ ์ €์žฅํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, (12, '๋ฐ๋ธŒํ’')์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. 

 

 

์•„์ง COMMIT์ด๋‚˜ ROLLBACK ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๋ฉด ์–ด๋””์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ• ์ง€๊ฐ€ ์ฃผ์š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” MYSQL ์„œ๋ฒ„์˜ ์‹œ์Šคํ…œ ๋ณ€์ˆ˜(transaction_isolation)์— ์„ค์ •๋œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค.
๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด READ_UNCOMMITTED ์ธ ๊ฒฝ์šฐ์—๋Š” InnoDB์˜ ๋ฒ„ํผ ํ’€์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋“  ์•„๋‹ˆ๋“  ๋ณ€๊ฒฝ๋œ ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE์˜ ๊ฒฝ์šฐ์—๋Š” ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— InnoDB ๋ฒ„ํผ ํ’€์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์žˆ๋Š” ๋‚ด์šฉ ๋Œ€์‹  ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „์˜ ๋‚ด์šฉ์„ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ์–ธ๋‘ ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. 

 

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ DBMS์—์„œ๋Š” MVCC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ๋‘๊ฐ€์ง€ ๋ฒ„์ „์ด ์œ ์ง€๋˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ๋ณด์—ฌ์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ตฌ์กฐ๋‹ค.

 

 

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

COMMIT์ด ๋œ๋‹ค๊ณ  ํ•ด์„œ ์–ธ๋‘ ์˜์—ญ์˜ ๋ฐฑ์—… ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ญ์ƒ ๋ฐ”๋กœ ์‚ญ์ œ๋˜๋Š”๊ฑด ์•„๋‹ˆ๊ณ , ์–ธ๋‘ ์˜์—ญ์„ ํ•„์š”๋กœ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ด ๋” ์ด์ƒ ์—†์„ ๋•Œ ์‚ญ์ œ๋œ๋‹ค.

 

 

1-4. ์ž ๊ธˆ ์—†๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ (Non-Locking Consistent Read)

InnoDB๋Š” MVCC ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ์ž ๊ธˆ์„ ๊ฑธ์ง€ ์•Š๊ณ  ์ฝ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ž ๊ธˆ์„ ๊ฑธ์ง€ ์•Š์Œ์œผ๋กœ ์ฝ๊ธฐ ์ž‘์—…์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ์ฝ๊ธฐ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด SERIALIZABLE์ด ์•„๋‹Œ READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ ์ˆ˜์ค€์ธ ๊ฒฝ์šฐ์—๋Š” INSERT์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ ์ฝ๊ธฐ ์ž‘์—…์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ ์ž‘์—…๊ณผ ๊ด€๊ณ„ ์—†์ด ํ•ญ์ƒ ์ž ๊ธˆ์„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‹คํ–‰๋œ๋‹ค.

์–ธ๋‘๋กœ๊ทธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค.

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

 

 

1-5. ์ž๋™ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€

InnoDB๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ž ๊ธˆ์ด ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด ์ž ๊ธˆ ๋Œ€๊ธฐ ๋ชฉ๋ก์„ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
InnoDB๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž ๊ธˆ ๋Œ€๊ธฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์ง„ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์ฐพ์•„์„œ ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.

๊ฐ•์ œ ์ข…๋ฃŒ์˜ ๊ธฐ์ค€์€ ์–ธ๋‘ ๋กœ๊ทธ์˜ ์–‘์ด๋ฉฐ, ์–‘์ด ์ ์„์ˆ˜๋ก ๋กค๋ฐฑ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. ์ด์œ ๋Š” ์˜ˆ์ƒ๋˜๋“ฏ์ด ๋กค๋ฐฑ์„ ํ•ด๋„ ์–ธ๋‘ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด ์ ์œผ๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ๊ฐ•์ œ ๋กค๋ฐฑ์œผ๋กœ ์ธํ•œ MySQL ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋„ ๋œ ์œ ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

InnoDB๋Š” ์ƒ์œ„ ๋ ˆ์ด์–ด์ธ MySQL ์—”์ง„์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ํ…Œ์ด๋ธ” ์ž ๊ธˆ์€ ๋ณผ ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€๊ฐ€ ๋ถˆํ™•์‹คํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋•Œ innodb_table_locks ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋‚ด๋ถ€์˜ ๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ๊นŒ์ง€ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ํ•ด๋‹น ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ํ™œ์„ฑํ™” ํ•˜๋ฉด ๋œ๋‹ค.

๋™์‹œ ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋งค์šฐ ๋งŽ์•„์ง€๊ฑฐ๋‚˜ ๊ฐ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€์ง„ ์ž ๊ธˆ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Š๋ ค์ง„๋‹ค. ๋˜ํ•œ, ๋” ๋งŽ์€ CPU ์ž์›์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์„œ๋น„์Šค์— ์•…์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€  innodb_deadlock_detect ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ OFF๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ์˜ ์ž‘๋™์„ ์ค‘์ง€์‹œํ‚ค๊ณ , ์ค‘์ง€๋กœ ์ธํ•œ ๋ฐ๋“œ๋ฝ ๋ฌธ์ œ์˜ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด innodb_lock_wait_timeout ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ฐ๋“œ๋ฝ ์ƒํ™ฉ์—์„œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์š”์ฒญ์ด ์‹คํŒจํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

1-6. ์ž๋™ํ™”๋œ ์žฅ์•  ๋ณต๊ตฌ

InnoDB๋Š” ์†์‹ค์ด๋‚˜ ์žฅ์• ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ ์šฉ๋˜์–ด ์žˆ๋‹ค.

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

InnoDB ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ MySQL ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ•ญ์ƒ ์ž๋™ ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์†์ƒ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™ ๋ณต๊ตฌ๋ฅผ ๋ฉˆ์ถ”๊ณ  ์ข…๋ฃŒ๋ผ ๋ฒ„๋ฆฐ๋‹ค.

์ด๋•Œ๋Š” innodb_force_recovery ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ 1~6๊นŒ์ง€์˜ ๊ฐ’ ์„ค์ •์„ ํ†ตํ•ด ๋‹จ๊ณ„ ๋ณ„๋กœ ์„ ๋ณ„์  ์ž๋™๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ž์„ธํ•œ ์„ค์ •์€ ํ•„์š”ํ•  ๋•Œ ์ฐพ์•„๋ณด๊ธฐ๋กœ ํ•˜๊ณ , ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์•Œ์•„๋ณด์ž.

  • InnoDB์˜ ๋กœ๊ทธ ํŒŒ์ผ์ด ์†์ƒ๋˜์—ˆ๋‹ค๋ฉด 6์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์žฌ๊ธฐ๋™ํ•œ๋‹ค.
  • InnoDB ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์†์ƒ๋˜์—ˆ๋‹ค๋ฉด 1๋กœ ์„ค์ •ํ•˜๊ณ  ์žฌ๊ธฐ๋™ํ•œ๋‹ค.
  • ์–ด๋–ค ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค๋ฉด innodb_force_recovery ๊ฐ’์„ 1๋ถ€ํ„ฐ 6๊นŒ์ง€ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ์žฌ๊ธฐ๋™ ํ•ด๋ณธ๋‹ค.

ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋•Œ๋Š” ๋ฐฑ์—…์„ ์ด์šฉํ•ด ๋‹ค์‹œ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ฐ–์— ์—†๋‹ค. ์ตœ๋Œ€ํ•œ ์žฅ์•  ์ด์ „ ์‹œ์ ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์†์‹ค์ด ๊ทธ๋‚˜๋งˆ ์ ์„ ์ˆ˜ ์žˆ๋‹ค.