InnoDB Storage Engine Lock
InnoDB μ€ν λ¦¬μ§ μμ§μ λ€λ₯Έ μμ§κ³Όλ λ€λ₯΄κ² λ μ½λ κΈ°λ°μ μ κΈ κΈ°λ₯μ μ 곡νλ€λ κ°μ₯ ν° νΉμ§μ΄ μλ€. λν μ κΈ μ 보λ₯Ό μμ ν¬κΈ°μ λ©λͺ¨λ¦¬λ‘ κ΄λ¦¬νκΈ° λλ¬Έμ λ μ½λ λ½μ΄ νμ΄μ§λ½/ν μ΄λΈ λ½μΌλ‘ νμ₯λλ κ²½μ°(λ½ μμ€μ»¬λ μ΄μ )κ° μλ€.
λ μ½λ λ½(Record Lock)
ν μ΄λΈ μ μ²΄κ° μλ λ μ½λ λ¨μλ‘ μ κ·Έλ λ½μΌλ‘ λ μ½λ μ체λ₯Ό μ κ·Έλ κ²μ΄ μλλΌ μΈλ±μ€μ λ μ½λλ₯Ό μ κ·Έλ λ°©μμΌλ‘ μ²λ¦¬νλ€. (μΈλ±μ€κ° νλλ μλ ν μ΄λΈμ κ²½μ° μλ μμ±λ ν΄λ¬μ€ν° μΈλ±μ€μ λν λ μ½λ λ½μ νλνμ¬ μ²λ¦¬νλ€.)
λ μ½λ μ체 μ κΈ & μΈλ±μ€μ λ μ½λ μ κΈ μ°¨μ΄
λ μ½λ λ½μ ν μ΄λΈ λ μ½λκ° μλ μΈλ±μ€λ₯Ό μ κ·Έλ λ°©μμΌλ‘ μ²λ¦¬νκ² λλ€. μΈλ±μ€λ₯Ό μ κ·Έκ² λλ©΄, λ³κ²½ν λ μ½λλ₯Ό μ°ΎκΈ° μν΄ κ²μν μΈλ±μ€μ λ μ½λλ₯Ό λͺ¨λ λ½μ΄ κ±Έλ¦¬κ² λλ€.
μμ μ€ν λ¬Έμμ
UPDATE
λ¬Έμ₯μ λ¨ ν 건μ λ μ½λλ§ λ³κ²½νμ§λ§ μ΄ λ¬Έμ₯μ 쑰건μμ μΈλ±μ€λ₯Ό μ΄μ©ν μ μλ 쑰건μ
first_name
μ»¬λΌ νλλ§ μ‘΄μ¬λλ¬Έμ
first_name
컬λΌμ μΈλ±μ€λ₯Ό μ κ·Έκ² λκ³ , μ΄μ λ°λΌfirst_name
컬λΌμ κ°μ΄Kwon
μΈ λͺ¨λ λ μ½λκ° λ½ μμ±μΈλ±μ€λ₯Ό ν΅ν΄ μ€μΊν μ μλ μν©μλ λ μ½λ μ‘°ν μ ν μ΄λΈμ ν μ€μΊνλ©΄μ 30λ§ κ±΄μ λ μ½λ μ λΆ λ½μ΄ κ±Έλ¦¬κ² λ¨
κ° λ½(Gap Lock)
λ μ½λκ° μ§μ λ λ²μμ ν΄λΉνλ μΈλ±μ€ ν μ΄λΈ 곡κ°μ λμμΌλ‘ κ±°λ μ κΈμΌλ‘, λ€λ₯Έ λ°μ΄ν°κ° μ½μ λλ κ²μ λ°©μ§νκΈ° μν΄ μ¬μ©λλ€.
age 52 / 53μ κ°μ§ λ μ½λκ° μμ λ, μ μΏΌλ¦¬κ° μ€νλλ€λ©΄, μ€μ μ‘΄μ¬νλ λ μ½λ λΏλ§ μλλΌ, 51κ³Ό 55 μ¬μ΄μ 곡κ°μ λν΄ κ° λ½μ΄ κ±Έλ¦¬κ² λλ€.
...
...
...
50
59
X
κ° λ½(51 ~ 52 μ¬μ΄μ 곡κ°)
52
61
λ μ½λ λ½
53
62
λ μ½λ λ½
κ° λ½(53 ~ 55 μ¬μ΄μ 곡κ°)
56
65
X
** κ° λ½μ λ³΄ν΅ λ₯μ€νΈ ν€ λ½μ μΌλΆλ‘ μ¬μ©λλ©°, κ·Έ μ체 νλλ§μΌλ‘ μ μ¬μ©λμ§ μλλ€.
λ₯μ€νΈ ν€ λ½(Next-Key Lock)
λ μ½λμ κ·Έ λ€μ λ μ½λ μ¬μ΄μ κ°μ λν΄ μ κΈμ κ±Έμ΄μ£Όλ λ½μΌλ‘, κ° λ½κ³Ό λ μ½λ λ½μ ν©μΉ ννλ€.
...
...
50
59
52
61
52
62
56
65
...
...
μ ν
μ΄λΈ μν©μμ age
컬λΌμ λν΄ 52
κ°μ κ°μ§ λ μ½λλ₯Ό μ½μ
μ μλνκ² λλ©΄ μλ λ κ°μ§μ λ½μ΄ κ±Έλ¦¬κ² λλ€.
λ μ½λ λ½:
52
κ°μ κ°μ§ λ μ½λκ° λ½:
50
~52
μ¬μ΄μ κ³΅κ° +52
~56
μ¬μ΄μ 곡κ°
μλ μ¦κ° λ½(Auto-Increment Lock)
μλμΌλ‘ μ¦κ°νλ 컬λΌ(AUTO_INCREMENT
)μ λν΄ μ κΈμ κ±Έμ΄μ£Όλ λ½μΌλ‘ λ€μκ³Ό κ°μ νΉμ§μ΄ μλ€.
λ΄λΆμ μΌλ‘ ν μ΄λΈ μμ€μ μ κΈμ κ±Έμ΄ μ€λ³΅λμ§ μλ κ°μ 보μ₯
λͺ μμ μΌλ‘ νλνκ±°λ ν΄μ ν μ μμ
MySQL 8.0μμλ μ κΈμ κ±Έμ§ μλ λ°©λ²μ κΈ°λ³Έ κ°μΌλ‘ μ¬μ© μ€μ΄λ©°
innodb_autoinc_lock_mode
μμ€ν λ³μλ₯Ό μ΄μ©νμ¬ λ³κ²½ κ°λ₯
λ μ½λ μμ€μ μ κΈ νμΈ λ° ν΄μ
ν μ΄λΈ μ κΈμ μ κΈμ λμμ΄ ν μ΄λΈ μ체μ΄λ―λ‘ μ½κ² λ¬Έμ νμ μ΄ λμ§λ§, λ μ½λ μμ€μ μ κΈμ κ±Έλ €μλμ§ νμΈνκΈ°κ° μ΄λ ΅λ€.
BEGIN;
UPDATE employees SET birth_date=NOW() WHERE emp_no=10001;
UPDATE employees SET hire_date=NOW() WHERE emp_no=10001;
UPDATE employees SET hire_date=NOW(), birth_date=NOW() WHERE emp_no=10001;
μ μλ리μ€λ 컀λ₯μ
1μ΄ μμ§ COMMIT
μ μ€ννμ§ μμ μνμ΄λ―λ‘ ν΄λΉ λ μ½λμ μ κΈμ κ·Έλλ‘ κ°μ§κ³ μμΌλ©°,
컀λ₯μ
2 / 컀λ₯μ
3μ ν΄λΉ λ μ½λμ μ κΈμ λκΈ°νκ³ μμμ νμΈν μ μλ€.
MySQL 8.0 κΈ°μ€ performance_schema
ν
μ΄λΈμ μ΄μ©νμ¬ μ κΈκ³Ό λκΈ° μμλ₯Ό νμΈν μ μλ€.
0x7f9b1c0003
3
UPDATE employees...
0x7f9b1c0002
2
UPDATE employees...
0x7f9b1c0003
3
UPDATE employees...
0x7f9b1c0001
1
NULL
0x7f9b1c0002
2
UPDATE employees...
0x7f9b1c0001
1
NULL
μ κ²°κ³Όλ₯Ό λ³΄κ³ κ° μ€λ λκ° μ΄λ€ 쿼리λ₯Ό μ€ννκ³ μ΄λ€ μ€λ λμ μ κΈμ λκΈ°νκ³ μλμ§ νμΈν μ μλ€.
2λ² μ€λ λ: 1λ² μ€λ λμ λ½ λκΈ°
3λ² μ€λ λ: 2λ² μ€λ λ + 1λ² μ€λ λμ λ½ λκΈ°
μ°Έκ³ μλ£
Last updated
Was this helpful?