Pgbouncer最佳實(shí)踐:系列三

作者:王志斌,曾獲得中國(guó)PostgreSQL數(shù)據(jù)庫(kù)管理工程師(PGCE)卢未,是PostgreSQL官方認(rèn)證講師烦绳,盤古云課堂特邀金牌講師。


PgBouncer具有三種可用的池模式:事務(wù)池爽篷,會(huì)話池和語(yǔ)句池:


事務(wù)連接池

數(shù)據(jù)庫(kù)客戶端很少在不間斷的情況下執(zhí)行連續(xù)的事務(wù)。而是通常在事務(wù)之間執(zhí)行非數(shù)據(jù)庫(kù)工作慢睡。這意味著服務(wù)器連接在等待新工作到達(dá)時(shí)會(huì)花費(fèi)大量時(shí)間空閑逐工。


事務(wù)池模式試圖減少服務(wù)器連接的空閑時(shí)間铡溪,如下所示:

池程序在開(kāi)始事務(wù)時(shí)將服務(wù)器連接分配給客戶端。

客戶端的事務(wù)完成后泪喊,池程序?qū)⑨尫胚B接分配棕硫。


注意事項(xiàng):

如果客戶端運(yùn)行多個(gè)事務(wù),則每個(gè)事務(wù)可以在不同的服務(wù)器連接上執(zhí)行袒啼。

單個(gè)服務(wù)器連接可以在其生命周期內(nèi)運(yùn)行由不同客戶端發(fā)出的事務(wù)哈扮。


圖 6 事務(wù)連接池


與服務(wù)器所允許的連接相比,允許活動(dòng)客戶端的數(shù)量要多得多蚓再。盡管取決于給定的工作負(fù)載滑肉,但經(jīng)常會(huì)看到10倍或更多的活動(dòng)客戶端連接與服務(wù)器連接比率。


這確實(shí)帶來(lái)了一個(gè)重要的警告:客戶端不再期望對(duì)數(shù)據(jù)庫(kù)會(huì)話狀態(tài)所做的更改在同一客戶端進(jìn)行的連續(xù)事務(wù)中繼續(xù)存在摘仅,因?yàn)檫@些事務(wù)可能在不同的服務(wù)器連接上運(yùn)行靶庙。此外,如果客戶端進(jìn)行會(huì)話狀態(tài)更改娃属,它們可能并且很可能會(huì)影響其他客戶端六荒。


以下是一些使用上面的事務(wù)池示例:

如果客戶端1在T1中的第一個(gè)服務(wù)器連接上將會(huì)話設(shè)置為只讀,而客戶端2的T3是寫(xiě)事務(wù)矾端,則T3將失敗掏击,因?yàn)樗诂F(xiàn)在的只讀服務(wù)器連接上運(yùn)行。

如果客戶端1運(yùn)行PREPARE a1 AS ...在T1上運(yùn)行EXECUTE a1 ...秩铆,在T2上砚亭,則T2將失敗,因?yàn)轭A(yù)編譯語(yǔ)句對(duì)于運(yùn)行T1的服務(wù)器連接是本地的殴玛。

如果客戶端2在T3中創(chuàng)建了一個(gè)臨時(shí)表并嘗試在T4中使用它钠惩,則T4將失敗,因?yàn)樵撆R時(shí)表對(duì)于運(yùn)行T3的服務(wù)器連接是本地的族阅。


有關(guān)使用事務(wù)池時(shí)不支持的會(huì)話狀態(tài)功能和操作的完整列表篓跛,請(qǐng)參見(jiàn)PgBouncer的列表


會(huì)話連接池

分配給客戶端的服務(wù)器連接在客戶端連接的整個(gè)生命周期內(nèi)持續(xù)。這看起來(lái)好像根本不使用連接池一樣坦刀,但是有一個(gè)重要的區(qū)別:當(dāng)分配的客戶端斷開(kāi)連接時(shí)愧沟,服務(wù)器連接不會(huì)被破壞。當(dāng)客戶端斷開(kāi)連接時(shí)鲤遥,池管理器將:

清除客戶端所做的任何會(huì)話狀態(tài)更改沐寺。

將服務(wù)器連接返回到池中,以供其他客戶端使用盖奈。


圖 7 會(huì)話連接池


語(yǔ)句連接池

在此混坞,服務(wù)器連接分配僅在單個(gè)語(yǔ)句的持續(xù)時(shí)間內(nèi)持續(xù)。這具有與事務(wù)池模式相同的會(huì)話狀態(tài)限制,同時(shí)還破壞了事務(wù)語(yǔ)義究孕。


圖 8 語(yǔ)句連接池


這使得所有客戶端連接的行為就像在“自動(dòng)提交”模式下一樣啥酱。如果客戶端嘗試開(kāi)始多語(yǔ)句事務(wù),則合并程序?qū)⒎祷劐e(cuò)誤厨诸。盡管這是


表 3 連接池模式對(duì)比


從上述對(duì)比情況來(lái)看镶殷,在連接池的選擇上,需要依據(jù)業(yè)務(wù)環(huán)境特點(diǎn)來(lái)進(jìn)行選擇微酬,默認(rèn)情況下推薦使用事務(wù)連接池绘趋,它兼顧了執(zhí)行事務(wù)的特性,尤其多語(yǔ)句的支持颗管,并且不會(huì)像會(huì)話連接池那樣陷遮,嘗嘗處于等待狀態(tài)。當(dāng)然事務(wù)模式并不支持預(yù)編譯語(yǔ)句垦江。而根據(jù)具體業(yè)務(wù)場(chǎng)景的特殊需要帽馋,有些時(shí)候需要客戶端與服務(wù)器端保持連接,或者支持預(yù)編譯語(yǔ)句疫粥,這樣只能選擇會(huì)話池模式茬斧。還有一些特例情況腰懂,某些業(yè)務(wù)場(chǎng)景只是單語(yǔ)句執(zhí)行梗逮,那么語(yǔ)句池模式可能更適合。因此對(duì)比這三種模式绣溜,可以發(fā)現(xiàn)從對(duì)客戶端操作的支持程度來(lái)講慷彤,會(huì)話池支持度最高,其次是事務(wù)池怖喻,最后是語(yǔ)句池模式底哗。但是從支持的連接數(shù)來(lái)講,可能剛好是相反的順序锚沸。


表 4 SQL特性對(duì)照表


上表為會(huì)話連接池和事務(wù)連接池的SQL特性對(duì)比情況跋选,可以通過(guò)對(duì)比具體業(yè)務(wù)場(chǎng)景與SQL特性的符合度,來(lái)對(duì)連接池模式進(jìn)行選型哗蜈。


下面列舉了一些示例場(chǎng)景:

有些只運(yùn)行快速查詢前标,因此在沒(méi)有事務(wù)的情況下可以共享一個(gè)會(huì)話來(lái)處理上百個(gè)并發(fā)查詢。

一些角色成員對(duì)于會(huì)話級(jí)并發(fā)是安全的距潘,并且總是使用事務(wù)炼列。因此,他們可以安全地共享數(shù)百個(gè)并發(fā)事務(wù)的多個(gè)會(huì)話音比。

有些角色過(guò)于復(fù)雜俭尖,無(wú)法與其他人共享會(huì)話。因此,您對(duì)它們使用會(huì)話池模式可以避免當(dāng)所有“插槽”都已占用時(shí)連接錯(cuò)誤稽犁。

不要使用它代替HAProxy或其他負(fù)載均衡器焰望。盡管pgbouncer具有一些可配置的功能來(lái)解決負(fù)載均衡器要解決的問(wèn)題,例如dns_max_ttl缭付,并且可以為其設(shè)置DNS配置柿估,但是大多數(shù)產(chǎn)品環(huán)境都使用HAProxy或其他用于HA的負(fù)載均衡器。這是因?yàn)镠AProxy確實(shí)擅長(zhǎng)以循環(huán)方式在服務(wù)器之間實(shí)現(xiàn)負(fù)載平衡陷猫,而不是pgbouncer秫舌。盡管pgbouncer對(duì)于postgres連接池更好,但最好使用一個(gè)小型守護(hù)程序來(lái)完美地執(zhí)行一項(xiàng)任務(wù)绣檬,而不是使用較大的守護(hù)程序來(lái)完成兩項(xiàng)任務(wù)足陨,那樣效果更糟。


在對(duì)于連接數(shù)的建議值來(lái)講娇未,上文也給出了一個(gè)大致的結(jié)果墨缘,就是一般情況下設(shè)置為CPU核數(shù)的3-4倍左右,當(dāng)然這個(gè)不是絕對(duì)值零抬,應(yīng)該是在與業(yè)務(wù)場(chǎng)景類似的硬件環(huán)境中充分進(jìn)行測(cè)試后镊讼,才能夠得出具體的數(shù)值。


還有一點(diǎn)需要注意的是連接Pgbouncer的連接方式平夜,網(wǎng)絡(luò)連接和unix socket連接方式蝶棋,較網(wǎng)絡(luò)連接,unix socket方式可能更加節(jié)省網(wǎng)絡(luò)通信的開(kāi)銷忽妒,因此如果pgbouncer和數(shù)據(jù)庫(kù)在一臺(tái)機(jī)器部署玩裙,可以優(yōu)選該方式;如果處于不同服務(wù)器上段直,則選擇網(wǎng)絡(luò)連接吃溅。


了解更多PostgreSQL熱點(diǎn)資訊、新聞動(dòng)態(tài)鸯檬、精彩活動(dòng)决侈,請(qǐng)?jiān)L問(wèn)中國(guó)PostgreSQL官方網(wǎng)站

解決更多PostgreSQL相關(guān)知識(shí)、技術(shù)喧务、工作問(wèn)題赖歌,請(qǐng)?jiān)L問(wèn)中國(guó)PostgreSQL官方問(wèn)答社區(qū)

下載更多PostgreSQL相關(guān)資料、工具蹂楣、插件問(wèn)題俏站,請(qǐng)?jiān)L問(wèn)中國(guó)PostgreSQL官方下載網(wǎng)站

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市痊土,隨后出現(xiàn)的幾起案子肄扎,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犯祠,死亡現(xiàn)場(chǎng)離奇詭異旭等,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)衡载,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門搔耕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痰娱,你說(shuō)我怎么就攤上這事弃榨。” “怎么了梨睁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鲸睛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坡贺,道長(zhǎng)官辈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任遍坟,我火速辦了婚禮拳亿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愿伴。我一直安慰自己肺魁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布公般。 她就那樣靜靜地躺著万搔,像睡著了一般胡桨。 火紅的嫁衣襯著肌膚如雪官帘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天昧谊,我揣著相機(jī)與錄音刽虹,去河邊找鬼。 笑死呢诬,一個(gè)胖子當(dāng)著我的面吹牛涌哲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尚镰,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼阀圾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了狗唉?” 一聲冷哼從身側(cè)響起初烘,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后肾筐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哆料,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吗铐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了东亦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唬渗,死狀恐怖典阵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镊逝,我是刑警寧澤萄喳,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蹋半,受9級(jí)特大地震影響他巨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜减江,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一染突、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辈灼,春花似錦份企、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至降宅,卻和暖如春骂远,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腰根。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工激才, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人额嘿。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓瘸恼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親册养。 傳聞我的和親對(duì)象是個(gè)殘疾皇子东帅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容