1) DB Lock ๊ธฐ์ด
(1) Lock์ด๋
Lock์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์์ฑ๊ณผ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
- ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์ฌ์ฉ์(ํธ๋์ญ์ )๋ค์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ Lock์ ์ฌ์ฉํ์ฌ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ฌ์ฉ์(ํธ๋์ญ์ )์ ๋ค๋ฅธ ์ฌ์ฉ์(ํธ๋์ญ์ )๋ค ๊ฐ์ ์ ๊ทผ์ ์ ์ดํ์ฌ ์ถฉ๋์ ๋ฐฉ์งํ๋ค.
- ์ฐธ๊ณ ๋ก DBMS๋ง๋ค Lock์ ๊ตฌํํ๋ ๋ฐฉ์๊ณผ ์ธ๋ถ์ ์ธ ๋ฐฉ๋ฒ์ ๊ฐ๊ฐ ๋ค๋ฅด๋ฏ๋ก DBMS๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ด์ฉํ๊ธฐ ์ํด์ ํด๋น DB์ Document ๋ฌธ์๋ฅผ ์ ๋ ํ๋๋ก ํ์!
(2) Lock์ ์ค์ ๋ฒ์
(2-1) ๋ฐ์ดํฐ ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์์ Lock์ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก Lock ํ๋ ๊ฒ์ด๋ฉฐ, ์ฆ 1๊ฐ์ ์ธ์ ๋ง์ด DB์ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
- ํด๋น ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ ์์ผ๋ฉฐ ์ฌ์ฉํ๋ ๋๊ฐ ์๋ค๋ฉด DB์ ์ํํธ์จ์ด ๋ฒ์ ์ ์ฌ๋ฆฐ๋ค๋์ง ์ฃผ์ํ DB์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉํ๋ค.
(2-2) ํ์ผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ฉฐ ํ์ผ์ด๋ ํ ์ด๋ธ, Row ๋ฑ๊ณผ ๊ฐ์ ์ค์ ๋ฐ์ดํฐ๊ฐ Write ๋์ฌ์ง๋ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ์์ด๋ฉฐ, ํด๋น ๋ฒ์์ Lock์ ์ ์ฌ์ฉ๋์ง ์๋๋ค.
(2-3) ํ ์ด๋ธ
- ํ ์ด๋ธ ์์ค์ Lock์ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ฉฐ, ์ด๋ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์ ๋ฐ์ดํธ ํ๋ ๋ฑ์ ์ ์ฒด ํ ์ด๋ธ์ ์ํฅ์ ์ฃผ๋ ๋ณ๊ฒฝ์ ์ํํ ๋ ์ ์ฉํ๋ค.
- ์ฆ, DDL (CREATE, ALTER, DROP) ๊ตฌ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ “DDL Lock” ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
(2-4) ํ์ด์ง์ ๋ธ๋ก
- ํ์ผ์ ์ผ๋ถ์ธ ํ์ด์ง์ ๋ธ๋ก์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ฉฐ, ์ ์ฌ์ฉ๋์ง๋ ์๋๋ค.
(2-5) ์ปฌ๋ผ (Column)
- ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก, ์ด ํ์์ Lock ์ค์ ๋ฐ ํด์ ์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ ์์ผ๋ฉฐ ์ง์ํ๋ DBMS ๋ํ ๋ง์ง ์๋ค.
(2-6) ํ (Row)
- 1๊ฐ์ ํ(Row)์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก, DML์ ๋ํ Lock์ผ๋ก์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ Lock ์ด๋ค.
(3) Lock์ ์ข ๋ฅ
- Lock์ ์ข ๋ฅ์๋ ํฌ๊ฒ ๊ณต์ ๋ฝ (Shared Lock)๊ณผ ๋ฒ ํ ๋ฝ (Exclusive Lock)์ด ์์ผ๋ฉฐ, ๊ณต์ ๋ฝ์ ๋ค๋ฅธ ๋ง๋ก Read Lock ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ ๋ฒ ํ ๋ฝ์ Write Lock ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
- ์ฐธ๊ณ ๋ก ์์์๋ ๋งํ๋ค์ํผ DBMS๋ง๋ค ์ฌ์ฉ๋์ด์ง๋ Lock์ ๊ตฌํ ๋ฐฉ์๋ ์ข ๋ฅ๋ ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์๋ ๋๋ถ๋ถ์ RDBMS์์ ๋ค๋ค์ง๋ ๊ณต์ ๋ฝ๊ณผ ๋ฒ ํ ๋ฝ์ ๋ํด์๋ง ๋ค๋ฃฌ๋ค.
(3-1) ๊ณต์ ๋ฝ (Shared Lock)
๊ณต์ ๋ฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ์ฝ๊ธฐ ๋ช ๋ น์ ๋ํด ์ฃผ์ด์ง๋ ๋ฝ์ผ๋ก์ Read Lock์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ Shared์ ์ ๊ธ์๋ฅผ ๋ฐ์ ์ฃผ๋ก S๋ก ํ๊ธฐํ๋ค.
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ผ์น์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋ฝ๋ผ๋ฆฌ๋ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ํ์ง๋ง ๊ณต์ ๋ฝ์ด ์ค์ ๋ ๋ฐ์ดํฐ์ ๋ฒ ํ ๋ฝ์ ์ฌ์ฉํ ์๋ ์๋ค.
(3-2) ๋ฒ ํ ๋ฝ (Exclusive Lock)
๋ฒ ํ ๋ฝ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ฐํ๋ ๋ช ๋ น๋ค์ ๋ํด ์ฃผ์ด์ง๋ ๋ฝ์ผ๋ก Write Lock์ผ๋ก ๋ถ๋ฆฌ๋ฉฐ, X๋ก ํ๊ธฐํ๋ค.
- ๋ฒ ํ ๋ฝ์ ์ด๋ฆ ๊ทธ๋๋ก Lock์ด ํด์ ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ ์์ ํด๋น ์์์ ๋ํ ์ ๊ทผ (Select, Insert, Delete, Update) ํ๋ ๊ฒ์ ๋ง๋๋ค.
- ์ด๋ฌํ ์ ์์ ๋ฒ ํ ๋ฝ์ ๋ฉํฐ ์ฐ๋ ๋ฉ ํ๊ฒฝ์์ ์๊ณ ์์ญ์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ฉ๋๋ ์ธ๋งํฌ์ด, ๋ฎคํ ์ค์ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ฒ ํ ๋ฝ์ ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ง๋๊ณ ๋ํ, ๊ณต์ ๋ฝ๊ณผ ๋ฌ๋ฆฌ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ํํ๊ณ ์๋ ๋ฐ์ดํฐ์ ๋ํด ์ ๊ทผํ์ฌ ํจ๊ป Lock์ ์ค์ ํ ์ ์๋ค.
(4) ๋ธ๋กํน (Blocking) & ๊ต์ฐฉ ์ํ (DeadLock)
(4-1) ๋ธ๋กํน (Blocking)
๋ธ๋กํน์ Lock ๊ฐ (๋ฒ ํ-๋ฒ ํ, ๋ฒ ํ-๊ณต์ )์ ๊ฒฝํฉ์ด ๋ฐ์ํ์ฌ ํน์ ํธ๋์ญ์ ์ด ์์ ์ ์งํํ์ง ๋ชปํ๊ณ ๋ฉ์ถฐ์ ์ํ๋ฅผ ๋งํ๋ค.
- ์์์ ์ค๋ช ํ๋ค์ถ์ด, ๊ณต์ ๋ฝ ๋ผ๋ฆฌ๋ ๋ธ๋กํน์ด ๋ฐ์ํ์ง ์์ง๋ง ๋ฒ ํ ๋ฝ์ ๋ธ๋กํน์ ๋ฐ์์ํค๋ฏ๋ก ๋ธ๋กํน์ ํด์ํ๊ธฐ ์ํด์๋ ์ด์ ์ ํธ๋์ญ์ ์ด ์๋ฃ (commit ๋๋ rollback) ๋์ด์ผ ํ๋ค.
- ์ดํ์ ๋ค์ด์จ ํธ๋์ญ์ ์ ์ด์ ํธ๋์ญ์ ์ด ๋ง๋ฌด๋ฆฌ๋์ด์ผ ์ดํ ์งํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ฒฝํฉ์ ์ฑ๋ฅ์ ์ข์ง ์์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ๊ฒฝํฉ์ ์ต์ํ ํ ํ์๊ฐ ์๋ค.
[์ฐธ๊ณ ] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ฌ์ฉํ๋ ์์คํ ์์์ ์ฃผ์ ์ฌํญ
โ ํ ํธ๋์ญ์ ์ ๊ธธ์ด(์๊ฐ)๋ฅผ ๋๋ฌด ๊ธธ๊ฒ ํ๋ ๊ฒ์ ์์์ ๋งํ ๊ฒ์ฒ๋ผ ๊ฒฝํฉ์ ํ๋ฅ ์ ์ฌ๋ฆฌ๊ฒ ๋๋ฏ๋ก ์ค๊ณํ ๋, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋์ง ์๋๋ก ํด์ผ ํ๋ค.
โก ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์ฑ ์์ค์ ๋ถํ์ํ๊ฒ ์ํฅ ์กฐ์ ํ์ง ์๋๋ก ํด์ผ ํ๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ํฅ์์ํค์ง๋ง ๋ฐ๋๋ก ๋์์ฑ์ด ๋จ์ด์ ธ ๋ธ๋กํน ์ํ๊ฐ ๋ค์ ๋ฐ์ํ ์ ์๋ค.
โข Query๋ฅผ ์ค๋์๊ฐ ์ก์๋์ง ์๋๋ก ์์คํ
ํ๊ฒฝ์ ๋ง์ถ์ด DB์์์ ์ ์ ํ ํ๋์ ์งํํ๋๋ก ํ๋ค.
(ex. Lock ๋๊ธฐ ์๊ฐ, ๋ฒํผ ํฌ๊ธฐ, ์ปค๋ฅ์
ํ)
(4-2) ๊ต์ฐฉ ์ํ (DeadLock)
๊ต์ฐฉ ์ํ๋ ๋ ํธ๋์ญ์ ์ด ๊ฐ๊ฐ Lock์ ์ค์ ํ๊ณ ๋ค์ ์๋ก์ Lock์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ป๊ณ ์ ํ ๋, ์ด๋ฏธ ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ ์ํด Lock์ด ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ชฝ ํธ๋์ญ์ ๋ชจ๋ ์์ํ ์ฒ๋ฆฌ๊ฐ ๋์ง์๊ฒ ๋๋ ์ํ๋ฅผ ๋งํ๋ค.
- ์์ ๊ทธ๋ฆผ์ฒ๋ผ ํธ๋์ญ์ A๋ game_master ํ ์ด๋ธ์ ๋ฒ ํ ๋ฝ์ ์ค์ ํ์๊ณ ํธ๋์ญ์ B๋ game_detail ํ ์ด๋ธ์ ๋ฒ ํ ๋ฝ์ ์ค์ ํ์๋ค.
- ์ดํ์ ํธ๋์ญ์ A๋ game_detail ํ ์ด๋ธ์ ํธ๋์ญ์ B๋ game_master ํ ์ด๋ธ์ ๋ฝ์ ์ค์ ํ๋ ค๊ณ ์๋ํ๋ ์ด๋ฏธ ๊ฐ๊ฐ์ ํ ์ด๋ธ์ ์๋ก ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ๋ฒ ํ ๋ฝ์ด ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ A, B๋ Lock์ด ํด์ ๋๊ธฐ๋ฅผ ์๋ก ๊ธฐ๋ค๋ฆฌ๋ ์ํ๊ฐ ๋๋ค.
- ํ์ง๋ง ์ด Lock์ ํ๋ฆฌ์ง ์์ ์๋ก์ ํธ๋์ญ์ ์ ๊ธฐ๋ค๋ฆฌ๋ฏ๋ก ์์ํ ํ๋ฆฌ์ง ์๋ ๋ฐ๋๋ฝ ์ํ๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
- ๋ฐ๋ผ์, ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ๋ฉด DBMS์์๋ ๋ ์ค ํ ํธ๋์ญ์ ์ ์๋ฌ๋ฅผ ๋ฐ์์ํด์ผ๋ก์จ ๋ฐ๋๋ฝ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ค์ด๊ธฐ ์ํด์๋ ์ ๊ทผ ์์๋ฅผ ๋์ผํ๊ฒ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
- ์ฆ, ์์ ์์ ๋ฅผ ์๋ก ๋ ๋ค๋ฉด game_master ํ ์ด๋ธ์ ์ ๋ฐ์ดํธ ํ ํ์ game_detail ํ ์ด๋ธ์ ์ ๋ฐ์ดํธ ํ๋ค์ ๊ฐ์ ๊ท์น์ ํตํด ํ ์ด๋ธ ์ ๊ทผ์ ๊ต์ฐจ๊ฐ ์ผ์ด๋์ง ์๋๋ก ํจ์ผ๋ก์จ ๊ต์ฐฉ ์ํ๋ฅผ ์๋ฐฉํ๋ ๊ฒ์ด๋ค.
[Reference]
'๐จโ๐ป Back End > MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL ์ํคํ ์ฒ - ๊ธฐ๋ณธ (0) | 2023.08.09 |
---|---|
DB Lock ์ฌํ (์ด๋ ค์ด ๋ถ๋ถ์ด ๋๋ฌด ๋ง์....์์ฑ์ค....) (0) | 2023.07.30 |
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์ฑ ์์ค (0) | 2023.07.25 |
ํธ๋์ญ์ (Transaction) (0) | 2023.07.22 |
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด (0) | 2023.07.22 |