ํฐ์คํ ๋ฆฌ ๋ทฐ
MySQL MDL(metadata_locks): insert ์ฟผ๋ฆฌ๊ฐ ๋ณ๋ชฉ ์ํ์ ๋น ์ง๋ ์ด์
mokhs 2025. 2. 16. 22:15์ต๊ทผ์ DDL์ ์คํ์ํค๋ ๊ณผ์ ์์ ๋ชจ๋ Insert ์ฟผ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ์ ๋น ์ ธ ๋ฐ๋ฆฌ๋ ํ์์ ๋ฐ๊ฒฌํด์ ์ ํํ ์์ธ ๋ถ์์ ์งํํ๊ณ ๊ทธ ๋ด์ฉ์ ๊ธฐ๋กํฉ๋๋ค.
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ํฉ
1. datagrip์์ ๋ฌด๊ฑฐ์ด select ์ฟผ๋ฆฌ ์คํ
2. datagrip์์ ์๋ก์ด ์ธ์
์ผ๋ก ALTER TABLE ์ฟผ๋ฆฌ๋ฅผ online DDL๋ก ์คํ
3. server application์์ Insert ์ฟผ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ์ ๋น ์ง
์ผ๋ฐ์ ์ผ๋ก ๋ดค์ ๋๋ ์ค์ datagrip ๋ญ๊ฐ ๋ฌธ์ ์ง? ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋๋ฐ์. ์์ธํ ๋ด์ฉ์ ์ข ๋ ์๋์์ ํ์ด๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ ์์ธ์ ๋ค์๊ณผ ๊ฐ์์ด์
MySQL์์ ALTER TABLE ์ฟผ๋ฆฌ๋ ์คํ์ ์ํด์ table metadata lock(=MDL)์ ํ๋ํด์ผ ํ๊ณ ์ด ๋, Exclusive Lock(๋ฐฐํ์ ๋ฝ)์ ํ์๋ก ํ๋๋ฐ์.
์ ์ํฉ์์ ๋ฌธ์ ๋ ALTER TABLE ์ฟผ๋ฆฌ๊ฐ *์ด๋ค ์ด์ ๋ก ์ธํด Exclusive Lock์ ํ๋ํ์ง ๋ชปํด์ ๋๊ธฐํ๋ ์ํฉ์ด์๊ณ
์ดํ์ ๋ค์ด์ค๋ Insert ์ฟผ๋ฆฌ๋ Shared Lock(๊ณต์ ๋ฝ)์ ํ์๋ก ํ๋๋ฐ, Exclusive Lock์ด MySQL์์ ์ฒ๋ฆฌ ์ฐ์ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ์ํ์ ๋น ์ง๊ฒ ๋์์ต๋๋ค.
์์์ ์ธ๊ธํ *์ด๋ค ์ด์ ์ ์ ์ฒด๋ "datagrip์์ ๋ฌด๊ฑฐ์ด select ์ฟผ๋ฆฌ ์คํ"์ด์๊ณ , ์ด select ์ฟผ๋ฆฌ๊ฐ ์๋์น ์๊ฒ Shared Lock์ ์ก๊ณ ์๋ ์ํฉ์ด์ฌ์ ALTER TABLE ์ฟผ๋ฆฌ๊ฐ Exclusive Lock์ ํ๋ํ ์ ์๋ ์ํฉ์ด๋ผ๋ ๊ฑธ ์์์ต๋๋ค.
์ฌ์ฐํด๋ณด๋ฉด ๋ฐ๋ก ์๋์ ๊ฐ์ ์ํฉ์ธ ๊ฑด๋ฐ์ ๐ค
์ค์ ๋ก metadata lock ํํฉ์ ํ์ธํ ์ ์๋ performance_schema.metadata_locks ํ
์ด๋ธ์
์ดํด๋ณด๋ฉด SHARED_READ LOCK์ด ์กํ์๋ ๊ฑธ ํ์ธํ ์ ์์์ต๋๋ค.
๊ทธ๋์ ์๋์น์๊ฒ ์ค๋ ๋์ํ๊ณ ์๋ select ์ฟผ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ KILL ํ๊ณ ALTER ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ ์ด์๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ์ค SELECT ์ฟผ๋ฆฌ์์ Transaction์ ๋ช ์์ ์ผ๋ก ์คํํ ์ ์ด ์์ต๋๋ค
์ฌ์ค ์ ์์๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ผ๋ถ๋ฌ ๋ช
์์ ์ผ๋ก Transaction์ ์์ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ์ํฉ์์ "datagrip์์ ๋ฌด๊ฑฐ์ด select ์ฟผ๋ฆฌ ์คํ"ํ ๋ Transacton์ ์คํํ ์ด์ ๋ ์์๊ณ ๋ช
์์ ์ผ๋ก ์คํํ ์ ์ด ์์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด Datagrip์์ ์๋์ผ๋ก Transaction์ ์ก์๋ค๋ ์ด์ผ๊ธฐ๊ฐ ๋๋๋ฐ, ์ ๊ทธ๋ฐ ๊ฑธ๊น์?
Transaction Mode : Auto
Datagrip์๋ Transaction Mode ์ต์
์ด ์กด์ฌํ๋๋ฐ์.
์ฌ๊ธฐ์ Auto ์ต์
์ ์ ํํ๋ฉด (์๋ง ๊ธฐ๋ณธ๊ฐ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค) Transaction commit์ Datagrip์์ ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
๋ณ๋ค๋ฅธ ์ถ๊ฐ ์ค์ ์์ด Datagrip์ ์ฌ์ฉํ์๊ณ ์ฌ๊ธฐ์ Isolation level์ด REPEATABLE READ(์ด๊ฒ๋ ๊ธฐ๋ณธ๊ฐ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค)๋ก ์กํ์์ด์ SELECT ์ฟผ๋ฆฌ ์คํ ์์ SHARED_READ lock์ด ์กํ๊ฒ ๋ ๊ฒ์ด์์ต๋๋ค.
์ดํ Action Item
์ ์ด์๋ฅผ ๊ฒช์ ์ดํ๋ก ์ฌ๋ฐ ๋ฐฉ์ง๋ ์ค์ํ๊ธฐ ๋๋ฌธ์ SHARED_READ lock์ ์ค๋ ์ก๊ณ ์๋ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์งํ๋ ์๋ํ๋ ๋ชจ๋ํฐ๋ง์ ์ํ ๊ณํ์ ์ธ์๋์๋๋ฐ์. ์์ธํ ๋ด์ฉ์ ๋ค๋ฅธ ๊ธ์์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :)
'BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL MDL(metadata_locks): Observability ํ๋ณดํ๊ธฐ (1) | 2025.03.16 |
---|---|
Zero Copy๋ฅผ ์์๋์? with kotlin S3 upload (1) | 2024.11.24 |
์ฐ๋ฆฌ ์๋ฒ์ OOMKilled ์ฅ์ ๊ฐ ๋ฐ์ํ์ด์ - ํ๊ณ ํธ (0) | 2024.11.10 |
MySQL ์คํ ๊ณํ ํบ์๋ณด๊ธฐ (2) | 2024.04.28 |
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(isolation level)์ด๋? (1) | 2024.03.03 |
- Total
- Today
- Yesterday
- mysql mdl
- ๋ฐฑ์ค
- ํ(Heap)
- AWS re:Invent 2023
- Golang
- 2024ํ๊ณ
- Go
- ์ข์ ๊ฐ๋ฐ์
- ํด์
- grpc client
- ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS)
- mysql
- ์ข์ ์์ง๋์ด
- Aws Reinvent 2023
- mysql metadata_locks
- mysql ์คํ ๊ณํ
- ์๊ณ ๋ฆฌ์ฆ
- 2023 ๊ฐ๋ฐ์ ํ๊ณ
- 2023 ํ๊ณ
- HTTP
- golang oomkilled
- ํ๋ก๊ทธ๋๋จธ์ค
- mysql metadata lock
- ์ข์ ๊ฐ๋ฐ์ ๋๊ธฐ
- ์ฅ์ ํ๊ณ
- kotlin s3 upload
- ์ถ์ ์ง๋
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
- ์คํ/ํ
- ์ฝ๋ฉํ ์คํธ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |