SELECT Lock
๋ณดํต InnoDB ํ
์ด๋ธ์ ๋ํด์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋ ๋ ์ฝ๋์ ์๋ฌด๋ฐ ์ ๊ธ์ ๊ฑธ์ง ์๋๋ค.(=Non Locking Consistent Read)
๋จ์ ์กฐํํ๋ ์ํฉ์์๋ ์ ๊ธ์ ๊ฑธ์ง ์๋ ๊ฒ์ด ์ข์ง๋ง, ์ฝ์ ๋ ์ฝ๋์ ์ปฌ๋ผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ฐ๊ณตํด์ ์
๋ฐ์ดํธ ํ ๋์ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ง ์๋๋ก ์ ๊ธ์ ๊ฑธ์ด์ผ ํ๋ค.
FOR SHARE
์ FOR UPDATE
์ ์ ์ถ๊ฐํด์ ์ฝ๊ธฐ ๋ฐ ๋ฐฐํ ์ ๊ธ์ ๊ฑธ ์ ์๊ณ , ์ฐจ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
FOR SHARE
: ์ฝ์ ๋ ์ฝ๋์ ๋ํด ์ฝ๊ธฐ ์ ๊ธ์ ๊ฑด๋ค. ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ ๊ธ์ ๊ฑธ ์ ์์ง๋ง, ๋ฐฐํ ์ ๊ธ์ ๊ฑธ ์ ์๋ค.(S-lock, Shared Lock)FOR UPDATE
: ์ฝ์ ๋ ์ฝ๋์ ๋ํด ๋ฐฐํ ์ ๊ธ์ ๊ฑด๋ค. ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ ๊ธ๋ ๋ฐฐํ ์ ๊ธ๋ ๊ฑธ ์ ์๋ค.(X-lock, Exclusive Lock)
InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ ์กฐ๊ธ ๋ค๋ฅธ ์ ์, ์ ๊ธ ์๋ ์ฝ๊ธฐ๊ฐ ์ง์๋๊ธฐ ๋๋ฌธ์ ํน์ ๋ ์ฝ๋๊ฐ FOR UPDATE
์ฟผ๋ฆฌ์ ์ํด์ ์ ๊ฒจ์ง ์ํ๋ผ๋,
FOR SHARE
๋ FOR UPDATE
์ ์ ๊ฐ์ง์ง ์์ ๋จ์ SELECT
์ฟผ๋ฆฌ๋ ์ ์์ ์ผ๋ก ์ฝ๊ธฐ๋ฅผ ์ํํ ์ ์๋ค.
์ ๊ธ ํ
์ด๋ธ ์ ํ
์ ์ฟผ๋ฆฌ๋ employees
, dept_emp
, departments
ํ
์ด๋ธ์ ๋ํด ์ ๊ธ์ ๊ฑธ์ง๋ง, employees
ํ
์ด๋ธ์๋ง ์ ๊ธ์ ๊ฑธ๊ณ ์ถ๋ค๋ฉด FOR UPDATE
์ ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
NOWAIT
& SKIP LOCKED
NOWAIT
& SKIP LOCKED
ํด๋น ๋ ์ฝ๋๋ฅผ ์ฝ์ผ๋ ค๋๋ฐ, FOR UPDATE
์ ์ ์ํด ์ ๊ฒจ์ ธ ์๋ค๋ฉด, ํด๋น ํธ๋์ญ์
์ ๋ ์ฝ๋๊ฐ ์ ๊ธด ์ํ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ํด๋น ํธ๋์ญ์
์ ํด์ ๋ฅผ ๊ธฐ๋ค๋ ค์ผํ๊ฑฐ๋, ์ฌ๊ฐํ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ค๋ฅ ๋ฑ์ผ๋ก ํด์ ๊ฐ ๋์ง ์์์ ๊ฒฝ์ฐ innodo_lock_wait_timeout
์ ์ค์ ๋ ์๊ฐ๊น์ง ๋๊ธฐํด์ผ ํ๋ค.
ํ์ง๋ง ์์ฒ๋ผ NOWAIT
์ ์ ์ถ๊ฐํ๋ฉด, ํด๋น ๋ ์ฝ๋๊ฐ ์ ๊ฒจ์ ธ ์์ ๊ฒฝ์ฐ์ ๋ฐ๋ก ์๋ฌ๋ฅผ ๋ฐํํ๋ฉด์ ์ฟผ๋ฆฌ๋ฅผ ์ฆ์ ์ข
๋ฃ์ํจ๋ค.
๋น์ทํ ๊ธฐ๋ฅ์ผ๋ก SKIP LOCKED
์ ์ด ์๋๋ฐ, ์ด๋ ์ ๊ธด ๋ ์ฝ๋๋ ๊ฑด๋๋ฐ๊ณ ์ฝ๊ธฐ๋ฅผ ์ํํ๋ค.(๊ฐ์ ์ฟผ๋ฆฌ๋ผ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ NOT-DETERMINISTIC
์ฟผ๋ฆฌ๊ฐ ๋๋ค.)
์์๋ฅผ ํตํ ํ์ฉ ๋ฐฉ๋ฒ
NOWAIT
์ SKIP LOCKED
๊ธฐ๋ฅ์ ํ(Queue)์ ๋น์ทํ ๊ธฐ๋ฅ์ MySQL ์๋ฒ์์ ๊ตฌํํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฟ ํฐ ๋ฐ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
ํ๋์ ์ฟ ํฐ์ ํ ์ฌ์ฉ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
์ฟ ํฐ์ ๊ฐ์๋ 1000๊ฐ ์ ํ
์ ์ฐฉ์์ผ๋ก ์์ฒญํ ์ฌ์ฉ์์๊ฒ ๋ฐ๊ธ
ํ ์ด๋ธ์ ์์ ๊ฐ๊ณ ์ฟ ํฐ ๋ฐ๊ธ ๊ณผ์ ์ ๊ฐ๋ตํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๋ค.
์ ์ฟผ๋ฆฌ๋ฅผ ๋์์ 1000๋ช
์ ์ฌ์ฉ์๊ฐ ์์ฒญํ๊ฒ ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๋ ๊ทธ ์์ฒญ๋งํผ ํ๋ก์ธ์ค๋ฅผ ์์ฑํด ์์ ํธ๋์ญ์
์ ๋์์ ์คํํ๋ ค๊ณ ํ ๊ฒ์ด๋ค.
ํ์ง๋ง ๊ฐ์ฅ ์ฒซ ํธ๋์ญ์
๋ง FOR UPDATE
์ฟผ๋ฆฌ๋ก ์ธํด ์ ๊ธ์ ๊ฑธ๊ณ ๋๋จธ์ง 999๊ฐ์ ํธ๋์ญ์
์ ํด๋น ๋ ์ฝ๋๊ฐ ์ ๊ฒจ์ ธ ์๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ๊ฒ ๋๊ณ ,
๊ฒฐ๊ตญ์ ๋๊ธฐ ์๊ฐ ๋์ ์ ๊ธ์ ํ๋ํ์ง ๋ชปํด์ ์๋ฌ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ UPDATE SKIP LOCKED
์ ์ ์ฌ์ฉํ๋ฉด ์ ๊ธ ๋ ๋ ์ฝ๋๋ ๊ฑด๋๋ฐ๊ณ ๋ค์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ ์ํํ๊ธฐ ๋๋ฌธ์ 1000๊ฐ์ ํธ๋์ญ์
์ ์ฑ๋ฅ ์ ํ ์์ด ์ฒ๋ฆฌํ ์ ์๋ค.
์ ์ ์ ํธ๋์ญ์
์ ๋๊ธฐํ๋ ๊ฒ์ ์๋ฏธํ๊ณ , ๊ตต์ ํ์ดํ๋ ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ฆ์ ์๋ฏธํ ๋,
SKIP LOCKED
๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ๋๊ธฐํ๋ ์๊ฐ์ ๋งค์ฐ ์งง์ ์๊ฐ(๋ ์ฝฌ๋ ํ ๊ฑด์ ์คํตํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ)์ด๋ฏ๋ก 1000๊ฐ์ ํธ๋์ญ์
์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?