1. Lock μ΄λ ?
Lock μ΄λ 무μμΌκΉμ ?

Lock μ μμ΄λ‘ "μ κ·Έλ€, μ κ° λλ€" λΌλ λ»μ κ°μ§κ³ μμ΅λλ€. π
μ΄λ₯Ό DB μ μ μ©ν΄λ³΄λ©΄
Lock μ νΈλμμ μ΄ μλ²½νκ² λλ λκΉμ§ λ€λ₯Έ μμ²μ΄ ν΄λΉ λ°μ΄ν°μ μ κ·Όνμ§ λͺ»νλλ‘ λ§λ κΈ°λ₯μ λλ€.
μ΄λ₯Ό ν΅ν΄ νΈλμμ μ²λ¦¬μ μμ°¨μ±μ 보μ₯νκ³ , λ°μ΄ν°μ μΌκ΄μ±μ μ μ§ν μ μμ΅λλ€.
λν, Lock μ DB κ° μ²λ¦¬νλ κ°μ₯ μμ λ¨μμ λλ€.
2-1. Lock μ μ’ λ₯
Lock μ μ μ© μμμ μ μ©λλ μν©μ λ°λΌμ μ¬λ¬κ°μ§λ‘ λΆλ₯ ν μ μμ΅λλ€.
μ μ© μμμ λ€λ₯Έ λΆλ₯
: Lock μ΄ μ΄λ€ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ κ·Έλμ§μ λ°λΌ λ€μκ³Ό κ°μ΄ λλ©λλ€
- Shared Lock (S Lock, 곡μ λ½) - μ¬λ¬ νΈλμμ μ΄ λμμ μ½μ μ μμ§λ§, μ°κΈ°λ λΆκ°λ₯
- Exclusive Lock (X Lock, λ°°νμ λ½) - νλμ νΈλμμ λ§ μ κ·Ό κ°λ₯νλ©°, μ½κΈ°μ μ°κΈ° λͺ¨λ νμ©
- Intention Lock (μλμ λ½) - μμ κ°μ²΄μ λ½μ κ±ΈκΈ° μ μ 미리 μ€μ νλ λ½
λ½μ΄ μ μ©λλ μν©μ λ°λ₯Έ λΆλ₯
: Lock μ΄ μ΄λ€ λ¨μλ‘ μ μ©λλμ§μ λ°λΌ λ€μκ³Ό κ°μ΄ λλ©λλ€
- Row-level Lock - νΉμ ν λ¨μλ‘ κ±Έλ¦¬λ λ½
- Record Lock - μΈλ±μ€ λ μ½λμ 걸리λ λ½
- Gap Lock - λ μ½λ μ¬μ΄μ 곡κ°μ 걸리λ λ½
- Next-Key Lock - Record Lock + Gap Lock
- Insert Intention Lock - μλ‘μ΄ λ°μ΄ν° μ½μ μ μν΄ νμν λ½
- Auto-INC Lock - AUTO_INCREMENT κ°μ κ΄λ¦¬ νκΈ° μν λ½
2-2. μ μ© μμμ λ°λ₯Έ λΆλ₯
Lock μ΄ μ΄λ€ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ κ·Έλμ§μ λν΄μ λΆλ₯λκ³ , Shared Lock / Exclusive Lock / Intention Lock μ΄ μμ΅λλ€
1. Shared Lock (S-Lock, 곡μ λ½)
Shared Lock μ νΉμ ν λ¨μλ‘ κ±Έλ¦¬λ Row-level Lock μ λλ€.
μ½κΈ° (Read) μ λν Lock μ΄λ©°, μ¬λ¬ νΈλμμ μ΄ λμμ μ½μ μ μμ§λ§, μΈ μ μμ΅λλ€.
2. Exclusive Lock (X-Lock, λ°°νμ λ½)
Exclusive Lock λ νΉμ ν λ¨μλ‘ κ±Έλ¦¬λ Row-level Lock μ λλ€.
μ°κΈ° (Write) μ λν Lock μ΄λ©°, νλμ νΈλμμ λ§ μ κ·Ό κ°λ₯νλ©°, μ½κΈ°μ μ°κΈ° λͺ¨λλ₯Ό νμ©ν©λλ€.
νλμ νΈλμμ λ§ μ κ·Ό κ°λ₯νκΈ° λλ¬Έμ, Lock μ΄ ν΄μ λ λκΉμ§ λ€λ₯Έ νΈλμμ μ ν΄λΉ νμ μ κ·Όν μ μμ΅λλ€
SQL μμ μ§μ X-Lock μ ν μ€νΈν΄λ³Ό μ μλλ°μ
-- κ° SQL λ¬Έμ₯μ΄ μ¦μ λ°μλμ§ μλλ‘ μ€μ (μλ μ»€λ° ν΄μ )
SET autocommit=0;
START TRANSACTION;
-- νΉμ λ°μ΄ν°λ₯Ό μ
λ°μ΄νΈνλ©΄μ X-Lockμ μ€μ
UPDATE test SET name = 'ν
μ€νΈ' WHERE id = 1;
-- μ΄ν COMMIT νμ§ μμΌλ©΄ Lockμ΄ μ μ§λ¨
-- λ€λ₯Έ νΈλμμ
μ μ΄ rowμ μ κ·Όν μ μμ
1. μλ 컀λ°μ ν΄μ (SQL μ΄ λλκ³ μλμ μΌλ‘ 컀λ°λμ§ μλλ‘ ν©λλ€)
2. νΈλμμ μμ
3. μ λ°μ΄νΈ νλ©΄μ test ν μ΄λΈμ id = 1 μΈ row μ X-Lock μ κ²
4. COMMIT νμ§ μμκΈ° λλ¬Έμ Lock μ΄ μ μ§
λκ² λ©λλ€.
βοΈ id = 1 μΈ row μ X-Lock μ΄ κ±Έλ €μκΈ° λλ¬Έμ λ€λ₯Έ νΈλμμ μ ν΄λΉ νμ μ κ·Όν μ μμ΅λλ€.
κ·Έλ λ€λ©΄ X-Lock μ΄ κ±Έλ¦° row μ S-Lock μ΄ κ±Έλ¦΄ μ μμκΉμ ?
νΉμ κ·Έ λ°λμ κ²½μ°μλ μ΄λ¨κΉμ ?
그건 λ°λ‘ S-Lock κ³Ό X-Lock μ κ²½μ κ΄κ³λ₯Ό ν΅ν΄μ μμ보λλ‘ νκ² μ΅λλ€
3. S-Lock vs X-Lock μ κ²½μ κ΄κ³
| S-Lock | X-Lock |
| S-Lock κ°λ₯ | S-Lock λΆκ°λ₯ |
| X-Lock λΆκ°λ₯ | X-Lock λΆκ°λ₯ |
μμ νλ₯Ό ν΅ν΄ S-Lock κ³Ό X-Lock μ κ²½μ κ΄κ³λ₯Ό μ μ μλλ°μ.
S-Lock μλ S-Lock λ§ κ°λ₯νκ³ , λͺ¨λ λ€λ₯Έ κ²½μ°μλ λΆκ°λ₯ν©λλ€.
μ 리ν΄λ³΄μλ©΄ μλμ κ°μ΅λλ€
- μ¬λ¬ νΈλμμ μ΄ ν row μ S-Lock μ κ±Έ μ μλ€.
- S Lock μ΄ κ±Έλ € μλ row μ λ€λ₯Έ νΈλμμ μ΄ X-Lock μ κ±Έ μ μλ€
- X-Lock μ΄ κ±Έλ € μλ row μ λ€λ₯Έ νΈλμμ μ΄ S-Lock, X-Lock μ κ±Έ μ μλ€.
4. Intention Lock
Intention Lock μ S-Lock, X-Lock κ³Όλ λ€λ₯΄κ² ν μ΄λΈ μ μ²΄λ‘ κ±Έλ¦¬λ Table-level Lock μ λλ€.
νΉμ row μ λν΄ λμ€μ Row-level Lock μ κ±Έ κ²μ 미리 μ μΈνλ μν μ ν©λλ€.
μ΄λ₯Ό ν΅ν΄ νΈλμμ μ΄ νΉμ ν μ΄λΈμ μΌλΆ row μ λν΄ λ½μ μμ²ν κ²μμ λͺ νν νκ³ , λ€λ₯Έ νΈλμμ μ΄ ν μ΄λΈ μμ€μμ μ κΈμ μ€μ νλ κ²μ λ°©μ§ν©λλ€
Intention Lock μ S-Lock κ³Ό X-Lock μ κ²°ν©ν΄ μ΄ λκ°μ§ μ’ λ₯λ‘ λλ©λλ€.
- Intention Shared Lock (IS)
- SELECT ... LOCK IN SHARE MODE μ€ν μ λ°μν©λλ€
- ν΄λΉ ν μ΄λΈμμ μ½κΈ° μμ μ μνν μλκ° μμμ λνλ λλ€
- Intention Exclusive Lock (IX)
- SELECT ... FOR UPDATE, INSERT, DELETE, UPDATE μ€νμ λ°μν©λλ€
- ν΄λΉ ν μ΄λΈμμ μ°κΈ° μμ μ μνν μλκ° μμμ λνλ λλ€
IS, IX λ½μ μ¬λ¬ νΈλμμ μμ λμμ μ κ·Όκ°λ₯νμ§λ§, μ€μ λ°μ΄ν° λ³κ²½ μ¬λΆλ Row-level Lock (S, X) μ μν΄ κ²°μ λ©λλ€.
κ·Έλ λ€λ©΄ μ Table-level Lock κ³Ό Row-level Lock λ κ°μ§ Lock μ΄ νμλ‘ ν κΉμ ?
λ°λ‘, νΈλμμ κ° μΆ©λμ λ°©μ§νκ³ , λ°μ΄ν°μ μ ν©μ±μ μ μ§νκΈ° μν΄μμ λλ€.
μλ₯Ό λ€μ΄ A νΈλμμ μ΄ μ΄λ―Έ ν μ΄λΈμ μμ νκ³ μλ κ²½μ°μλ (IX λ½)
-> B νΈλμμ μ΄ ν΄λΉ ν μ΄λΈμ μ€ν€λ§ λ³κ²½μ μλνμ§ λͺ»νλλ‘ μ°¨λ¨ν©λλ€
A νΈλμμ μ΄ νΉμ row λ₯Ό μ½κ³ μλ€λ©΄ (IS λ½)
-> B νΈλμμ μ΄ ν΄λΉ row λ₯Ό μμ νμ§ λͺ»νλλ‘ λ³΄μ₯ν©λλ€.
λ κ°μ§ Level μ Lock μ μ¬μ©ν΄μ λ°μ΄ν°μ μ ν©μ±μ λμ± μ μ μ§ν μ μμ΅λλ€
2-3. μ μ©λλ μν©μ λ°λ₯Έ λΆλ₯
Lock μ΄ μ΄λ€ λ¨μλ‘ μ μ©λλμ§μ λ°λΌ λΆλ₯λκ³ ,
Row-level Lock / Record Lock / Gap Lock / Next-Key Lock / Insert Intention Lock / Auto-Inc Lock μ΄ μμ΅λλ€
1. Row-level Lock
κ° ν μ΄λΈμ κ°λ³ row λ§λ€ 걸리λ Lock μΌλ‘ μμμ κ³μ μΈκΈλμλ κ²μ²λΌ S-Lock, X-Lock μ΄ μμ΅λλ€
2. Record Lock
νΉμ Insert Record μ 걸리λ Lock μΌλ‘ PK, UK λ‘ μ‘°νν΄μ νλμ μΈλ±μ€ λ μ½λμλ§ Lock μ κ²λλ€
νΈλμμ κ° λμΌν λ μ½λμ λν μΆ©λμ λ°©μ§ν©λλ€
3. Gap Lock
DB index Record μ Gap μ 걸리λ Lock μ λλ€.
μ¬κΈ°μ gap μ΄λ ?
μΈλ±μ€κ° μ‘΄μ¬νμ§λ§, μ€μ λ°μ΄ν°κ° μλ λ²μ°λ₯Ό μλ―Έν©λλ€.
μλ₯Ό λ€μ΄μ id = 3 κ³Ό id = 7 μΈ λ μ½λκ° μ‘΄μ¬νλ κ²½μ°
id <= 2 λ 3 < id < 7 λ id >= 8 μ μ€μ λ μ½λκ° μλ gap μ΄ λ©λλ€
μ΄λ° gap λ€ μ¬μ΄μ μλ‘μ΄ insert κ° λλ κ²μ λ°©μ§νκΈ° μν Lock μ λλ€.
μ΅μ΄ λ μ½λμ μ΄μ , λ§μ§λ§ λ μ½λμ μ΄νμ Gap μλ LocK μ μ€μ ν©λλ€
4. Next-Key Lock
Record Lock κ³Ό Gap Lock μ ν¨κ» μ¬μ©νλ Lock μ λλ€.
REPEATABLE READ μμ Phanthom read λ₯Ό λ§κΈ° μν΄ νμ μ Next-Key Lock μ μ¬μ©ν©λλ€.
λ°μ΄ν° μ‘°ν μ gap κ³Ό ν΄λΉ λ μ½λλ₯Ό λμμ Lock νμ¬μ λ°μ΄ν° μ½μ μ μ°¨λ¨ν©λλ€
5. Insert Intention Lock
insert μ λ°μνλ νΉμν ννμ Gap Lock μ λλ€.
- νΉμ μμΉμ INSERTκ° λ°μνλ©΄, ν΄λΉ μμΉμ X-Lockμ κ±ΈκΈ° μ μ λ¨Όμ Insert Intention Lockμ μ€μ ν©λλ€
- κΈ°μ‘΄ νΈλμμ κ³Ό μ½μ μμΉκ° μΆ©λνμ§ μλλ€λ©΄ λκΈ° μμ΄ INSERT μ§ν κ°λ₯ν©λλ€
Gap Lock κ³Όμ μ°¨μ΄μ μΌλ‘λ
- Gap Lockμ ν΄λΉ ꡬκ°μ μ΄λ€ λ μ½λλ μΆκ°λμ§ λͺ»νκ² μμ ν μ°¨λ¨νμ§λ§,
- Insert Intention Lockμ μ½μ μμΉκ° κ²ΉμΉμ§ μμΌλ©΄ λ€λ₯Έ νΈλμμ μ INSERTλ₯Ό νμ©ν©λλ€ → λκΈ° μκ° κ°μ
6. Auto-Inc Lock
AUTO_INCREMENT μ»¬λΌ κ°μ νΈλμμ κ° μΌκ΄λκ² μ¦κ°μν€κΈ° μν΄ μ€μ λλ Lock μ λλ€.
μ¬λ¬ νΈλμμ μ΄ λμμ μ€νλ λ κ° νΈλμμ μ΄ κ³ μ ν AUTO_INCREMENT κ°μ λ°λλ‘ λ³΄μ₯ν©λλ€
3. Lock μ΄ ν΄μ λλ νμ΄λ°
DB μ μ€μ λ Lock μ λ€μκ³Ό κ°μ λ κ°μ§ κ²½μ°μ ν΄μ λ©λλ€
- νΈλμμ μ΄ COMMIT λ λ -> λ³κ²½λ λ°μ΄ν°κ° μꡬμ μΌλ‘ λ°μλλ©΄μ Lock μ΄ ν΄μ λ©λλ€
- νΈλμμ μ΄ ROLLBACK λ λ -> λ³κ²½λ λ°μ΄ν°κ° μ·¨μλλ©΄μ Lock μ΄ ν΄μ λ©λλ€
μ¦, νΈλμμ μ΄ μ’ λ£λ λ μλμΌλ‘ Lock μ΄ ν΄μ λ©λλ€
4. κ²°λ‘
Lock μ λ°μ΄ν°λ² μ΄μ€μμ λμμ±μ μμ νκ² κ΄λ¦¬νκ³ , λ°μ΄ν°μ μ ν©μ±μ μ μ§νλ ν΅μ¬μ μΈ μμμ λλ€ !!!!
νΈλμμ μ΄ λ°μ΄ν°λ₯Ό μ½κ±°λ λ³κ²½ν λ Lock μ μ μ ν μ¬μ©νλ©΄ μ¬λ¬ νΈλμμ μ΄ μμ νκ² λμν μ μλλ‘ λ³΄μ₯ν©λλ€.
νμ§λ§, κ³Όλν Lock μ¬μ©μ μ±λ₯ μ νλ₯Ό μ΄λν μ μκ³ ,
μκ·Ήμ μΈ Lock μ¬μ©μ λ°μ΄ν°μ μ ν©μ±μ μ μ§ν μ μμ΅λλ€.
κ·Έλ κΈ° λλ¬Έμ μ μ ν Lock μ μ¬μ©νλ κ²μ΄ λ§€μ°λ§€μ° !!! μ€μν©λλ€.
λ€μ ν¬μ€ν°μμλ μ€μ λ‘ μ¬μ©λλ Lock μ λν΄μ μμ보λλ‘ νκ² μ΅λλ€
'ποΈ λ°μ΄ν°λ² μ΄μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| νΈλμμ μ΄λ ? (0) | 2025.03.15 |
|---|---|
| Lock μ΄ μ 리2 - λκ΄μ λ½, λΉκ΄μ λ½, λ°λλ½, λΆμ°λ½ (1) | 2025.02.28 |
| μΈλ±μ€μ μ’ λ₯μ λν΄μ μμ보μ ! (0) | 2025.02.01 |
| DB μΈλ±μ€ κ°λ μ 리: μ μ₯ ꡬ쑰, μμ± κ³Όμ , λμ μ리 (1) | 2024.12.12 |