๐Ÿ˜—
SQL Guide
  • ๐Ÿ˜€SQL ์ „๋ฌธ๊ฐ€ ๊ฐ€์ด๋“œ์˜ ๊ฐ€์ด๋“œ
  • ๐Ÿ˜ฆ๊ณผ๋ชฉ1 ๋ฐ์ดํ„ฐ๋ชจ๋ธ์˜ ์ดํ•ด
    • โญ์ œ1์žฅ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์ดํ•ด
      • ๐ŸŒ 1-1-1. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ์ดํ•ด
      • ๐ŸŒ 1-1-2. ์—”ํ„ฐํ‹ฐ(Entity)
      • ๐ŸŒ 1-1-3. ์†์„ฑ(Attribute)
      • ๐ŸŒ 1-1-4. ๊ด€๊ณ„(Relationship)
      • ๐ŸŒ 1-1-5. ์‹๋ณ„์ž
    • โญ์ œ2์žฅ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ SQL
      • ๐ŸŒ 1-2-1. ์ •๊ทœํ™”
      • ๐ŸŒ 1-2-2. ๊ด€๊ณ„์™€ ์กฐ์ธ์˜ ์ดํ•ด
      • ๐ŸŒ 1-2-3. ๋ชจ๋ธ์ด ํ‘œํ˜„ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์ดํ•ด
      • ๐ŸŒ 1-2-4. Null ์†์„ฑ์˜ ์ดํ•ด
      • ๐ŸŒ 1-2-5. ๋ณธ์งˆ์‹๋ณ„์ž vs. ์ธ์กฐ์‹๋ณ„์ž
  • ๐Ÿ˜ง๊ณผ๋ชฉ2. SQL ๊ธฐ๋ณธ๊ณผ ํ™œ์šฉ
    • โญ์ œ1์žฅ SQL ๊ธฐ๋ณธ
      • ๐ŸŒ 2-1-1. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ์š”
      • ๐ŸŒ 2-1-2. SELECT๋ฌธ
      • ๐ŸŒ 2-1-3. ํ•จ์ˆ˜(FUNCTION)
      • ๐ŸŒ 2-1-4. WHERE ์ ˆ
      • ๐ŸŒ 2-1-5. GROUP BY, HAVING ์ ˆ
      • ๐ŸŒ 2-1-6. ORDER BY ์ ˆ
      • ๐ŸŒ 2-1-7. ์กฐ์ธ
      • ๐ŸŒ 2-1-8. ํ‘œ์ค€ ์กฐ์ธ
    • โญ์ œ2์žฅ SQL ํ™œ์šฉ
      • ๐ŸŒ 2-2-1. ์„œ๋ธŒ ์ฟผ๋ฆฌ
      • ๐ŸŒ 2-2-2. ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž
      • ๐ŸŒ 2-2-3. ๊ทธ๋ฃน ํ•จ์ˆ˜
      • ๐ŸŒ 2-2-4. ์œˆ๋„์šฐ ํ•จ์ˆ˜
      • ๐ŸŒ 2-2-5. Top N ์ฟผ๋ฆฌ
      • ๐ŸŒ 2-2-6. ๊ณ„์ธตํ˜• ์งˆ์˜์™€ ์…€ํ”„ ์กฐ์ธ
      • ๐ŸŒ 2-2-7. PIVOT ์ ˆ๊ณผ UNPIVOT ์ ˆ
      • ๐ŸŒ 2-2-8. ์ •๊ทœ ํ‘œํ˜„์‹
    • โญ์ œ3์žฅ ๊ด€๋ฆฌ ๊ตฌ๋ฌธ
      • ๐ŸŒ 2-3-1. DML
      • ๐ŸŒ 2-3-2. TCL
      • ๐ŸŒ 2-3-3. DDL
      • ๐ŸŒ 2-3-4. DCL
  • ๐Ÿ˜จ๊ณผ๋ชฉ3. SQL ๊ณ ๊ธ‰ ํ™œ์šฉ ๋ฐ ํŠœ๋‹
    • โญ์ œ1์žฅ SQL ์ˆ˜ํ–‰ ๊ตฌ์กฐ
      • ๐ŸŒ 3-1-1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜
      • ๐ŸŒ 3-1-2. SQL ์ฒ˜๋ฆฌ ๊ณผ์ •
      • ๐ŸŒ 3-1-3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค I/O ๋ฉ”์ปค๋‹ˆ์ฆ˜
    • โญ์ œ2์žฅ SQL ๋ถ„์„ ๋„๊ตฌ
      • ๐ŸŒ 3-2-1. ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš
      • ๐ŸŒ 3-2-2. SQL ํŠธ๋ ˆ์ด์Šค
      • ๐ŸŒ 3-2-3. ์‘๋‹ต ์‹œ๊ฐ„ ๋ถ„์„
    • โญ์ œ3์žฅ ์ธ๋ฑ์Šค ํŠœ๋‹
      • ๐ŸŒ 3-3-1. ์ธ๋ฑ์Šค ๊ธฐ๋ณธ ์›๋ฆฌ
      • ๐ŸŒ 3-3-2. ํ…Œ์ด๋ธ” ์•ก์„ธ์Šค ์ตœ์†Œํ™”
      • ๐ŸŒ 3-3-3. ์ธ๋ฑ์Šค ์Šค์บ” ํšจ์œจํ™”
      • ๐ŸŒ 3-3-4. ์ธ๋ฑ์Šค ์„ค๊ณ„
    • โญ์ œ4์žฅ ์กฐ์ธ ํŠœ๋‹
      • ๐ŸŒ 3-4-1. NL ์กฐ์ธ
      • ๐ŸŒ 3-4-2. ์†ŒํŠธ ๋จธ์ง€ ์กฐ์ธ
      • ๐ŸŒ 3-4-3. ํ•ด์‹œ ์กฐ์ธ
      • ๐ŸŒ 3-4-4. ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ
      • ๐ŸŒ 3-4-5. ๊ณ ๊ธ‰ ์กฐ์ธ ๊ธฐ๋ฒ•
    • โญ์ œ5์žฅ SQL ์˜ตํ‹ฐ๋งˆ์ด์ €
      • ๐ŸŒ 3-5-1. SQL ์˜ตํ‹ฐ๋งˆ์ด์ง• ์›๋ฆฌ
      • ๐ŸŒ 3-5-2. SQL ๊ณต์œ  ๋ฐ ์žฌ์‚ฌ์šฉ
      • ๐ŸŒ 3-5-3. ์ฟผ๋ฆฌ ๋ณ€ํ™˜
    • โญ์ œ6์žฅ ๊ณ ๊ธ‰ SQL ํŠœ๋‹
      • ๐ŸŒ 3-6-1. ์†ŒํŠธ ํŠœ๋‹
      • ๐ŸŒ 3-6-2. DML ํŠœ๋‹
      • ๐ŸŒ 3-6-3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Call ์ตœ์†Œํ™”
      • ๐ŸŒ 3-6-4. ํŒŒํ‹ฐ์…”๋‹
      • ๐ŸŒ 3-6-5. ๋Œ€์šฉ๋Ÿ‰ ๋ฐฐ์น˜ ํ”„๋กœ๊ทธ๋žจ ํŠœ๋‹
      • ๐ŸŒ 3-6-6. ๊ณ ๊ธ‰ SQL ํ™œ์šฉ
    • โญ์ œ7์žฅ Lock๊ณผ ํŠธ๋žœ์žญ์…˜ ๋™์‹œ์„ฑ ์ œ์–ด
      • ๐ŸŒ 3-7-1. Lock
      • ๐ŸŒ 3-7-2. ํŠธ๋žœ์žญ์…˜
      • ๐ŸŒ 3-7-3. ๋™์‹œ์„ฑ ์ œ์–ด
Powered by GitBook
On this page
  • ๊ณผ๋ชฉ3. SQL ๊ณ ๊ธ‰ ํ™œ์šฉ ๋ฐ ํŠœ๋‹
  • ์ œ7์žฅ Lock๊ณผ ํŠธ๋žœ์žญ์…˜ ๋™์‹œ์„ฑ ์ œ์–ด
  • ์ œ1์ ˆ Lock
  • 1. Lock ๊ธฐ๋ณธ
  • 2. SQL Server Lock
  • 3. Oracle Lock

Was this helpful?

  1. ๊ณผ๋ชฉ3. SQL ๊ณ ๊ธ‰ ํ™œ์šฉ ๋ฐ ํŠœ๋‹
  2. ์ œ7์žฅ Lock๊ณผ ํŠธ๋žœ์žญ์…˜ ๋™์‹œ์„ฑ ์ œ์–ด

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์ดˆ๋ฅผ ๋„˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•œ ๊ฒƒ์ด๋‹ค.

set LOCK_TIMEOUT 2000

Oracle์ด๋ผ๋ฉด UPDATE/DELETE ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— nowait์ด๋‚˜ wait ์˜ต์…˜์„ ์ง€์ •ํ•œ SELECT โ€ฆ for UPDATE ๋ฌธ์„ ๋จผ์ € ์ˆ˜ํ–‰ํ•ด ๋ด„์œผ๋กœ์จ Lock์ด ์„ค์ •๋๋Š”์ง€ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์‚ฌํ•ญ(exception)์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT * FROM T WHERE NO = 1 FOR UPDATE NOWAIT
-- nowait โ†’ ๋Œ€๊ธฐ์—†์ด Exception ์„๋˜์ง

SELECT * FROM T WHERE NO = 1 FOR UPDATE WAIT 3
-- wait 3 โ†’ 3 ์ดˆ๋Œ€๊ธฐํ›„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์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์„ฑ ์ˆ˜์ค€์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์ ˆ์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

BEGIN TRAN

SELECT ์ ๋ฆฝํฌ์ธํŠธ
    , ๋ฐฉ๋ฌธํšŸ์ˆ˜
    , ์ตœ๊ทผ๋ฐฉ๋ฌธ์ผ์‹œ
    , ๊ตฌ๋งค์‹ค์ 
 FROM ๊ณ ๊ฐ with (holdlock)
WHERE ๊ณ ๊ฐ๋ฒˆํ˜ธ = :cust_num -- ์ƒˆ๋กœ์šด์ ๋ฆฝํฌ์ธํŠธ๊ณ„์‚ฐ

UPDATE ๊ณ ๊ฐ
  SET ์ ๋ฆฝํฌ์ธํŠธ = :์ ๋ฆฝํฌ์ธํŠธ
WHERE ๊ณ ๊ฐ๋ฒˆํ˜ธ = :cust_num

COMMIT;

๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•  ๋ชฉ์ ์œผ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์œ„์™€ ๊ฐ™์€ ํŒจํ„ด์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์œ„ ์‚ฌ๋ก€์—์„œ ๋ฐฉ๋ฌธํšŸ์ˆ˜, ์ตœ๊ทผ๋ฐฉ๋ฌธ์ผ์‹œ, ๊ตฌ๋งค์‹ค์ ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์ ๋ฆฝํฌ์ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ ๋ฆฝํฌ์ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋ฉด ์ ๋ฆฝํฌ์ธํŠธ๊ฐ€ ๋น„์ผ๊ด€๋œ ์ƒํƒœ์— ๋†“์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2) ๋ฐฐํƒ€์  Lock

1ํ•ญ์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ๊ณผ ๊ฐ™๋‹ค.

3) ๊ฐฑ์‹  Lock

์•ž์„œ ๊ณต์œ  Lock์„ ์„ค๋ช…ํ•˜๋ฉด์„œ ์˜ˆ์‹œํ–ˆ๋˜ ์ ๋ฆฝํฌ์ธํŠธ ๋ณ€๊ฒฝ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณต๊ต๋กญ๊ฒŒ๋„ ๋‘ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ˆ˜ํ–‰ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋‹ค. ๊ทธ๊ฒƒ๋„ ๊ฐ™์€ ๊ณ ๊ฐ์— ๋Œ€ํ•ด์„œ ๋ง์ด๋‹ค. ๋‘ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋‘ ์ฒ˜์Œ์—๋Š” ๊ณต์œ  Lock์„ ์„ค์ •ํ–ˆ๋‹ค๊ฐ€ ์ ๋ฆฝํฌ์ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ง์ „์— ๋ฐฐํƒ€์  Lock์„ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‘ ํŠธ๋žœ์žญ์…˜์€ ์ƒ๋Œ€ํŽธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•œ ๊ณต์œ  Lock์ด ํ•ด์ œ๋˜๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ต์ฐฉ์ƒํƒœ์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์ž ์žฌ์ ์ธ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๊ณ  SQL Server๋Š” ๊ฐฑ์‹ (UPDATE) Lock์„ ๋‘๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด updlock ํžŒํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

BEGIN TRAN

SELECT ์ ๋ฆฝํฌ์ธํŠธ
    , ๋ฐฉ๋ฌธํšŸ์ˆ˜
    , ์ตœ๊ทผ๋ฐฉ๋ฌธ์ผ์‹œ
    , ๊ตฌ๋งค์‹ค์ 
 FROM ๊ณ ๊ฐwith (updlock)
WHERE ๊ณ ๊ฐ๋ฒˆํ˜ธ = :cust_num -- ์ƒˆ๋กœ์šด์ ๋ฆฝํฌ์ธํŠธ๊ณ„์‚ฐ

UPDATE ๊ณ ๊ฐ
  SET ์ ๋ฆฝํฌ์ธํŠธ = :์ ๋ฆฝํฌ์ธํŠธ
WHERE ๊ณ ๊ฐ๋ฒˆํ˜ธ = :cust_num 

COMMIT;

ํ•œ ์ž์›์— ๋Œ€ํ•œ ๊ฐฑ์‹  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์ด ์„ค์ •๋ผ ์žˆ๋Š”์ง€๋งŒ ๋ณด๊ณ ๋„ ๊ทธ ํ…Œ์ด๋ธ”๋กœ์˜ ์ง„์ž… ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Previous์ œ7์žฅ Lock๊ณผ ํŠธ๋žœ์žญ์…˜ ๋™์‹œ์„ฑ ์ œ์–ดNext3-7-2. ํŠธ๋žœ์žญ์…˜

Last updated 3 years ago

Was this helpful?

์ถœ์ฒ˜ : ๋ฐ์ดํ„ฐ์˜จ์—์–ด โ€“ ํ•œ๊ตญ๋ฐ์ดํ„ฐ์‚ฐ์—…์ง„ํฅ์›()

๐Ÿ˜จ
โญ
๐ŸŒ 
https://dataonair.or.kr