possibly-consider-using a shorter-maxLifetime-value
#trouble-shooting
[HikariCP] Possibly consider using a shorter maxLifetime value
์๋ฌ ๋ก๊ทธ
์ฌ์ฉ ๋ฒ์
MySQL 5.7, HikariCP 3.4.5
์๋ฌ ๋ฉ์ธ์ง ํด์
Failed to validate connection com.mysql.jdbc.JDBC4Connection
JDBC4Connection ๊ฐ์ฒด๋ฅผ validate ๊ฒ์ฆํ๋๋ฐ ์คํจํ์์.
No operations allowed after connection closed.
์ปค๋ฅ์ ์ด ์ข ๋ฃ๋ ํ์๋ ์ด๋ ํ ๊ธฐ๋ฅ ์ํ์ด ํ์ฉ๋์ง ์์.
DB์์ ์ปค๋ฅ์ ์ ์ด์ผ๊ธฐํ๋ ๋ฏ.
์ฆ Connection Pool์์ ์ด๋ค Connection ๊ฐ์ฒด๋ฅผ validate ์งํํ๋๋ฐ (Poolbase.isConnectionAlive),
Possibly consider using a shorter maxLifetime value.
maxLifeTime
๊ฐ์ ๊ฐ์์ํค๋ ๊ฑธ ๊ณ ๋ คํ๋ผ
์์ธ
Database์
wait_timeout
๊ฐ๊ณผ, HikariCP์์ ์ฐธ๊ณ ํ๋maxLifetime
์ค ํ์์ ๊ฐ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ
๋ถ์
Poolbase.isConnectionAlive
Connection์ด ์ด์์๋ ์ง ํ์ธํด๋ณด๋ ๋ฉ์๋
์ฌ๊ธฐ์ ์๋ฌ๋ฅผ ๋ฐ์ํจ.
์ด๋ ๋ถ๋ถ์์?
setNetworkTimeout(connection, validationTimeout);
ํน์Statement statement = connection.createStatement()
์ผ์๋..
์๋ง ํ์นด๋ฆฌ ํ์ ์๋ ์ปค๋ฅ์ ์ ํตํด ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ ค๊ณ (์๋ฅผ ๋ค๋ฉด ์ปค๋ฅ์ ์ ํ์์์์ค์ ..)์ ํ๋ ค ํ์ผ๋, ์ด์ ์ฐ๊ฒฐ๋ Database์ ์ปค๋ฅ์ ์ ์ด๋ฏธ ๋ซํ์,
SQLException
์ด ๋ฐ์ํ์๋ฏ.์ด ๋๋ฌธ์
warn
๋ก๊ทธ๊ฐ ์ต์ข ์ ์ผ๋ก ์ฐํ๊ฒ ๋๋ฏ.
ํด๊ฒฐ
Database ์
wait_timeout
๋ณด๋ค HikariCP์maxLifetime
๋ฅผ 5์ด ๋ ์งฆ๊ฒ ์ฃผ์์.์ 5์ด?
๊ถ์ฅ์ฌํญ...
HikariCP option
์๊ฐ ๋จ์๋
ms
autoCommit
auto-commit์ค์
default: true
connectionTimeout
pool์์ ์ปค๋ฅ์ ์ ์ป์ด์ค๊ธฐ์ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ
ํ์ฉ๊ฐ๋ฅํ wait time์ ์ด๊ณผํ๋ฉด SQLException์ ๋์ง.
์ค์ ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ ์๊ฐ์ 250ms
default: 30000 (30s)
idleTimeout
pool์ ์ผ์ ์ํ๋ ์ปค๋ฅ์ ์ ์ ์งํ๋ ์๊ฐ
์ด ์ต์ ์ minimumIdle์ด maximumPoolSize๋ณด๋ค ์๊ฒ ์ค์ ๋์ด ์์ ๋๋ง ์ค์ .
pool์์ ์ ์งํ๋ ์ต์ ์ปค๋ฅ์ ์๋ minimumIdle (A connection will never be retired as idle before this timeout.).
์ต์๊ฐ์ 10000ms
default: 600000 (10minutes)
maxLifetime
์ปค๋ฅ์ ํ์์ ์ด์์์ ์ ์๋ ์ปค๋ฅ์ ์ ์ต๋ ์๋ช ์๊ฐ.
์ฌ์ฉ์ค์ธ ์ปค๋ฅ์ ์ maxLifetime์ ์๊ด์์ด ์ ๊ฑฐ๋์ง์์.
์ฌ์ฉ์ค์ด์ง ์์ ๋, maxLifetime์ด ์ง๋๋ฉด ์ ๊ฑฐ๋จ.
ํ ์ ์ฒด๊ฐ์๋ ์ปค๋ฅ์ ๋ณ๋ก ์ ์ฉ ๊ทธ ์ด์ ๋ ํ์์ ๋๋์ผ๋ก ์ปค๋ฅ์ ๋ค์ด ์ ๊ฑฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์.
๊ฐ๋ ฅํ๊ฒ ์ค์ ํด์ผํ๋ ์ค์ ๊ฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธํ๋ผ์ ์ ์ฉ๋ connection time limit๋ณด๋ค ์์์ผํจ.
0์ผ๋ก ์ค์ ํ๋ฉด infinite lifetime์ด ์ ์ฉ๋จ.
idleTimeout์ค์ ๊ฐ์ ๋ฐ๋ผ ์ ์ฉ
idleTimeout๊ฐ์ด ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ 0์ผ๋ก ์ค์ ํด๋ ๋ฌดํ lifetime ์ ์ฉ ์๋จ).
default: 1800000 (30minutes)
connectionTestQuery
JDBC4 ๋๋ผ์ด๋ฒ๋ฅผ ์ง์ํ๋ค๋ฉด ์ด ์ต์ ์ ์ค์ ํ์ง ์๋ ๊ฒ์ ์ถ์ฒ
์ด ์ต์ ์ JDBC4๋ฅผ ์ง์์ํ๋ ๋๋ผ์ด๋ฒ๋ฅผ ์ํ ์ต์ ์(Connection.isValid() API.)
์ปค๋ฅ์ pool์์ ์ปค๋ฅ์ ์ ํ๋ํ๊ธฐ์ ์ ์ด์์๋ ์ปค๋ฅ์ ์ธ์ง ํ์ธํ๊ธฐ ์ํด valid ์ฟผ๋ฆฌ๋ฅผ ๋์ง๋๋ฐ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ (๋ณดํต SELECT 1 ๋ก ์ค์ )
JDBC4๋๋ผ์ด๋ฒ๋ฅผ ์ง์ํ์ง์๋ ํ๊ฒฝ์์ ์ด ๊ฐ์ ์ค์ ํ์ง ์๋๋ค๋ฉด error๋ ๋ฒจ ๋ก๊ทธ๋ฅผ ๋ฑ์ด๋.
default: none
minimumIdle
์๋ฌด๋ฐ ์ผ์ ํ์ง์์๋ ์ ์ด๋ ์ด ์ต์ ์ ์ค์ ๊ฐ size๋ก ์ปค๋ฅ์ ๋ค์ ์ ์งํด์ฃผ๋ ์ค์ .
์ต์ ์ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ ์๊ตฌํ๋ค๋ฉด ์ด ๊ฐ์ ์ค์ ํ์ง ์๋๊ฒ ์ข์.
default: same as maximumPoolSize
maximumPoolSize
pool์ ์ ์ง์ํฌ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ์.
pool์ ์ปค๋ฅ์ ์๊ฐ ์ต์ ๊ฐ์ ๋๋ฌํ๊ฒ ๋๋ฉด idle์ธ ์ํ๋ ์กด์ฌํ์ง ์์.
default: 10
poolName
์ฌ์ฉ์๊ฐ pool์ ์ด๋ฆ์ ์ง์ ํจ.
๋ก๊น ์ด๋ JMX management console์ ํ์๋๋ ์ด๋ฆ.
default: auto-generated
initializationFailTimeout
pool์์ ์ปค๋ฅ์ ์ ์ด๊ธฐํํ ๋ ์ฑ๊ณต์ ์ผ๋ก ์ํํ ์ ์์ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ์คํจํ๋๋ก ํด์ค
readOnly
pool์์ ์ปค๋ฅ์ ์ ํ๋ํ ๋ read-only ๋ชจ๋๋ก ๊ฐ์ ธ์ด.
๋จ, ๋ช๋ช์ database๋ read-only๋ชจ๋๋ฅผ ์ง์ํ์ง ์์.
์ปค๋ฅ์ ์ด read-only๋ก ์ค์ ๋์ด์์ผ๋ฉด ๋ช๋ช์ ์ฟผ๋ฆฌ๋ค์ด ์ต์ ํ ๋จ.
default: false
driverClassName
jdbcUrl์ ์ฐธ์กฐํ์ฌ ์๋์ผ๋ก driver๋ฅผ ์ค์ ํ๋ ค๊ณ ์๋.
ํ์ง๋ง ๋ช๋ช์ ์ค๋๋ driver๋ค์ driverClassName์ ๋ช ์ํ ํด์ผํจ.
์ด๋ค ์๋ฌ ๋ฉ์์ง๊ฐ ๋ช ๋ฐฑํ๊ฒ ํ์ ๋์ง์๋๋ค๋ฉด ์๋ตํด๋๋จ.
validationTimeout
valid ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ปค๋ฅ์ ์ด ์ ํจํ์ง ๊ฒ์ฌํ ๋ ์ฌ์ฉ๋๋ timeout.
250ms๊ฐ ์ค์ ๋ ์ ์๋ ์ต์๊ฐ
default: 5000ms
leakDetectionThreshold
์ปค๋ฅ์ ์ด ๋์ ๋ก๊ทธ๋ฉ์์ง๊ฐ ๋์ค๊ธฐ ์ ์ ์ปค๋ฅ์ ์ ๊ฒ์ฌํ์ฌ pool์์ ์ปค๋ฅ์ ์ ๋ด๋ณด๋ผ ์ ์๋ ์๊ฐ.
0์ผ๋ก ์ค์ ํ๋ฉด leak detection์ ์ด์ฉํ์ง์์.
์ต์๊ฐ 2000ms
default: 0
์ฐธ๊ณ
Last updated
Was this helpful?