โ๏ธย ๊ฒฐ๋ก
Repeatable Read๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด MVCC ๋๋ถ์ row์ X-Lock์ ๊ฑธ์ด๋ ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์ Lock์ด ๊ฑธ๋ฆฐ ๊ฐ์ row๋ผ๋ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ย ๋ฌธ์ ์ ์
์ํฉ: ์ฃผ๋ฌธ์ฌ๊ณ ๊ฐ ๋ง์ด๋์ค๊ฐ ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ๋น๊ด์ ๋์์ฑ ์ ์ด(select for update)๋ฅผ ์ ์ฉํจ
๋ฐฅ ๋จน๋ค๊ฐ ๋ฌธ๋ ์๊ฐ๋ ๊ฒ ๋น๊ด๋ฝ์ด ๋ฝ์ ๋๋ฌด ์ค๋ ์ก๊ณ ์์ด์ ๋นํจ์จ์ ์ด๋ผ๋๋ฐ.. ์ด๋๊ฐ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฑฐ์ง? ๋น๊ด๋ฝ์ผ๋ก X-Lock์ ๊ฑธ์ด์ ์กฐํ๋ ์ ๋๋ค๋ ๊ฑด๊ฐ?
์กฐํ์ ๋ฝ์ ๊ฑธ๊ธดํ์ง๋ง ์ฌ๊ณ ์๋ ๊ฒ์ฆ ํ์ ๋ฐ๋ก update ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ์ด์ฐจํผ X-Lock์ด ๊ฑธ๋ฆฌ๊ณ ๊ทธ ํ ์ด ์งง์ง ์์์ ์ด์ฐจํผ ๋ฝ์ ๊ฑฐ๋ ์ ๊ฑฐ๋ ์ฑ๋ฅ์ฐจ์ด๋ ๊ทธ๋ ๊ฒ ํฌ์ง ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๋ค.
์๋ฅผ๋ค์ด ๋ด๊ฐ ์ํ์ฝ๋ 10001๋ฒ์ ์ปจ๋ฒ์ค๋ฅผ ์ฃผ๋ฌธํ๋ ค๊ณ ํ๋๋ฐ, ์ฌ๊ณ ์๋์ ์กฐํ๋ฅผ ํด์ค๋ฉด์ ํด๋น row์ ๋ฝ์ ๊ฑธ๊ณ , ์ฃผ๋ฌธ์ ํ๋ ๋์ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ 10001๋ฒ์ ์ํ์ ์ฃผ๋ฌธํ๋ ค๊ณ ํ๋ฉด(์ด๋ ์ฌ๊ณ ์๋๋ ์กฐํํด์ด) X-Lock์ด ๊ฑธ๋ ค์์ด์ ์กฐํ๋ ์ ๋์ด์ ์ฑ๋ฅ์ด ์ ์ข๋ค๋ ๊ฑด๊ฐ?
๊ทธ๋ผ ์์ฒญ๋ ์ฑ๋ฅ์ด ์ ์ข์ ๊ฒ ๋ง๋คโฆ ์ฃผ๋ฌธํ ๋๋ง๋ค ๋ฝ์ด ๊ฑธ๋ฆดํ ๊ณ ๊ทธ ์ํ์ ์กฐํํ๋ ์ฌ์ฉ์๋ ์์ฒญ๋ ๋ถํธํจ์ ๊ฒช์ํ ๋๊น
โย ๋ถ์&์๋
์ธ์ 1: opt_comb_no์ธ row์ ๋ฐฐํ๋ฝ์ ๊ฑด๋ค.
start TRANSACTION;
SELECT PO.PROD_ID, PO.OPT_COMB_NO, PO.INV_QTY
FROM PROD_OPT PO
WHERE OPT_COMB_NO = 1
FOR UPDATE;
์ธ์ 2: ์ธ์ 1์์ ๋ฝ์ ๊ฑด row๋ฅผ ์กฐํ๋ฅผ ํ๋ ค๊ณ ํ๋ค.
start TRANSACTION;
select * from prod_opt where OPT_COMB_NO = 1;
์์ ๊ฐ์ ๋๋ก๋ผ๋ฉด ์ธ์ 1์์ ๊ฐ์ row๋ฅผ ์ด๋ฏธ ๋ฝ์ ๊ฑธ์์ผ๋๊น ๋ฝ์ด ํ๋ฆด ๋๊น์ง ์กฐํ๊ฐ ์ ๋ ์ค ์์์ผ๋ ์ธ์ 2์์ ์กฐํ๊ฐ ๋๋ฌด ์ ๋จ
์๋1
๋ฝ์ด ์ ๋๋ก ์ ๊ฑธ๋ฆฐ๊ฑด๊ฐ? ์ถ์ด์ ๋ฝ์ ์กฐํํด๋ณด์๋ค.
# ํ์ฌ ๋ฐ์ ์ค์ธ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฝ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ๋ฝ์ ์ก๊ณ ์๋ ํธ๋์ญ์
, ๋ฝ ํ์
, ๋ฝ ๋ชจ๋ ๋ฑ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
SELECT * FROM performance_schema.data_locks;
# ๋ฝ์ผ๋ก ์ธํด ๋๊ธฐ ์ค์ธ ํธ๋์ญ์
๋ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ค ํธ๋์ญ์
์ด ์ด๋ค ๋ฝ ๋๋ฌธ์ ๋๊ธฐ ์ค์ธ์ง, ๋๊ธฐ ์ค์ธ ํธ๋์ญ์
๊ณผ ๋ฝ์ ๋ณด์ ํ ํธ๋์ญ์
์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
SELECT * FROM performance_schema.data_lock_waits;


์ ์ ๋ฝ์ด 2๊ฐ์ธ๊ฐ ํ๋๋โฆ. ๊ทธ ํ
์ด๋ธ๋ฝ ๊ฑด๋ค๋ ๊ฒ ๊ทธ๋ง์ด์๊ตฌ๋? ์น์ ํ SQL ํ๋์ ๋์จ
record ๋ฝ์ด ๊ฑธ๋ฆฐ ๋ถ๋ถ์ ํ์ธํด๋ณด๋ฉด(LOCK_TYPE์ RECORD), LOCK_MODE์ โXโ๋ผ๊ณ ์ นํ์ ธ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
X = X-Lock = Exclusive Lock = ๋ฐฐํ๋ฝ = ์ฐ๊ธฐ๋ฝ
๋ฝ์ ์ ๋๋ก ๊ฑธ๋ ค์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ผ ์ ๋ฐฐํ๋ฝ์ธ X๋ฝ์ด ๊ฑธ๋ ค์๋๋ฐ ์ด๋ป๊ฒ ์กฐํ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ผ๊น?
๐ย ์์ธ
GPT์๊ฒ ๋ฌผ์ด๋ด์ ํํธ๋ฅผ ์ป์ ์ ์์๋ค.
MVCC๋ผ๋ ๊ฐ๋ ์ ์๊ณ ์์๋๋ฐ,
MySQL์ ๊ธฐ๋ณธ MVCC๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ๊ณผ ๋ฝ์ ์๊ด๊ด๊ณ?๋ฅผ ์ ๋งค์นญ์ ๋ชป ์์ผฐ๋ ๊ฒ ๊ฐ๋ค.
MySQL์ ๊ธฐ๋ณธ Isolation Level์ Repeatable Read์ด๋ค. Repeatable Read๋ MVCC๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น๋ก X-Lock(๋ฐฐํ๋ฝ)์ด ๊ฑธ๋ฆฐ ํ์ด ์๋๋ผ๋, ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ๋ ๋ฒ์ ์ ์ฝ์ด์ฌ ์ ์๋ค.
์ด๋์ row์ X๋ฝ์ด ๊ฑธ๋ ค์๋ ์ํ์์๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ฝ์ ๊ฑด ํ ์กฐํ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๐ย ๋๊ฐ๋ฉฐ
์ฝ๊ธฐ๋ฝ/๋ฐฐํ๋ฝ/๋๊ด๋ฝ์ ์๊ณ ์์๋๋ฐ Exclusive Lock, S-Lock, X-Lock์ด๋ผ๋ ์ฉ์ด๋ ์์ํด์ ์กฐ๊ธ ํด๋ฉจ์๋ค.
์ด๋ฒ ๊ธฐํ๋ก ๋ฝ ์ข ๋ฅ์ ๋ํด ์์๋ณด๊ณ ๊ณต๋ถํ๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
๐ย Ref
- ์น์ ํ SQL ํ๋์์ค24YOUR EVERY STORY ๋ฌธํ ์ฝํ ์ธ ํ๋ซํผ, ์์ค24
https://www.yes24.com/Product/Search?query=์น์ ํsqlํ๋&domain=ALL&pid=123487&cosemkid=go16844732698259627
Uploaded by N2T