Connection pool, uygulama ile veritabanı arasında kullanıma hazır durumda bağlantıların bulunması durumudur. Uygulamanın bir sorgu çalıştırması gerektiğinde bu bağlantı havuzundan bir bağlantı alınır, kullanılır ve işlem bittiğinde daha sonra başka bir kullanıcının kullanımı için bağlantı havuzuna geri gönderilir.
Bir bağlantı açılır, havuza yerleştirilir ve daha sonra yeni bir bağlantı oluşturmaya gerek kalmadan kullanılır. Sistemin performansı artar. Veritabanına bağlantı kurulması için gereken zaman azalır.
Havuzdaki bütün bağlantılar kullanımdaysa, yeni bir bağlantı açılır ve havuza eklenir. Connection pooling veritabanı bağlantılarını açık tutmanın bir yoludur. Bu şekilde başka kullanıcılar tarafından tekrar kullanılabilirler.
Spring Boot 2 için default DataSource implementasyonu Hikari’dir. Pom.xml içine ayrıca bir dependency eklemeye gerek kalmadan spring-boot-starter-data-jpa ile default olarak eklenir.
spring.datasource.hikari.minimumIdle=10
“Uygulama çalıştığında 10 adet bağlantı oluşturulur ve havuzda tutulur”
spring.datasource.hikari.maximumPoolSize=20
“Connection Pool içinde en fazla 20 adet bağlantı bulunur”
spring.datasource.hikari.connectionTimeout=30000
Bir kullanıcının havuzdan dönecek bağlantı için bekleyebileceği maksimum milisecond cinsinden zaman. (30 saniye)
spring.datasource.hikari.maxLifetime=1800000 – bağlantının pasif olarak havuzda kalabileceği zaman.
Bir bağlantının havuzda bulunabileceği maksimum zaman. Boşta olan bağlantı havuzdan çıkarılır.
spring.datasource.hikari.idleTimeout=600000
“Bir bağlantı havuzda ne kadar kullanılmadan boşta durabilir”
spring.datasource.hikari.poolName=poolName
“Connection Pool adı”
maxLifetime – aktif olup olmadığına bakılmaksızın bu süre sonunda bağlantı sonlandırılır.
idleLifetime- Bağlantı kullanılmadığında bu süre sonunda kapatılır.
Hikari 30 saniyede bir çalışır. Eğer havuzda minimumIdle değerinden fazla bağlantı varsa idleTimeout değerinden uzun süre boşta bekleyen bağlantılar kapatılır.
MaximumPoolSize değerine ulaşılmadığı sürece yeni bir bağlantı oluşturulur. Bu değere ulaşıldıysa bir başka bağlantının kullanıma hazır hale gelmesi için beklenir.
Minimum 10 maksimum 20 bağlantı var. idleTimeout 10, maxlifetime 30 dakika.
Uygulama çalıştığında 10 adet bağlantı oluşturulur ve havuzda tutulur. 12 adet request geldiğini düşünelim. Hazırdaki 10 bağlantı kullanılır ve 2 adet yeni bağlantı oluşturulur. 12 requeste cevap verildikten sonra bu bağlantılar kapatılmaz. Kullanıma uygun bir biçimde havuzda bekletilir. 23 adet yeni request geldiğini düşünelim. Hazır durumdaki 12 adet bağlantı kullanılır ve 8 adet yeni bağlantı oluşturulur. 3 request beklemeye alınır ve 20 bağlantı içinde tamamlanan ve kullanıma hazır duruma gelen bağlantılarla kullanılmak üzere sıraya alınır. Bağlantı sayısı 20’yi geçemez.
Açık durumda minimumIdle değerinden fazla bağlantı varsa. İçlerinde idleTimeout değeri kadar boşta bulunmuş olanlar kapatılır.
En iyi performans için öneri : fixed-pool-size (minimumIdle ve idleTimeOut değerlerini set etme)
Sorgu sürelerini azaltarak daha az sayıda bağlantı kullanarak daha çok sayıda request’e cevap verebileceğini unutma.