MySQL Engine Lock

MySQL ์—”์ง„ ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ์€ MySQL ์„œ๋ฒ„์˜ ์ƒ์œ„ ๋ ˆ๋ฒจ์—์„œ ๋™์ž‘ํ•œ๋‹ค.

  • ์‚ฌ์šฉ๋˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ์ข…๋ฅ˜์™€ ๊ด€๊ณ„ ์—†์ด ์ ์šฉ

  • ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด์™€ ๊ฐ™์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋„“์€ ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์นจ

๊ธ€๋กœ๋ฒŒ ๋ฝ(Global Lock)

  • ๋ฒ”์œ„: MySQL ์„œ๋ฒ„ ์ „์ฒด์— ์˜ํ–ฅ

  • ๋™์ž‘: ํ•œ ์„ธ์…˜์—์„œ ๊ธ€๋กœ๋ฒŒ ๋ฝ์„ ํš๋“ํ•˜๋ฉด, ํ•ด๋‹น ์„ธ์…˜์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ์„ธ์…˜์—์„œ SELECT๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋ถ€๋ถ„์˜ DDL, DML ๋Œ€๊ธฐ

  • ํš๋“ ๋ฐ ํ•ด์ œ: FLUSH TABLES WITH READ LOCK ๋ช…๋ น์œผ๋กœ ํš๋“ํ•˜๊ณ , UNLOCK TABLES ๋ช…๋ น์œผ๋กœ ํ•ด์ œ

๋ฐฑ์—… ๋ฝ(Backup Lock)

์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ํ™˜๊ฒฝ์—์„œ ์˜จ๋ผ์ธ ๋ฐฑ์—…์„ ์œ„ํ•ด ๋„์ž…๋œ ๋” ๊ฐ€๋ฒผ์šด ํ˜•ํƒœ์˜ ๋ฝ์œผ๋กœ, ์•„๋ž˜์˜ ์ž‘์—…๋งŒ ์ œํ•œ๋˜๊ณ  ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ํ—ˆ์šฉ๋œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํ…Œ์ด๋ธ” ๋“ฑ์˜ ๋ณ€๊ฒฝ ๋ฐ ์‚ญ์ œ

  • REPAIR TABLE / OPTIMIZE TABLE ๋ช…๋ น

  • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

์ฃผ๋กœ ๋ณต์ œ(Replication) ํ™˜๊ฒฝ์˜ ๋ ˆํ”Œ๋ฆฌ์นด ์„œ๋ฒ„์—์„œ ๋ฐฑ์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์•ˆ์ „ํ•œ ๋ฐฑ์—…์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

ํ…Œ์ด๋ธ” ๋ฝ(Table Lock)

๊ฐœ๋ณ„ ํ…Œ์ด๋ธ” ๋‹จ์œ„๋กœ ์„ค์ •๋˜๋Š” ์ž ๊ธˆ์œผ๋กœ, ๋ช…์‹œ์  ๋˜๋Š” ๋ฌต์‹œ์ ์œผ๋กœ ํŠน์ • ํ…Œ์ด๋ธ”์˜ ๋ฝ์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ช…์‹œ์  ๋ฝ

    • LOCK TABLES tbl_name [READ | WRITE] ๋ช…๋ น์œผ๋กœ ํš๋“

    • UNLOCK TABLES ๋ช…๋ น์œผ๋กœ ํ•ด์ œ

    • ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ผ์ด ๊ฑฐ์˜ ์—†์Œ

    • ๋ช…์‹œ์ ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ž ๊ทธ๋Š” ์ž‘์—…์€ ๊ธ€๋กœ๋ฒŒ ๋ฝ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋‹ค๋ฅธ ์ž‘์—…์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นจ

  • ๋ฌต์‹œ์  ๋ฝ

    • ALTER TABLE๊ณผ ๊ฐ™์€ DDL ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ MySQL ์„œ๋ฒ„๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ…Œ์ด๋ธ”์— ์ž ๊ธˆ ์„ค์ •

    • InnoDB ์—”์ง„์—์„œ๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ฐจ์›์—์„œ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— DML ์ฟผ๋ฆฌ๋กœ ๋ฌต์‹œ์  ๋ฝ์ด ์„ค์ •๋˜์ง€ ์•Š์Œ(MyISAM์—์„  ๋ฐœ์ƒ)

๋„ค์ž„๋“œ ๋ฝ(Named Lock)

ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ ˆ์ฝ”๋“œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ, ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์ž„์˜์˜ ๋ฌธ์ž์—ด(String)์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ํš๋“ํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

  • ๋„ค์ž„๋“œ ๋ฝ์€ ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ž‘ํ•˜์—ฌ, ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋˜์–ด๋„ ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜์ง€ ์•Š์Œ(๋ช…์‹œ์ ์œผ๋กœ RELEASE_LOCK์„ ํ˜ธ์ถœ ํ•„์š”)

  • ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ํŠน์ • ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ๋ฝ(Distributed Lock)์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ

์‘์šฉ - ๋ถ„์‚ฐ ๋ฝ

๋„ค์ž„๋“œ ๋ฝ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…์‹œ์ ์œผ๋กœ ๋ฝ์„ ์„ค์ •ํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ถ„์‚ฐ ๋ฝ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ(Metadata Lock)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด(ํ…Œ์ด๋ธ”, ๋ทฐ ๋“ฑ)์˜ ๊ตฌ์กฐ๋‚˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ํ•  ๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ •์˜ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ํš๋“ํ•˜๋Š” ์ž ๊ธˆ์ด๋‹ค.

์œ„์™€ ๊ฐ™์ด RENAME TABLE ๋ช…๋ น์„ ๋‘ ๋ฒˆ์— ๊ฑธ์ณ ์‹คํ–‰ํ•˜๋ฉด, ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์—์„œ rank ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ์„ ํš๋“ํ•œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์–ด ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์—์„œ ์ž ๊ธˆ ํš๋“์— ์‹คํŒจํ•œ๋‹ค.

์‘์šฉ - ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ณ€๊ฒฝ

MySQL์—์„œ๋Š” Online DDL ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ์ธ๋ฑ์Šค ์žฌ๊ตฌ์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์‹ ๊ทœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ณต์‚ฌํ•œ ํ›„, ์ตœ์ข…์ ์œผ๋กœ RENAME TABLE ๋ช…๋ น์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ์‹์ด ํšจ๊ณผ์ ์ด๋‹ค.

  1. ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์˜ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

  2. ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ Primary Key ๊ธฐ์ค€ ๋ฒ”์œ„๋ณ„๋กœ ๋ณต์‚ฌ

  3. autocommit = 0 ์„ค์ •

  4. ๋Œ€์ƒ ํ…Œ์ด๋ธ”๋“ค์— WRITE ๋ฝ ์„ค์ •

  5. ์ตœ๊ทผ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ๋ฐ COMMIT

  6. ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๊ต์ฒด (RENAME)

  7. ๋ฝ ํ•ด์ œ ๋ฐ ๊ธฐ์กด ํ…Œ์ด๋ธ” ์‚ญ์ œ

MDL ์ฃผ์˜์‚ฌํ•ญ

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ(MDL)์€ ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด, ํŠธ๋žœ์žญ์…˜์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ๋Š” ์˜๋„์น˜ ์•Š๊ฒŒ MDL๋กœ ์ธํ•ด ๋Œ€๊ธฐ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

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

  2. RENAME TABLE์ด๋‚˜ ALTER TABLE๊ณผ ๊ฐ™์€ DDL์€ ๋ฐฐํƒ€์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ(EXCLUSIVE)์„ ํ•„์š”

  3. ๋•Œ๋ฌธ์— ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋– ํ•œ ํ™œ์„ฑ ํŠธ๋žœ์žญ์…˜๋„ ์—†์„ ๋•Œ๋งŒ ํš๋“ ๊ฐ€๋Šฅ

๋‹จ์ˆœํžˆ ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ์ž‘์—…์ด ๊ณ„์† ๋Œ€๊ธฐํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋‹ค๋ฅธ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์งˆ ์ˆ˜ ์žˆ์–ด ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

  1. RENAME TABLE ์„ธ์…˜ 1์— ์˜ํ•ด ๋ฐฐํƒ€์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ ํš๋“ ๋Œ€๊ธฐ

  2. ์ดํ›„์˜ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ์„ธ์…˜ 1์˜ ํŠธ๋žœ์žญ์…˜๊ณผ ์ƒ๊ด€ ์—†์ด RENAME TABLE ๋ช…๋ น์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

  3. ์ƒˆ๋กœ์šด ์ฟผ๋ฆฌ๋“ค์ด ์—ฐ์‡„์ ์œผ๋กœ ์Œ“์ด๊ฒŒ ๋˜๋ฉด์„œ DB ์ปค๋„ฅ์…˜์ด ๋ชจ๋‘ ์†Œ์ง„๋˜์–ด ์„œ๋น„์Šค ์žฅ์• ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Œ

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?