3-7-1. Lock
๊ณผ๋ชฉ3. SQL ๊ณ ๊ธ ํ์ฉ ๋ฐ ํ๋
์ 7์ฅ Lock๊ณผ ํธ๋์ญ์
๋์์ฑ ์ ์ด
์ 1์ Lock
1. Lock ๊ธฐ๋ณธ
๊ฐ. Lock์ด๋?
๊ณ ๊ฐ์ DBMS๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ก๋ ์ฑ๋ฅ, ๊ด๋ฆฌ์ ํธ์ด์ฑ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ธก๋ฉด์ด ์์ง๋ง, ๋ฌด์๋ณด๋ค ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ํต์ฌ์ ์ธ ์์๋ผ๊ณ ํ ์ ์๋ค. ๊ฐ์ ์์์ ์ก์ธ์คํ๋ ค๋ ๋ค์ค ํธ๋์ญ์ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ค๋ฉด ํธ๋์ญ์ ์ ์์ฐจ์ ์งํ์ ๋ณด์ฅํ ์ ์๋ ์ง๋ ฌํ(serialization) ์ฅ์น๊ฐ ํ์ํ๋ค. ์ํ๊ด ์ข์์ ์์ฝํ๋ ์์คํ ์ ์๋ก ๋ค๋ฉด, ๋ ๋ช ์ด ๋์์ ์ข์์ ์์ฒญํ ๋ ์ ํํ ํ ๋ช ๋ง ์ข์์ ๋ฐฐ์ ๋ฐ๋๋ก ํ ์ ์์ด์ผ ํ๋ค. ์ด๋ฐ ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ ์ํด ๋ชจ๋ DBMS๊ฐ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด Lock์ด๋ค. ์ค์ํ ๊ฒ์ DBMS๋ง๋ค Lock์ ๊ตฌํํ๋ ๋ฐฉ์๊ณผ ์ธ๋ถ์ ์ธ ๊ธฐ๋ฅ์ด ๋ง์ด ๋ค๋ฅด๋ค๋ ์ฌ์ค์ด๋ค. ๋ฐ๋ผ์ ์์ ์ด ์ฌ์ฉํ๊ณ ์๋ DBMS๋ง์ ๋ ํนํ Lock ๋ฉ์ปค๋์ฆ์ ์ ํํ ์ดํดํ์ง ๋ชปํ ์ํ์์ ๊ฒฐ์ฝ ๊ณ ํ์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋ค. ๋ณธ ์ฅ์ด ์ค์ํ ์๋ฏธ๋ฅผ ๊ฐ๋ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋๋ฐ, DBMS๋ณ ํน์ง์ ์ค๋ช ํ๊ธฐ์ ์์ Lock์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๋ถํฐ ์ดํด๋ณด์.
๋. ๊ณต์ Lock๊ณผ ๋ฐฐํ์ Lock
DBMS๋ ๊ฐ ํธ๋์ญ์ ์ ์คํผ๋ ์ด์ ๋ณ๋ก ์ ๋นํ ์์ค์ Lock์ ์๋์ผ๋ก ์ค์ ํ๋ค. ํ์ํ ๊ฒฝ์ฐ, ์ผ๋ถ Lock์ ๋ํด์๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ดํ๋ ๋ฐฉ๋ฒ๋ ์ ๊ณตํ๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ Lock ๋ชจ๋๋ ๊ณต์ Lock๊ณผ ๋ฐฐํ์ Lock์ด๋ค. ์ด์ ๋ํด์ ๊ฐ๋จํ ์ดํด๋ณด๊ณ , DBMS๋ง๋ค ์ ๊ณต๋๋ ์ธ๋ถ์ ์ธ Lock ๋ชจ๋์ ๋ํด์๋ ๋ค์์ ์ดํด๋ณด๊ธฐ๋ก ํ์.
1) ๊ณต์ Lock
๊ณต์ (Shared) Lock์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค. ๋ค๋ฅธ ๊ณต์ Lock๊ณผ๋ ํธํ๋์ง๋ง ๋ฐฐํ์ Lock๊ณผ๋ ํธํ๋์ง ์๋๋ค. 'ํธํ๋๋ค'๋ ๋ง์ ํ ๋ฆฌ์์ค์ ๋ ๊ฐ ์ด์์ Lock์ ๋์์ ์ค์ ํ ์ ์์์ ๋ปํ๋ค. ๋ค์ ๋งํด, ๊ณต์ Lock์ ์ค์ ํ ๋ฆฌ์์ค์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ถ๊ฐ๋ก ๊ณต์ Lock์ ์ค์ ํ ์๋ ์์ง๋ง ๋ฐฐํ์ Lock์ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์์ ์ด ์ฝ๊ณ ์๋ ๋ฆฌ์์ค๋ฅผ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋์์ ์ฝ์ ์๋ ์์ด๋ ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋๋ก, ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ฝ๊ณ ์๋ ๋ฆฌ์์ค๋ฅผ ๋์์ ์ฝ์ ์๋ ์์ด๋ ๋ณ๊ฒฝ ์ค์ธ ๋ฆฌ์์ค๋ฅผ ๋์์ ์ฝ์ ์๋ ์๋ค.
2) ๋ฐฐํ์ Lock
๋ฐฐํ์ (Exclusive) Lock์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ค. ๋ง ๊ทธ๋๋ก ๋ฐฐํ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ Lock์ด ํด์ ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ ์ ํด๋น ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ค. ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๋ฟ๋ง ์๋๋ผ ์ฝ๊ธฐ๋ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋๋ก, ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด Lock์ด ์ค์ ๋ ๋ฆฌ์์ค๋, ๊ทธ๊ฒ์ด ๊ณต์ Lock์ด๋ ๋ฐฐํ์ Lock์ด๋ , ๋ฐฐํ์ Lock์ ๋์์ ์ค์ ํ ์ ์๋ค.
๋ค. ๋ธ๋กํน๊ณผ ๊ต์ฐฉ์ํ
1) ๋ธ๋กํน
๋ธ๋กํน(Blocking)์, Lock ๊ฒฝํฉ์ด ๋ฐ์ํด ํน์ ์ธ์ ์ด ์์ ์ ์งํํ์ง ๋ชปํ๊ณ ๋ฉ์ถฐ ์ ์ํ๋ฅผ ๋งํ๋ค. ๊ณต์ Lock๋ผ๋ฆฌ๋ ํธํ๋๊ธฐ ๋๋ฌธ์ ๋ธ๋กํน์ด ๋ฐ์ํ์ง ์๋๋ค. ๊ณต์ Lock๊ณผ ๋ฐฐํ์ Lock์ ํธํ๋์ง ์์ ๋ธ๋กํน์ด ๋ฐ์ํ ์ ์๋ค. ๋ฐฐํ์ Lock๋ผ๋ฆฌ๋ ๋น์ฐํ ํธํ๋์ง ์๋๋ค. ๋ธ๋กํน ์ํ๋ฅผ ํด์ํ๋ ๋ฐฉ๋ฒ์ ์ปค๋ฐ(๋๋ ๋กค๋ฐฑ)๋ฟ์ด๋ค. ์ฆ Lock ๊ฒฝํฉ์ด ๋ฐ์ํ๋ฉด ๋จผ์ Lock์ ์ค์ ํ ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ํํ ํธ๋์ญ์ ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ฉฐ, ์ด๋ฐ ํ์์ด ์์ฃผ ๋ํ๋๋ค๋ฉด ์ฌ์ฉ์๊ฐ ๋๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ด ์ข์ ๋ฆฌ ๋ง๋ฌดํ๋ค. Lock์ ์ํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ต์ํํ๋ ๋ฐฉ์์ ์ดํด๋ณด์.
โ ์ฐ์ , ํธ๋์ญ์ ์ ์์์ฑ์ ํผ์ํ์ง ์๋ ์ ์์ ํธ๋์ญ์ ์ ๊ฐ๋ฅํ ์งง๊ฒ ์ ์ํ๋ ค๋ ๋ ธ๋ ฅ์ด ํ์ํ๋ค. Oracle์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ๊ณต์ Lock์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ DBMS์ ๋นํด ์๋์ ์ผ๋ก Lock ๊ฒฝํฉ์ด ์ ๊ฒ ๋ฐ์ํ๋ค. ๊ทธ๋ ๋๋ผ๋ ๋ฐฐํ์ Lock๋ผ๋ฆฌ ๋ฐ์ํ๋ ๊ฒฝํฉ์ ํผํ์ง ๋ชปํ๋ฏ๋ก '๋ถํ์ํ๊ฒ' ํธ๋์ญ์ ์ ๊ธธ๊ฒ ์ ์ํด์ ์ ๋๋ค.
โก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋์ง ์๋๋ก ์ค๊ณํ๋ ๊ฒ๋ ์ค์ํ๋ค. ํนํ, ํธ๋์ญ์ ์ด ํ๋ฐํ ์ฃผ๊ฐ์ ๋์ฉ๋ ๊ฐฑ์ ์์ ์ ์ํํด์ ์ ๋๋ค.
โข ์ฃผ๊ฐ์ ๋์ฉ๋ ๊ฐฑ์ ์์ ์ด ๋ถ๊ฐํผํ๋ค๋ฉด, ๋ธ๋กํน ํ์์ ์ํด ์ฌ์ฉ์๊ฐ ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ก ์ ์ ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ๋์ ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, SQL Server์์๋ ์ธ์ ๋ ๋ฒจ์์ LOCK_TIMEOUT์ ์ค์ ํ ์ ์๋ค. ์๋๋ Lock์ ์ํ ๋๊ธฐ ์๊ฐ์ด ์ต๋ 2์ด๋ฅผ ๋์ง ์๋๋ก ์ค์ ํ ๊ฒ์ด๋ค.
Oracle์ด๋ผ๋ฉด UPDATE/DELETE ๋ฌธ์ฅ์ ์ํํ๊ธฐ ์ ์ nowait์ด๋ wait ์ต์ ์ ์ง์ ํ SELECT โฆ for UPDATE ๋ฌธ์ ๋จผ์ ์ํํด ๋ด์ผ๋ก์จ Lock์ด ์ค์ ๋๋์ง ์ฒดํฌํ ์ ์๊ณ , ๋ฐ์ํ ์์ธ์ฌํญ(exception)์ ๋ฐ๋ผ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ค.
โฃ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์ฑ ์์ค(2์ 2ํญ ์ฐธ์กฐ)์ ๋ถํ์ํ๊ฒ ์ํฅ ์กฐ์ ํ์ง ์๋๋ค.
โค ํธ๋์ญ์ ์ ์ ์ค๊ณํ๊ณ ๋๊ธฐ ํ์์ ํผํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ์ ์์, SQL ๋ฌธ์ฅ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ ๋ด์ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๋๋ก ํ๋ ๊ฒ์ด Lock ํ๋์ ๊ธฐ๋ณธ์ด๊ณ ํจ๊ณผ๋ ๊ฐ์ฅ ํ์คํ๋ค.
2) ๊ต์ฐฉ์ํ
๊ต์ฐฉ์ํ(Deadlock)๋, ๋ ์ธ์ ์ด ๊ฐ๊ฐ Lock์ ์ค์ ํ ๋ฆฌ์์ค๋ฅผ ์๋ก ์ก์ธ์คํ๋ ค๊ณ ๋ง์ฃผ๋ณด๋ฉฐ ์งํํ๋ ์ํฉ์ ๋งํ๋ฉฐ, ๋ ์ค ํ๋๊ฐ ๋ค๋ก ๋ฌผ๋ฌ๋์ง ์์ผ๋ฉด ์์ ํ๋ฆด ์ ์๋ค. ํํ ์ข์ ๊ณจ๋ชฉ๊ธธ์ ๋ ๋์ ์ฐจ๋์ด ๋ง์ฃผ ์ ๊ฒ์ ๋น์ ํ๊ณค ํ๋ค. ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ฉด, DBMS๊ฐ ๋ ์ค ํ ์ธ์ ์ ์๋ฌ๋ฅผ ๋ฐ์์ํด์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ, ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์กฐ๊ธ ์ ์ค๋ช ํ Lock ํ๋ ๋ฐฉ์์ ๊ต์ฐฉ์ํ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ค์ด๋ ๋ฐฉ์์ด๊ธฐ๋ ํ๋ค. ์ฌ๋ฌ ํ ์ด๋ธ์ ์ก์ธ์คํ๋ฉด์ ๋ฐ์ํ๋ ๊ต์ฐฉ์ํ๋ ํ ์ด๋ธ ์ ๊ทผ ์์๋ฅผ ๊ฐ๊ฒ ์ฒ๋ฆฌํ๋ฉด ํผํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ง์คํฐ ํ ์ด๋ธ๊ณผ ์์ธ ํ ์ด๋ธ์ ๋ ๋ค ๊ฐฑ์ ํ ๋ ๋ง์คํฐ ํ ์ด๋ธ ๋ค์์ ์์ธ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๊ธฐ๋ก ๊ท์น์ ์ ํ๊ณ , ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ์ด ๊ท์น์ ์งํจ๋ค๋ฉด ๊ต์ฐฉ์ํ๋ ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ค. SQL Server๋ผ๋ฉด ์ ์ ํ ์ค๋ช ํ ๊ฐฑ์ (UPDATE) Lock์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ต์ฐฉ์ํ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์๋ค.
2. SQL Server Lock
๊ฐ. Lock ์ข
๋ฅ
1) ๊ณต์ Lock
SQL Server์ ๊ณต์ Lock์ ํธ๋์ญ์ ์ด๋ ์ฟผ๋ฆฌ ์ํ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ ๊ฒ์ด ์๋๋ผ ๋ค์ ๋ ์ฝ๋๊ฐ ์ฝํ๋ฉด ๊ณง๋ฐ๋ก ํด์ ๋๋ค. ๋จ, ๊ธฐ๋ณธ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์ฑ ์์ค(Read Committed)์์๋ง ๊ทธ๋ ๋ค. ๊ฒฉ๋ฆฌ์ฑ ์์ค์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ํธ๋์ญ์ ๋ด์์ ๊ณต์ Lock์ด ์ ์ง๋๋๋ก ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ํ ์ด๋ธ ํํธ๋ก holdlock์ ์ง์ ํ๋ฉด ๋๋ค. ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์ฑ ์์ค์ ๋ํด์๋ ๋ค์ ์ ์์ ์ค๋ช ํ๋ค.
๋์ค์ ๋ณ๊ฒฝํ ๋ชฉ์ ์ผ๋ก ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋๋ ๋ฐ๋์ ์์ ๊ฐ์ ํจํด์ผ๋ก ํธ๋์ญ์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ค. ์ ์ฌ๋ก์์ ๋ฐฉ๋ฌธํ์, ์ต๊ทผ๋ฐฉ๋ฌธ์ผ์, ๊ตฌ๋งค์ค์ ์ ๋ฐ๋ผ ์๋ก์ด ์ ๋ฆฝํฌ์ธํธ๋ฅผ ๊ณ์ฐํ๋๋ฐ, ๋ง์ฝ ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ ๋ฆฝํฌ์ธํธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ฉด ์ ๋ฆฝํฌ์ธํธ๊ฐ ๋น์ผ๊ด๋ ์ํ์ ๋์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
2) ๋ฐฐํ์ Lock
1ํญ์์ ์ค๋ช ํ ๋ด์ฉ๊ณผ ๊ฐ๋ค.
3) ๊ฐฑ์ Lock
์์ ๊ณต์ Lock์ ์ค๋ช ํ๋ฉด์ ์์ํ๋ ์ ๋ฆฝํฌ์ธํธ ๋ณ๊ฒฝ ํ๋ก๊ทธ๋จ์ ๊ณต๊ต๋กญ๊ฒ๋ ๋ ํธ๋์ญ์ ์ด ๋์์ ์ํํ๋ค๊ณ ๊ฐ์ ํ๋ค. ๊ทธ๊ฒ๋ ๊ฐ์ ๊ณ ๊ฐ์ ๋ํด์ ๋ง์ด๋ค. ๋ ํธ๋์ญ์ ๋ชจ๋ ์ฒ์์๋ ๊ณต์ Lock์ ์ค์ ํ๋ค๊ฐ ์ ๋ฆฝํฌ์ธํธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ง์ ์ ๋ฐฐํ์ Lock์ ์ค์ ํ๋ ค๊ณ ํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ ํธ๋์ญ์ ์ ์๋ํธ ํธ๋์ญ์ ์ ์ํ ๊ณต์ Lock์ด ํด์ ๋๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆฌ๋ ๊ต์ฐฉ์ํ์ ๋น ์ง๊ฒ ๋๋ค. ์ด๋ฐ ์ ์ฌ์ ์ธ ๊ต์ฐฉ์ํ๋ฅผ ๋ฐฉ์งํ๋ ค๊ณ SQL Server๋ ๊ฐฑ์ (UPDATE) Lock์ ๋๊ฒ ๋์๊ณ , ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์๋์ ๊ฐ์ด updlock ํํธ๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
ํ ์์์ ๋ํ ๊ฐฑ์ Lock์ ํ ํธ๋์ญ์ ๋ง ์ค์ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ํธ๋์ญ์ ์ด ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ๊ฐฑ์ Lock์ ์ค์ ํ๋ฉด ๋ ๋ฒ์งธ ํธ๋์ญ์ ์ ์ฒซ ๋ฒ์งธ ํธ๋์ญ์ ์ด ๋ฐฐํ์ Lock์ผ๋ก ์ ํํ๋ค๊ฐ ์ด๋ฅผ ๋ค์ ํด์ ํ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ๋ง ํ๋ค. ๊ฐฑ์ Lock๋ผ๋ฆฌ๋ ํธํ๋์ง ์์ง๋ง ๊ณต์ Lock๊ณผ๋ ํธํ๋๋ฏ๋ก ๊ฐฑ์ Lock์ด ์ค์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ์ฝ๊ณ ์ ํ ๋๋ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ค.
4) ์๋ Lock
ํน์ ๋ก์ฐ์ Lock์ ์ค์ ํ๋ฉด ๊ทธ์ ๋์์ ์์ ๋ ๋ฒจ ๊ฐ์ฒด(ํ์ด์ง, ์ต์คํ ํธ, ํ ์ด๋ธ)์ ๋ด๋ถ์ ์ผ๋ก ์๋(Intent) Lock์ด ์ค์ ๋๋ค. Lock์ ์ค์ ํ๋ ค๋ ๊ฐ์ฒด์ ํ์ ๋ ๋ฒจ์์ ์ ํ ํธ๋์ญ์ ์ด ์ด๋ค ์์ ์ ์ํ ์ค์ธ์ง๋ฅผ ์๋ฆฌ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ, ์ผ์ข ์ ํฏ๋ง(Flag)์ด๋ผ๊ณ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ํ ์ด๋ธ์ ์ ๊ทธ๋ ค ํ ๋ ๊ทธ ํ์์ ๋ชจ๋ ํ์ด์ง๋ ์ต์คํ ํธ, ์ฌ์ง์ด ๋ก์ฐ์ ์ด๋ค Lock์ด ์ค์ ๋ผ ์๋์ง๋ฅผ ์ผ์ผ์ด ๊ฒ์ฌํด์ผ ํ๋ค๋ฉด ์ข์ฒ๋ผ ์์ ์ด ๋๋์ง ์์ ์ ์๋ค. ์๋ Lock์ ๊ทธ๋ฐ ํ์์ ๋ฐฉ์งํด ์ค๋ค. ์ฆ ํด๋น ํ ์ด๋ธ์ ์ด๋ค ๋ชจ๋์ ์๋ Lock์ด ์ค์ ๋ผ ์๋์ง๋ง ๋ณด๊ณ ๋ ์์ ์ ์งํํ ์ง ์๋๋ฉด ๊ธฐ๋ค๋ฆด์ง๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
5) ์คํค๋ง Lock
ํ ์ด๋ธ ์คํค๋ง์ ์์กด์ ์ธ ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋๋ค.
Sch-S(Schema Stability) : SQL์ ์ปดํ์ผํ๋ฉด์ ์ค๋ธ์ ํธ ์คํค๋ง๋ฅผ ์ฐธ์กฐํ ๋ ๋ฐ์ํ๋ฉฐ, ์ฝ๋ ์คํค๋ง ์ ๋ณด๊ฐ ์์ ๋๊ฑฐ๋ ์ญ์ ๋์ง ๋ชปํ๋๋ก ํจ
Sch-M(Schema Modification) : ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ DDL ๋ฌธ์ ์ํํ ๋ ๋ฐ์ํ๋ฉฐ, ์์ ์ค์ธ ์คํค๋ง ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์ธ์ ์ด ์ฐธ์กฐํ์ง ๋ชปํ๋๋ก ํจ
6) Bulk UPDATE Lock
ํ ์ด๋ธ Lock์ ์ผ์ข ์ผ๋ก, ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ Bulk Copy ํ ๋ ๋ฐ์ํ๋ค. ๋ณ๋ ฌ ๋ฐ์ดํฐ ๋ก๋ฉ(Bulk INSERT๋ bcp ์์ ์ ๋์ ์ํ)์ ํ์ฉํ์ง๋ง ์ผ๋ฐ์ ์ธ ํธ๋์ญ์ ์์ ์ ํ์ฉ๋์ง ์๋๋ค.
๋. Lock ๋ ๋ฒจ๊ณผ Escalation
์ 5๊ฐ์ง ๋ ๋ฒจ ์ธ์ ์ธ๋ฑ์ค ํค(Key)์ ๋ก์ฐ ๋ ๋ฒจ Lock์ ๊ฑฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
Lock Escalation
'Lock Escalation'์ด๋ ๊ด๋ฆฌํ Lock ๋ฆฌ์์ค๊ฐ ์ ํด์ง ์๊ณ์น๋ฅผ ๋์ผ๋ฉด์ ๋ก์ฐ ๋ ๋ฒจ ๋ฝ์ด ํ์ด์ง, ์ต์คํ ํธ, ํ ์ด๋ธ ๋ ๋ฒจ ๋ฝ์ผ๋ก ์ ์ ํ์ฅ๋๋ ๊ฒ์ ๋งํ๋ค. ์ด๋ SQL Server, DB2 UDB์ฒ๋ผ ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์์ Lock ๋งค๋์ ๋ฅผ ํตํด Lock ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ DBMS์์ ๊ณตํต์ ์ผ๋ก ๋ฐ์ํ ์ ์๋ ํ์์ด๋ค. Locking ๋ ๋ฒจ์ด ๋ฎ์์๋ก ๋์์ฑ์ ์ข์ง๋ง ๊ด๋ฆฌํด์ผ ํ Lock ๊ฐ์๊ฐ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์๋นํ๋ค. ๋ฐ๋๋ก, Locking ๋ ๋ฒจ์ด ๋์์๋ก ์ ์ ์์ Lock ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ํ๋์ Lock์ผ๋ก ์๋ง์ ๋ ์ฝ๋๋ฅผ ํ๊บผ๋ฒ์ ์ ๊ทธ๊ธฐ ๋๋ฌธ์ ๋์์ฑ์ ๋๋น ์ง๋ค.
๋ค. Lock ํธํ์ฑ
'ํธํ๋๋ค'๋ ๋ง์ ํ ๋ฆฌ์์ค์ ๋ ๊ฐ ์ด์์ Lock์ ๋์์ ์ค์ ํ ์ ์์์ ๋ปํ๋ค. ์์ ์ค๋ช ํ Lock ์ข ๋ฅ๋ณ๋ก ํธํ์ฑ์ ์์ฝํ๋ฉด [ํ โ ข-2-2]์ ๊ฐ๋ค.('O'๋ ๋ ๋ชจ๋ ๊ฐ์ ํธํ์ฑ์ด ์์์ ์๋ฏธํจ)
์คํค๋ง Lock์ ํธํ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
Sch-S๋ Sch-M์ ์ ์ธํ ๋ชจ๋ Lock๊ณผ ํธํ๋๋ค.
Sch-M์ ์ด๋ค Lock๊ณผ๋ ํธํ๋์ง ์๋๋ค.
3. Oracle Lock
Oracle์ ๊ณต์ ๋ฆฌ์์ค์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ ๋ชฉ์ ์ผ๋ก DML Lock, DDL Lock, ๋์น(Latch), ๋ฒํผ Lock, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์ Lock/Pin ๋ฑ ๋ค์ํ ์ข ๋ฅ์ Lock์ ์ฌ์ฉํ๋ค. ์ด๋ค ์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ธก๋ฉด์์ ๊ฐ์ฅ ์ค์ํ๊ฒ ๋ค๋ฃจ์ด์ผ ํ Lock์ ๋ฌด์๋ณด๋ค DML Lock์ด๋ค. DML Lock์, ๋ค์ค ์ฌ์ฉ์์ ์ํด ๋์์ ์ก์ธ์ค๋๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํด ์ค๋ค. DML Lock์๋ ๋ก์ฐ Lock๊ณผ ํ ์ด๋ธ Lock์ด ์๋ค.
๊ฐ. ๋ก์ฐ Lock
Oracle์์ ๋ก์ฐ Lock์ ํญ์ ๋ฐฐํ์ ์ด๋ค. INSERT, UPDATE, DELETE๋ฌธ์ด๋ SELECT...for UPDATE๋ฌธ์ ์ํํ ํธ๋์ญ์ ์ ์ํด ์ค์ ๋๋ฉฐ, ์ด ํธ๋์ญ์ ์ด ์ปค๋ฐ ๋๋ ๋กค๋ฐฑํ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ ์ ํด๋น ๋ก์ฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. Oracle์์ ์ผ๋ฐ SELECT๋ฌธ์ ์ํด ์ฝํ ๋ ์ฝ๋์๋ ์ด๋ค Lock๋ ์ค์ ๋์ง ์๋๋ค. ๋ค๋ฅธ DBMS์ฒ๋ผ ์ฝ๊ธฐ ์์ ์ ๋ํ ๊ณต์ Lock์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ Oracle์์ ์ฝ๊ธฐ์ ๊ฐฑ์ ์์ ์ ์๋ก ๋ฐฉํดํ์ง ์๋๋ค.
์ฝ์ผ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐฑ์ ์ค์ด๋๋ผ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
๊ฐฑ์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ๋ ์ค์ด๋๋ผ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค. (SELECT ... for UPDATE ๊ตฌ๋ฌธ์ผ๋ก ์ฝ๋ ๊ฒฝ์ฐ๋ ์ ์ธ)
๊ฐฑ์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐฑ์ ์ค์ด๋ฉด ๊ธฐ๋ค๋ฆฐ๋ค.
Oracle์ด ๊ณต์ Lock์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ ๊ฒ์ Undo ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ๋ค์ค๋ฒ์ ๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ(3์ ์์ ์ค๋ช ?? ์์ด ๋ ์ฝ๋์ ์์ฑ์ผ๋ก์ ๋ก์ฐ Lock์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฆฌ ๋ง์ ๋ ์ฝ๋๋ฅผ ๊ฐฑ์ ํ๋๋ผ๋ ์ ๋ Lock Escalation์ ๋ฐ์ํ์ง ์๋๋ค.
๋. ํ
์ด๋ธ Lock
ํ ํธ๋์ญ์ ์ด ๋ก์ฐ Lock์ ์ป๋ ์๊ฐ, ํด๋น ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ Lock๋ ๋์์ ์ป๋๋ค. ๊ทธ๋ผ์ผ๋ก์จ ํ์ฌ ํธ๋์ญ์ ์ด ๊ฐฑ์ ์ค์ธ ํ ์ด๋ธ์ ๋ํ ํธํ๋์ง ์๋ DDL ์คํผ๋ ์ด์ ์ ๋ฐฉ์งํ๋ค. ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ์ด๋ค. ํ ์ด๋ธ Lock ์ข ๋ฅ๋ก๋ ์๋ 5๊ฐ์ง๊ฐ ์๋ค.
Row Share(RS)
Row Exclusive(RX)
Share(S)
Share Row Exclusive(SRX)
Exclusive(X)
๋ํ์ ์ผ๋ก, SELECT ... for UPDATE ๋ฌธ์ ์ํํ ๋ RS ๋ชจ๋ ํ ์ด๋ธ Lock์ ์ป๊ณ , INSERT, UPDATE, DELETE๋ฌธ์ ์ํํ ๋ RX ๋ชจ๋ ํ ์ด๋ธ Lock์ ์ป๋๋ค. DML ๋ก์ฐ Lock์ ์ฒ์ ์ป๋ ์๊ฐ ๋ฌต์์ ์ผ๋ก ํ ์ด๋ธ Lock์ ์ป์ง๋ง, ์๋ ์ฒ๋ผ Lock Table ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ๋ช ์์ ์ผ๋ก ํ ์ด๋ธ Lock์ ์ป์ ์๋ ์๋ค.
lock table emp in row share mode; lock table emp in row exclusive mode; lock table emp in share mode; lock table emp in share row exclusive mode; lock table emp in exclusive mode;
ํ ์ด๋ธ Lock๋ผ๋ฆฌ์ ํธํ์ฑ์ [ํ โ ข-2-3]๊ณผ ๊ฐ๋ค.
'ํ ์ด๋ธ Lock'์ด๋ผ๊ณ ํ๋ฉด, ํ ์ด๋ธ ์ ์ฒด์ Lock์ด ๊ฑธ๋ฆฐ๋ค๊ณ ์๊ฐํ๊ธฐ ์ฝ๋ค. DML ์ํ ์ ํญ์ ํ ์ด๋ธ Lock์ด ํจ๊ป ์ค์ ๋๋ค๊ณ ํ๋๋ฐ, ๋ง์ฝ ์ด๊ฒ์ด SQL Server์ ํ ์ด๋ธ ๋ ๋ฒจ Lock์ฒ๋ผ ํ ์ด๋ธ ์ ์ฒด๋ฅผ ์ ๊ทธ๋ ๊ธฐ๋ฅ์ด๋ผ๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋๋ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ฐฑ์ ํ์ง ๋ชปํ๋๋ก ๋ง๊ฒ ๋ ๊ฒ์ด๋ค. ํ์ง๋ง [ํ โ ข-2-3]์์ ๋ณด๋ฏ, RX์ RX ๊ฐ์ ํธํ์ฑ์ด ์์ผ๋ฏ๋ก ๊ทธ๋ฐ ์ผ์ ๋ฐ์ํ์ง ์๋๋ค. Oracle์์ ๋งํ๋ ํ ์ด๋ธ Lock์, Lock์ ํ๋ํ ์ ํ ํธ๋์ญ์ ์ด ํด๋น ํ ์ด๋ธ์์ ํ์ฌ ์ด๋ค ์์ ์ ์ํ ์ค์ธ์ง๋ฅผ ์๋ฆฌ๋ ์ผ์ข ์ ํฏ๋ง(Flag)์ด๋ค. ํํ ํธ๋์ญ์ ์ ์ด๋ค ํ ์ด๋ธ Lock์ด ์ค์ ๋ผ ์๋์ง๋ง ๋ณด๊ณ ๋ ๊ทธ ํ ์ด๋ธ๋ก์ ์ง์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
Last updated
Was this helpful?