數(shù)據(jù)庫(kù)連接池設(shè)置多大才合適?
閱讀本文大概需要 4 分鐘。
來(lái)自:www.jianshu.com/p/a8f653fc0c54
https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
接下來(lái)是正文
1萬(wàn)并發(fā)用戶訪問(wèn)
“這個(gè)網(wǎng)站的數(shù)據(jù)庫(kù)連接池應(yīng)該設(shè)置成多小呢?”
http://www.dailymotion.com/video/x2s8uec
視頻中對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行壓力測(cè)試,9600并發(fā)線程進(jìn)行數(shù)據(jù)庫(kù)操作,每?jī)纱卧L問(wèn)數(shù)據(jù)庫(kù)的操作之間sleep 550ms,一開(kāi)始設(shè)置的中間件線程池大小為2048:







But why?
有限的資源

計(jì)算公式
核心數(shù)不應(yīng)包含超線程(hyper thread),即使打開(kāi)了hyperthreading也是。如果活躍數(shù)據(jù)全部被緩存了,那么有效磁盤(pán)數(shù)是0,隨著緩存命中率的下降,有效磁盤(pán)數(shù)逐漸趨近于實(shí)際的磁盤(pán)數(shù)。這一公式作用于SSD時(shí)的效果如何尚未有分析。
((4 * 2) + 1) = 9。取個(gè)整就算是是10吧。是不是覺(jué)得太小了?跑個(gè)性能測(cè)試試一下,我們保證它能輕松搞定3000用戶以6000TPS的速率并發(fā)執(zhí)行簡(jiǎn)單查詢的場(chǎng)景。如果連接池大小超過(guò)10,你會(huì)看到響應(yīng)時(shí)長(zhǎng)開(kāi)始增加,TPS開(kāi)始下降。筆者注:
這一公式其實(shí)不僅適用于數(shù)據(jù)庫(kù)連接池的計(jì)算,大部分涉及計(jì)算和I/O的程序,線程數(shù)的設(shè)置都可以參考這一公式。我之前在對(duì)一個(gè)使用Netty編寫(xiě)的消息收發(fā)服務(wù)進(jìn)行壓力測(cè)試時(shí),最終測(cè)出的最佳線程數(shù)就剛好是CPU核心數(shù)的一倍。
公理:你需要一個(gè)小連接池,和一個(gè)充滿了等待連接的線程的隊(duì)列
2*CPU核心數(shù))。請(qǐng)注意
推薦閱讀:
一款 IDEA 插件幫你優(yōu)雅轉(zhuǎn)化 DTO、VO、BO、PO、DO
SpringBoot 生產(chǎn)中 16 條最佳實(shí)踐
內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬(wàn)并發(fā)、消息隊(duì)列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!
?戳閱讀原文領(lǐng)取!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱?
評(píng)論
圖片
表情

