SELECT Lock
μΌλ°μ μΈ SELECT 쿼리 μ€ν μμλ μ κΈμ μ¬μ©νμ§ μκ³ λ°μ΄ν°λ₯Ό μ½μ§λ§(Non-locking Consistent Read), λ°μ΄ν° μ ν©μ± 보μ₯μ μν΄ λͺ
μμ μΌλ‘ μ κΈμ μ€μ ν΄μΌ νλ κ²½μ°κ° μλ€.
FOR SHARE 곡μ μ κΈ (S-Lock)
μ‘°νν λ μ½λμ 곡μ μ κΈ μ€μ
νμ©
λ°©μ§
λ°μ΄ν°κ° λ³κ²½λλ©΄ μ λλ μν©μμ μΌκ΄λ μ½κΈ°λ₯Ό 보μ₯νκΈ° μν΄ μ¬μ©
FOR UPDATE λ°°νμ μ κΈ (X-Lock)
μ‘°νν λ μ½λμ λ°°νμ μ κΈ μ€μ
λ°©μ§
λ°©μ§
μ‘°νν λ°μ΄ν°λ₯Ό κ³§λ°λ‘ μμ ν μλκ° μμμ λͺ μνκ³ , λ€λ₯Έ νΈλμμ μ μ κ·Όμ μμ ν μ°¨λ¨νκΈ° μν΄ μ¬μ©
InnoDB μ€ν λ¦¬μ§ μμ§μμλ μ κΈ μλ μ½κΈ°κ° μ§μλκΈ° λλ¬Έμ λ°°νμ μ κΈμ΄ μ€μ λμ΄μλλΌλ, λ¨μSELECT 쿼리λ μ μμ μΌλ‘ μ½κΈ°λ₯Ό μνν μ μλ€.
μ κΈ λμ μ μ΄
μ κΈ ν
μ΄λΈ μ ν
μ¬λ¬ ν
μ΄λΈμ μ‘°μΈν λ, FOR UPDATEλ κΈ°λ³Έμ μΌλ‘ μ‘°μΈμ ν¬ν¨λ λͺ¨λ ν
μ΄λΈμ λ μ½λμ μ κΈμ μ€μ νλ€.
SELECT *
FROM employees e
INNER JOIN dept_emp de ON de.emp_no = employees.emp_no
INNER JOIN departments d ON d.dept_no = de.dept_no
FOR
UPDATE;μ΄ μ€ νΉμ ν
μ΄λΈμ λ μ½λμλ§ μ κΈμ μ€μ νκ³ μΆλ€λ©΄ OF μ μ μ¬μ©ν μ μλ€.
SELECT *
FROM employees e
INNER JOIN dept_emp de ON de.emp_no = employees.emp_no
INNER JOIN departments d ON d.dept_no = de.dept_no
FOR
UPDATE OF e;μ κΈ λκΈ° μ μ΄
μ κΈμ΄ μ€μ λ λ μ½λλ₯Ό λ€λ₯Έ νΈλμμ μ΄ μ΄λ―Έ μ κΈνκ³ μλ κ²½μ°, κΈ°λ³Έμ μΌλ‘λ ν΄λΉ λ μ½λμ μ κΈμ΄ ν΄μ λ λκΉμ§ λκΈ°νκ² λμ§λ§, λκΈ° λμμ μ μ΄ν μ μλ μ΅μ μ΄ μλ€.
NOWAIT: μ κΈ΄ λ μ½λλ₯Ό λ§λ¬μ λ λκΈ°νμ§ μκ³ , μ¦μ μ€λ₯λ₯Ό λ°νSKIP LOCKED: μ κΈ΄ λ μ½λλ₯Ό λ§λ¬μ λ, ν΄λΉ λ μ½λλ₯Ό κ²°κ³Όμμ μ μΈνκ³ κ±΄λλ°μ΄ μ κΈ°μ§ μμ λ€μ λ μ½λλΆν° μ‘°νλ₯Ό κ³μ
SKIP LOCKED νμ©ν μμ
ν(Queue) ꡬν μμ
SKIP LOCKED νμ©ν μμ
ν(Queue) ꡬν μμNOWAITμ SKIP LOCKED κΈ°λ₯μ ν(Queue)μ λΉμ·ν κΈ°λ₯μ MySQL μλ²μμ ꡬνν λ μ μ©νκ² μ¬μ©ν μ μλ€.
νλμ μΏ ν°μ ν μ¬μ©μλ§ μ¬μ© κ°λ₯
μΏ ν°μ κ°μλ 1000κ° μ ν
μ μ°©μμΌλ‘ μμ²ν μ¬μ©μμκ² λ°κΈ
μ 쿼리λ₯Ό λμμ 1000λͺ μ μ¬μ©μκ° μμ²νκ² λλ©΄ λ€μκ³Ό κ°μ μν©μ΄ λ°μνλ€.
μ ν리μΌμ΄μ μλ²λ κ·Έ μμ²λ§νΌ νλ‘μΈμ€λ₯Ό μμ±ν΄ μμ νΈλμμ μ λμμ μ€ν
νμ§λ§ κ°μ₯ 첫 νΈλμμ λ§
FOR UPDATEμΏΌλ¦¬λ‘ μΈν΄ μ κΈμ κ±Έκ³ λλ¨Έμ§ 999κ°μ νΈλμμ μ ν΄λΉ λ μ½λκ° μ κ²¨μ Έ μκΈ° λλ¬Έμ λκΈ°λκΈ° μκ° λμ μ κΈμ νλνμ§ λͺ»ν΄μ μλ¬λ₯Ό λ°ν
μ¬κΈ°μ SKIP LOCKEDλ₯Ό μ¬μ©νλ©΄, ν νΈλμμ
μ΄ νΉμ μΏ ν°μ μ κ·ΈλλΌλ λ€λ₯Έ νΈλμμ
λ€μ ν΄λΉ λ μ½λλ₯Ό μ¦μ 건λλ°κ³ λ€μ μ κΈ°μ§ μμ μΏ ν°μ μ‘°ννμ¬ μ²λ¦¬ν μ μλ€.

μ°Έκ³ μλ£
Last updated
Was this helpful?