Springboot :: HikariCP ๋?
์ปค๋ฅ์ ํ(Connection Pooling)์ ์ ๊ณตํ๋ JDBC Datasource์ ๊ตฌํ์ฒด. ์ฌ์ ์ง์JDBC(Java Database Connectivity)์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฐ API.JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ฃ๋ฅผ ์ฟผ๋ฆฌ
bornatnoon.tistory.com
์ฐ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์์ HikariCP ๊ฐ ๋ญ์ง ๊ฐ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด.
์์ ๊ธ์ ์ฐธ์กฐํ๋๋ก ํ์.
HikariCP ์ต์
GitHub - brettwooldridge/HikariCP: ๅ HikariCPใปA solid, high-performance, JDBC connection pool at last.
ๅ HikariCPใปA solid, high-performance, JDBC connection pool at last. - brettwooldridge/HikariCP
github.com
ํด๋น ๋ฌธ์์ Frequently used ๋ฅผ ๋ฒ์ญํ์๋ค. ๊ณต์ ๋ฌธ์์ด๋ ์ฐธ๊ณ .
Frequently used
โป ์๊ฐ ๋จ์๋ ms ๊ธฐ์ค.
Option | Discription. |
autoCommit | auto-commit ์ค์ - default: true |
connectionTimeout | pool์์ connection์ ๋ฐ์์ค๊ธฐ ์ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ. ํ์ฉ ๊ฐ๋ฅํ ๋๊ธฐ ์๊ฐ์ ์ด๊ณผํ๋ฉด SQL Exception์ ๋ณด๋ธ๋ค. - ์ค์ ๊ฐ๋ฅํ ์ต์ ์๊ฐ: 250ms - default: 30000 (30s) |
idleTimeout | pool์ ์ผ์ ์ํ๋ ์ปค๋ฅ์
์ ์ ์งํ๋ ์๊ฐ. ์ด ์ต์ ์ minimumIdle์ด mazimumPoolSize ๋ณด๋ค ์๊ฒ ์ค์ ๋์ด ์์ ๋๋ง ์ค์ . pool์์ ์ ์งํ๋ ์ต์ ์ปค๋ฅ์ ์ ์๋ minimumIdle. - ์ต์ ๊ฐ: 10000ms - default: 600000ms (10min) |
maxLifetime | ์ปค๋ฅ์
ํ์์ ์ด์ ์์ ์ ์๋ ์ปค๋ฅ์
์ ์ต๋ ์๋ช
์๊ฐ. ์ฌ์ฉ์ค์ธ ์ปค๋ฅ์ ์ maxLifetime์ ์๊ด ์์ด ์ ๊ฑฐ๋์ง ์๊ณ , ์ฌ์ฉ ์ค์ด์ง ์์ ๋๋ง ์ ๊ฑฐ. 0์ผ๋ก ์ค์ ํ๋ฉด infinite lifetime์ด ์ ์ฉ.(idleTimeout ์ค์ ๊ฐ์ ๋ฐ๋ผ ์ ์ฉ idleTimeout ๊ฐ์ด ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ 0์ผ๋ก ์ค์ ํด๋ ๋ฌดํ lifetime ์ ์ฉ ์๋จ.) pool ์ ์ฒด๊ฐ ์๋๋ผ connection ๋จ์๋ก ์ ์ฉ์ด ๋จ. → pool์์ ๋๋์ผ๋ก connection์ด ์ ๊ฑฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ. * ๋ฌด์กฐ๊ฑด ์ค์ ํด์ผ ํ๋ ๊ฐ์ผ๋ก, DB๋ ์ธํ๋ผ์ ์ ์ฉ๋ connection time limit ๋ณด๋ค ์์์ผ ํจ. - default: 1800000 (30min) |
connectionTestQuery | *JDBC4 ๋๋ผ์ด๋ฒ๋ฅผ ์ง์ํ๋ค๋ฉด ์ด ์ต์
์ ๋ฏธ์ค์ ์ถ์ฒ connection pool ์์ connection์ ํ๋ํ๊ธฐ ์ ์ ์ ํจํ ์ปค๋ฅ์ ์ธ์ง ํ์ธํ๊ธฐ ์ํ์ฌ vaild ์ฟผ๋ฆฌ๋ฅผ ๋์ง๋ ๋ฐ์ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ. JDBC4 ๋๋ผ์ด๋ฒ๋ฅผ ์ง์ํ์ง ์๋ ํ๊ฒฝ์์ ์ด ๊ฐ์ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ error ๋ ๋ฒ ๋ก๊ทธ๋ฅผ ๋ฑ๋. |
minimumIdle | ์๋ฌด๋ฐ ์ผ์ ํ์ง ์์๋ ์ ์ด๋ ์ด ์ต์
์ ์ค์ ๊ฐ size๋ก ์ปค๋ฅ์
์ ์ ์งํ๋ ์ค์ . ์ต์ ์ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ ์๊ตฌํ๋ค๋ฉด ์ด ๊ฐ์ ์ค์ ํ์ง ์๋ ๊ฒ์ด ์ข์. - default: same as maximumPoolSize |
maximumPoolSize | pool์ ์ ์ง ์ํฌ ์ ์๋ ์ต๋ ์ปค๋ฅ์
์. pool์ ์ปค๋ฅ์ ์๊ฐ ์ต์ ๊ฐ์ ๋๋ฌํ๊ฒ ๋๋ฉด idle์ธ ์ํ๋ ์กด์ฌํ์ง ์๋๋ค. - default: 10 |
poolName | ๋ก๊น
์ด๋ JMX management console์ ํ์ ๋๋ pool์ ์ด๋ฆ. - default: auto-generated |
initializationFailTimeout | pool์์ connection์ ์ด๊ธฐํ ํ ๋ ์ฑ๊ณต์ ์ผ๋ก ์ํํ ์ ์์ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ์คํจํ๋๋ก ํด์ฃผ๋ ์ต์ . |
readOnly | pool์์ ์ปค๋ฅ์
์ ํ๋ํ ๋ real-Only ๋ชจ๋๋ก ๊ฐ์ ธ์จ๋ค. connection์ด read-Only๋ก ์ค์ ๋์ด ์์ผ๋ฉด ๋ช๋ช์ ์ฟผ๋ฆฌ๋ค์ด ์ต์ ํ ๋จ. (๋ช๋ช DB๋ read-only ๋ชจ๋๋ฅผ ์ง์ํ์ง ์์ผ๋ ์ฐธ๊ณ .) - default: false |
driverClassName | HikariCP๋ jdbcUrl์ ์ฐธ์กฐํ์ฌ ์๋์ผ๋ก driver๋ฅผ ์ค์ ํ๋ ค๊ณ ์๋ → ๋ช๋ช ์ค๋๋ driver๋ค์ driverClassName์ ๋ช
์ํ ํด์ผํจ. * ์ด๋ค ์๋ฌ ๋ฉ์์ง๊ฐ ๋ช ๋ฐฑํ๊ฒ ํ์ ๋์ง์๋๋ค๋ฉด ์๋ต ๊ฐ๋ฅ. |
validationTimeout | valid ์ฟผ๋ฆฌ๋ฅผ ํตํ์ฌ ์ปค๋ฅ์
์ด ์ ํจํ์ง ๊ฒ์ฌํ ๋ ์ฌ์ฉ๋๋ timeout. - ์ต์ ๊ฐ: 250ms - default: 5000ms |
leakDetectionThreshold | ์ปค๋ฅ์
์ด ๋์ log ๋ฉ์ธ์ง๊ฐ ๋์ค๊ธฐ ์ ์ connection์ ๊ฒ์ฌํ์ฌ pool์์ connection์ ๋ด๋ณด๋ผ ์ ์๋ ์๊ฐ. * 0์ผ๋ก ์ค์ ํ๋ฉด leak detection์ ์ด์ฉํ์ง ์๋๋ค. - ์ต์ ๊ฐ: 2000ms - default: 0 |
MySql ์ ๊ฒฝ์ฐ๋ ๊ณต์ ๋ฌธ์์ ์์ ์ฑ๋ฅ ํ์ด ๋ณ๋๋ก ์ค๋ช ๋์ด ์๋๋ฐ..
๋ค๋ฅธ DB์ ๊ฒฝ์ฐ์๋ ์๋ค..
ํ๊ตญ์ ํ์ฌ๋ค์ ๋๋ถ๋ถ mssql, oracle ์ ๋ง์ด ์ฌ์ฉํ ํ ๋ฐ ๋ง์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ค ์ต์ ๋ค์ ์ฒดํฌํด๋ด์ผ ํ ๊น?
์ฑ๋ฅ ์ต์ ํ
1. ์ต๋ ์ปค๋ฅ์ ๊ฐ์ - mazimumPoolSize
connection pool์ด ์ ๊ณตํ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ์ ๊ฐ์.
(์ฌ์ฉ ์ค์ธ Connection๊ณผ ์ ํด ์ปค๋ฅ์ ์ ํฉ์น ๊ฐ์ ์๋ฏธํจ)
์ค์ ์ ์์. ๋ชฉํ TPS ๊ฐ์ด ํ์.
์ต๋ TPS = 1๊ฐ์ connection์ ์ด๋น ์ฒ๋ฆฌ ์์ฒญ ๊ฐ์ * ๋์ connection ๊ฐ์
๋์ connection ๊ฐ์
= ์ต๋ TPS / 1๊ฐ ์ปค๋ฅ์ ์ ์ด๋น ์์ฒญ ์ฒ๋ฆฌ ๊ฐ์
= ์ต๋ TPS / (1์ด / ์ฟผ๋ฆฌ ์คํ ์๊ฐ)
์ต๋ ๊ฐ์ ๊ณ ๋ ค ์ฌํญ
slowQuery(ํ๊ท ์ด์์ผ๋ก ์คํ ์๊ฐ์ด ํ๋ ๊ฐ์๋ ๋น์จ ๊ฒํ .) ๋ฅผ ์ก์์ผํ๋ค.
2. ์ต๋ ์ปค๋ฅ์ ๋๊ธฐ ์๊ฐ - ConnectionTimeOut
ํ์์ ์ปค๋ฅ์ ์ ๊ตฌํ๊ธฐ ์ํด ๋๊ธฐํ๋ ์๊ฐ.
์ต๋ ์ปค๋ฅ์ ๋งํผ ์ฌ์ฉ ์ค์ connection์ ๊ฐ์ ธ์ค๋ ค๊ณ ํ ๋ ๋๊ธฐํ๋ ์๊ฐ.
๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ค์ ํด๋๋ฉด 30์ด๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ณธ ๊ฐ ๋์ ์ 0.5~3์ด ์ด๋ด๋ก ์ค์ ํ๊ณ , ์ฐจ๋ผ๋ฆฌ ์ค๋ฅ ํ๋ฉด์ด๋ผ๋ ์๋ต ์์ผ์ฃผ๋ ๊ฒ ๋ซ๋ค.
3. ์ปค๋ฅ์ ์ต๋ ์ ์ง ์๊ฐ - maxLifeTime
์ปค๋ฅ์ ์ ์์ฑํ ์ดํ์ ์ด ์๊ฐ์ด ์ง๋๋ฉด ์ปค๋ฅ์ ์ ๋ซ๊ณ , ํ์์ ์ ๊ฑฐํ ๋ค ์ปค๋ฅ์ ์ ์๋ก ์์ฑํจ.
๊ธฐ๋ณธ ๊ท์น: ๋คํธ์ํฌ๋ DB ๊ด๋ จ ์ค์ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ์ฌ์ฉํ๋ค.
- ๋คํธ์ํฌ ์ฅ๋น์ ์ต๋ TCP ์ปค๋ฅ์ ์ ์ง ์๊ฐ
๋ง์ฝ์ ์ด ๊ฐ์ด ๊ด๋ จ ์ค์ ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ด๋ฏธ ์ ํจํ์ง ์์ ์ปค๋ฅ์ ์ด pool์ ๋จ๊ฒ ๋๋ค.
์์ฒญ์ด ์ ํจํ์ง ์์ connection์ ๋ฐ์์ฌ ๊ฒฝ์ฐ ์ ํจ์ฑ ๊ฒ์ฆ ๊ณผ์ ์ค์ ์ปค๋ฅ์ ์ ์๋ก ์์ฑํ๊ฒ ๋๊ณ ,
ํธ๋ํฝ์ด ๋ฌผ๋ฆฌ๋ ์์ ์ธ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ์ ํ ๋๋ค.
4. ์ปค๋ฅ์ ํ์ธ ์ฃผ๊ธฐ - keepAliveTime
์ปค๋ฅ์ ์ด ์ด์์๋์ง๋ฅผ ํ์ธํ๋ ์ฃผ๊ธฐ
Idle ์ปค๋ฅ์ ์ ๋ํด ์ปค๋ฅ์ ํ์ธ, ์ ํจํ์ง ์๋ ์ปค๋ฅ์ ํ์์ ์ ๊ฑฐํ ๋ค ์ปค๋ฅ์ ์ ์๋ก ์์ฑ ...
๊ธฐ๋ณธ ๊ท์น: ๋คํธ์ํฌ๋ DB์ ๊ด๋ จ ์ค์ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ์ฌ์ฉํ๋ค.
- ๋คํธ์ํฌ ์ฅ๋น์ ์ต๋ TCP ์ปค๋ฅ์ ์ ์ง ์๊ฐ
5. ์ต์ ์ ํด ์ปค๋ฅ์ - minimumIdle
ํ์์ ์ ์งํ ์ต์ ์ ํด ์ปค๋ฅ์ ๊ฐ์
๊ธฐ๋ณธ ๊ฐ์ maximumPoolSize ์ ๋์ผํ๊ณ HikatiCP๋ ์ด ๊ฐ์ ๋ฐ๊พธ์ง ์๋ ๊ฒ์ ๊ถ์ฅ.
์ฉ๋๋ ํธ๋ํฝ์ด ์ ์ ์๊ฐ๋์ DB ์์ ์ฌ์ฉ์ ์ค์ด๊ธฐ ์ํจ์ด๋ค.
์ฑ๋ฅ ํ์ธ ํด์ jMeter ๋ฅผ ์ฌ์ฉํ์๋ค..
Apache JMeter - Apache JMeter™
Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to oth
jmeter.apache.org
๋๊ตฐ๊ฐ ๋ณผ ์ฝ๋๋ฅผ ์ํ์ฌ...
์์ ํ๋ฉด์ ์ฃผ์์ ์ผ๊ธ์ผ๊ธ ๋ฌ์๋๋๋ก ํ์.