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 ๋ช
๋ น์ผ๋ก ๊ต์ฒดํ๋ ๋ฐฉ์์ด ํจ๊ณผ์ ์ด๋ค.
์๋ก์ด ๊ตฌ์กฐ์ ํ ์ด๋ธ ์์ฑ
๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ถํฐ Primary Key ๊ธฐ์ค ๋ฒ์๋ณ๋ก ๋ณต์ฌ
autocommit = 0์ค์ ๋์ ํ ์ด๋ธ๋ค์ WRITE ๋ฝ ์ค์
์ต๊ทผ ๋ฐ์ดํฐ ๋ณต์ฌ ๋ฐ COMMIT
ํ ์ด๋ธ ์ด๋ฆ ๊ต์ฒด (RENAME)
๋ฝ ํด์ ๋ฐ ๊ธฐ์กด ํ ์ด๋ธ ์ญ์
MDL ์ฃผ์์ฌํญ
๋ฉํ๋ฐ์ดํฐ ๋ฝ(MDL)์ ํธ๋์ญ์ ๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์์ด, ํธ๋์ญ์ ์ด ํ์ฑํ๋ ์ํ์์๋ ์๋์น ์๊ฒ MDL๋ก ์ธํด ๋๊ธฐ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
ํ ์ด๋ธ์ ๋ํ ์ฟผ๋ฆฌ(SELECT ํฌํจ)๊ฐ ์คํ๋๋ฉด, ํด๋น ์ฟผ๋ฆฌ๊ฐ ์ํ ํธ๋์ญ์ ์ด ๋๋ ๋๊น์ง ํ ์ด๋ธ์ ๋ํ ๊ณต์ ๋ฉํ๋ฐ์ดํฐ ๋ฝ ํ๋
RENAME TABLE์ด๋ALTER TABLE๊ณผ ๊ฐ์ DDL์ ๋ฐฐํ์ ๋ฉํ๋ฐ์ดํฐ ๋ฝ(EXCLUSIVE)์ ํ์๋๋ฌธ์ ํด๋น ํ ์ด๋ธ์ ์ฌ์ฉํ๋ ์ด๋ ํ ํ์ฑ ํธ๋์ญ์ ๋ ์์ ๋๋ง ํ๋ ๊ฐ๋ฅ
๋จ์ํ ํ ์ด๋ธ ๋ณ๊ฒฝ ์์ ์ด ๊ณ์ ๋๊ธฐํ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ์๋๋ผ, ๋ค๋ฅธ ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ์ ๋น ์ง ์ ์์ด ์ฃผ์ํด์ผ ํ๋ค.
RENAME TABLE์ธ์ 1์ ์ํด ๋ฐฐํ์ ๋ฉํ๋ฐ์ดํฐ ๋ฝ ํ๋ ๋๊ธฐ์ดํ์ ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ์ธ์ 1์ ํธ๋์ญ์ ๊ณผ ์๊ด ์์ด
RENAME TABLE๋ช ๋ น์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ์๋ก์ด ์ฟผ๋ฆฌ๋ค์ด ์ฐ์์ ์ผ๋ก ์์ด๊ฒ ๋๋ฉด์ DB ์ปค๋ฅ์ ์ด ๋ชจ๋ ์์ง๋์ด ์๋น์ค ์ฅ์ ๋ก ์ด์ด์ง ์ ์์
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?