Database yoğun işlemler de yavaşlık ve connection pool önemi

in #connectionpool3 years ago

Başlık sanırım açıklayıcı ama örnek üzerinden gidelim.

Biz Event Driven modeli ile microservice mimari çalışıyoruz.

Postgresql kullanıyoruz ve database tarafında kullandığımız viewlerden alınan veriler, belirli işlemlemlerden sonra birkaç tabloya data basacak şekilde süreçlerimiz var.

Anlık olarak çok fazla işlem yapmaya başladığımızda 1 sn olan iş bitim süresi 7-8 saniyelere çıktığını farkettik.

Peki sorun nerede ?

İlk aklımıza gelen şey; Veritabanında yaptığımız viewlerin join işlemlerinde problem olabileceğini düşünüp inceledik.
Ama viewlerin yapısında herhangi bir ters durum bulamadık.

Aslında sorun şu idi, ortada yavaş çalışan hiç birşey görünmemesi.
Çünki veritabanında ilgili view leri teker teker çalıştırdığımızda halen çok hızlı cevaplar alabiliyoruz.

Daha sonra connection pooling parametresini kontrol etmemiz gerekiyor du ve ikinci denemede sorunu bulmuştuk.
https://docs.sqlalchemy.org/en/14/core/pooling.html

Ayağa kalkan ve çalışmaya başlayan sunucu, ilk olarak database connection açıyor ve verdiğimiz pool parametresi yüzünden işler birikiyor. Biriktirme sebebimiz "pool_use_lifo" True olarak kullanmamızın gerekliliği.

İlk başlayan iş önce bitmeli ki diğer datasetleri buna göre işlem yapmaya devam edebilsin.

"pool_size" parametresini 4 katına çıkarıp sunucuyu yeniden çalıştırdık. Sorun çözülmüştü.
Anlık olarak biriken işlemler, verdiğimiz pool sayısının azlığı nedeniyle sırada bekliyordu. Kuyruk uzaması olarak düşünebilirsiniz :)

Siz kendi sisteminizin yapısına göre bu parametreyi dinamize edebilirsiniz.

Sonuç olarak; Yavaş çalışan herhangi bir sorgunuz ve süreciniz yok ise, kesinlikle connection pool parametresini göz önünde bulundurmalısınız.

kolay gelsin ( en sevdiğim )

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 64136.70
ETH 3128.20
USDT 1.00
SBD 3.94