溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PgBouncer原理該怎么理解

發(fā)布時(shí)間:2021-12-03 15:23:21 來源:億速云 閱讀:126 作者:柒染 欄目:大數(shù)據(jù)

PgBouncer原理該怎么理解,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

PGBOUNCER 有些問題是需要更深入的理解的,尤其針對(duì)于postgresql 來說為什么要推薦使用 連接池,而MYSQL 為什么沒有聽說過墻裂推薦使用連接池,以及具體怎么操作pgbouncer 都是這次要說的話題。

在使用PostgreSQL 時(shí)連接時(shí)通過postmaster 來接受外部對(duì)postgresql的連接。而這樣的方式會(huì)造成每個(gè)連接都會(huì)初始分配不小的內(nèi)存,而這樣的做法遇到大量的高頻率的連接,會(huì)占用大量的內(nèi)存,導(dǎo)致系統(tǒng)性能的問題,通用的解決方法當(dāng)然可以通過程序中所設(shè)置的緩沖池來解決,但這樣的結(jié)構(gòu),一般是由開發(fā)來控制和設(shè)置的,對(duì)于運(yùn)維和DBA來說屬于黑盒,和不可控的狀態(tài)。所以我們才會(huì)使用數(shù)據(jù)庫連接池,來進(jìn)行連接復(fù)用節(jié)省打開多余連接的系統(tǒng)資源的消耗。

PgBouncer原理該怎么理解

我們從上面的圖中來看pgbouncer 大致的工作原理

1  客戶連接到Pgbouncer 這里需要去驗(yàn)證你連接的數(shù)據(jù)庫的地址,用戶名,密碼等信息是否是對(duì)的,如果不對(duì)直接就會(huì)從PgBouncer 中踢出這個(gè)連接,首先在安全性上,就可以將一部分攻擊性的連接屏蔽到外面而與數(shù)據(jù)庫隔絕。

2  在通過PgBouncer 第一層后,下面就需要對(duì)連接池和數(shù)據(jù)庫之間已經(jīng)存在的連接進(jìn)行一個(gè)檢測(cè),首先要確認(rèn)的問題是,數(shù)據(jù)庫連接還有富余的嗎?如果沒有,會(huì)嘗試開新的連接,但大部分穩(wěn)定的時(shí)期中,是可以找到空余的連接。

3  在客戶端到Pgbouncer 在到數(shù)據(jù)庫之間的連接打通后,pgbouncer 會(huì)根據(jù)下面的幾種連接的方式來判斷這個(gè)已經(jīng)存活的連接在何時(shí)被收回到pgbouncer的資源池。

pgbouncer 提供了幾種連接的方式

  • Session pooling: pgbouncer中默認(rèn)的方式 session pooling,連接池中從應(yīng)用創(chuàng)建連接到SESSION 結(jié)束,pgbouncer 會(huì)保持你的這個(gè)連接在連接池中,在SESSION 結(jié)束后,會(huì)將這個(gè)連接復(fù)用給下一個(gè)應(yīng)用連接。

  • Transaction pooling: 這樣的方式與上邊session pooling的連接方式的區(qū)別在于,保持一個(gè)連接的基礎(chǔ)不是一個(gè)session 而是 transaction,事務(wù),一個(gè)事務(wù)結(jié)束后,pgbouncer 就會(huì)將這個(gè)連接復(fù)用給下一個(gè)事務(wù)


  • Statement pooling:第三種的方式是不常用的,判斷一個(gè)連接的釋放和使用的評(píng)判條件是一條SQL語句執(zhí)行完畢。

4  有一種情況是pgbouncer 的連接池已經(jīng)滿了,同時(shí)也不能在去開新的連接了,在這樣的情況下,就會(huì)產(chǎn)生一個(gè) wait login 的情況,連接進(jìn)入了等待的list

5  另外還有一種情況,就是連接已經(jīng)和pgbouncer 進(jìn)行了連接和交互,但目前pgbouncer 到 數(shù)據(jù)庫的連接不能去開新的連接,同時(shí)目前也沒有活動(dòng)的連接可以使用,則這時(shí)存在在pgbouncer的 連接也需要等待,等待空閑的連接使用。

OK 大致的原理是這樣的(如果有問題可以加微信,一起學(xué)習(xí))

下面就回到pgbouncer 的操作和配置上來

在安裝完pgbouncer 后,會(huì)產(chǎn)生一個(gè)虛擬的數(shù)據(jù)庫 pgbouncer ,通過這個(gè)數(shù)據(jù)庫可以連接連接池的情況。

舉例:我們?cè)谀康膸旖⒁粋€(gè)admin的數(shù)據(jù)庫,并且在配置文件中增加連接admin 數(shù)據(jù)庫的標(biāo)簽

并且在 userlist.txt 中添加 用于連接的用戶名和密碼

PgBouncer原理該怎么理解

在pgbouncer 庫中執(zhí)行 reload 的命令,加載新的配置

PgBouncer原理該怎么理解

連接pgbouncer 并查看日志

PgBouncer原理該怎么理解

輸入命令查看當(dāng)前的連接池狀態(tài)

PgBouncer原理該怎么理解

在pgbouner 的ini 文件中有一些比較重要的參數(shù)是可以調(diào)節(jié)的,例如

max_client_conn 調(diào)節(jié)最大的可以接受的連接數(shù)

default_pool_size 默認(rèn)的連接池的可以并發(fā)的連接

PgBouncer原理該怎么理解

以及緩沖池的hold connection 的方式

PgBouncer原理該怎么理解

同時(shí)也可以為每個(gè)數(shù)據(jù)庫或每個(gè)用戶設(shè)置最大的連接等信息

所以postgresql 如果在一個(gè)類似 MYSQL 的使用環(huán)境中,多連接,短連接,這樣的情況下,pgbouncer 將是postgresql 的一個(gè)保護(hù)層,避免頻繁的開啟連接造成的資源消耗。

看完上述內(nèi)容,你們掌握PgBouncer原理該怎么理解的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI