μ΄ λΈλμ HikariCPμ About Pool Sizingμ pool-locking λΆλΆμ λ²μμ λλ€.
pool-lockingμ νλμ μ‘ν°(μ°λ λλ μμ
μ)κ° λ§μ 컀λ₯μ
μ νλνλ κ²½μ°μ λ°μν μ μλ κ°λ₯μ±μΌλ‘ μ κΈ°λμ΄ μμ΅λλ€.
μ΄ λ¬Έμ λ λλΆλΆ μ ν리μΌμ΄μ
μμ€μμ λ°μνλ λ¬Έμ μ
λλ€.
λ¬Όλ‘ , μ΄λ¬ν μλ리μ€μμ ν ν¬κΈ°λ₯Ό λ리면 λ½μ
(lockup, μ 체 νμ)μ μνν μ μμ΅λλ€.
νμ§λ§ ν ν¬κΈ°λ₯Ό λ리기 μ μ λ¨Όμ μ ν리μΌμ΄μ
μμ€μμ κ°μ κ°λ₯ν λΆλΆμ΄ μλμ§ κ²ν νκΈΈ κΆμ₯ν©λλ€.
λ°λλ½μ΄ μ λ λ°μνμ§ μλλ‘ νκΈ° μν ν ν¬κΈ°λ₯Ό κ³μ°νλ 곡μμ λ€μκ³Ό κ°μ΄ κ°λ¨ν©λλ€.
pool size = Tn Γ (Cm - 1) + 1
Tn: μ΅λ μ€λ λ μ (Maximum number of threads)
Cm: λ¨μΌ μ€λ λκ° λμμ 보μ ν μ μλ μ΅λ 컀λ₯μ
μ (Max connections per thread)
βοΈ μ΄λ μ΅μ μ pool sizeκ° μλ, λ°λλ½ λ°©μ§λ₯Ό μν μ΅μ ν¬κΈ°μΌ λΏμ
λλ€.
βοΈ μΌλΆ νκ²½μμλ JTA(Java Transaction Manager)λ₯Ό μ¬μ©νλ©΄ getConnection()μμ νμ¬ νΈλμμ
μμ μ΄λ―Έ μ°κ²°μ 보μ νκ³ μλ μ°λ λλ‘ λμΌν 컀λ₯μ
μ μ¬μ¬μ©ν΄ νμν 컀λ₯μ
μλ₯Ό ν¬κ² μ€μΌ μ μμ΅λλ€.
ThreadLocal μΊμμμ νμνλ€.
2-1. μ°λ λλ³ μΊμμ μλ νλͺ©μ μμμΌλ‘ νμνλ©°, STATE_NOT_IN_USE μνμΈ νλͺ©μ STATE_IN_USEλ‘ λ°κΎΈκ³ λ°ννλ€.
2-2. μΊμμ μμΌλ©΄ 3λ²μΌλ‘ λμ΄κ°λ€.
sharedListμμ νμνλ€.
3-1. μμ°¨μ μΌλ‘ νμΈνλ©°, STATE_NOT_IN_USE μνμΈ νλͺ©μ STATE_IN_USEλ‘ λ°κΎΈκ³ λ°ννλ€.
handoffQueueμμ ν μ°λ λ λ°ν νλͺ© λκΈ°
4-1. μ ν΄ μ»€λ₯μ
μ΄ μ‘΄μ¬νλ©΄ STATE_NOT_IN_USE μνμΈ νλͺ©μ STATE_IN_USEλ‘ λ°κΎΈκ³ λ°ννλ€.timeout λ΄μ μ무 컀λ₯μ
λ λ°νλ°μ§ λͺ»νλ€λ©΄ nullμ λ°ννλ€.
STATE_NOT_IN_USEλ‘ λ³κ²½νλ€.handoffQueueμ μΆκ°νλ€. (μ΄ κ²½μ°, μμ Connection μμ²μ 4λ² κ³Όμ μμ λκΈ° μ€μΈ μ°λ λμκ² λ°ννκ² λ¨)ThreadLocal μΊμμ μ μ₯νλ€.