如果您的業務場景中,短連接較多或需要頻繁創建和銷毀連接,建議您開啟RDS PostgreSQL的連接池功能,該功能可以幫助您有效降低頻繁創建和銷毀連接對實例性能的影響,控制數據庫服務器的負載和資源使用。
背景
PgBouncer是一個開源的數據庫連接池,專為PostgreSQL數據庫而設計。它充當應用程序和數據庫之間的中間層,負責管理數據庫連接并提供連接池功能。
PgBouncer的主要目標是優化數據庫連接的性能和資源利用率。當應用程序需要與PostgreSQL數據庫建立連接時,它可以通過連接池復用現有的數據庫連接,避免了頻繁地創建和銷毀連接產生的性能開銷。這種連接復用可以顯著減少數據庫服務器的負載,提高應用程序的響應速度和并發性能。
應用場景
適用于短連接較多,頻繁創建和銷毀連接的場景。
PgBouncer可以限制最大客戶端連接數和最大空閑時間等。有助于控制數據庫服務器的負載和資源使用情況,防止惡意或不合理的查詢連接過度占用系統資源。
前提條件
RDS PostgreSQL實例需滿足以下要求:
實例大版本為PostgreSQL 11或以上。
實例內核小版本為20230530或以上。
說明查看或升級內核小版本請參見升級內核小版本。
暫不支持Babelfish for RDS PostgreSQL實例開啟PgBouncer。
暫不支持RDS PostgreSQL Serverless實例開啟PgBouncer。
影響
開啟PgBouncer默認會分配新端口6432,不會與原端口5432沖突,原5432端口的直連連接不受影響。
開啟PgBouncer前或開啟PgBouncer后,如果開通SSL鏈路加密(服務端SSL加密或客戶端SSL加密),則PgBouncer也會同步開啟服務端SSL或客戶端SSL,但PgBouncer不支持訪問控制ACL (Access Control List)配置為verify-ca或verify-full的連接驗證,也不支持在證書到期前,配置客戶端證書吊銷文件。
注意事項
關閉PgBouncer后,將無法再使用PgBouncer端口連接實例,請在業務程序中將連接端口修改為實例原端口(默認為5432)。
PgBouncer雖然是一個強大的工具,但并不適用于所有情況。在某些特定的應用場景下,例如具有復雜事務、需要數據庫連接狀態跟蹤或需要使用特定PostgreSQL功能的應用程序,可能需要考慮直接連接到數據庫而不使用連接池。
費用
該功能免費。
操作步驟
開啟或關閉連接池
- 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側導航欄單擊數據庫連接。
單擊開啟PgBouncer或關閉PgBouncer。
在彈出的對話框中,單擊確定。
(可選)開啟PgBouncer后,即可在數據庫連接頁面查看PgBouncer端口,默認為6432。您可以單擊修改連接地址,在修改連接地址窗口中,選擇對應地址類型后,修改PgBouncer端口。
通過連接池連接RDS PostgreSQL實例
開啟PgBouncer后,如果需要通過連接池連接RDS PostgreSQL實例,則需要在連接RDS PostgreSQL實例時,將連接端口替換為PgBouncer端口(默認為6432)即可。如何連接RDS PostgreSQL實例,請參見連接PostgreSQL實例。
修改連接池參數
開啟PgBouncer后,支持通過參數設置功能,修改PgBouncer的相關參數,調整連接池配置(如控制最大客戶端連接數)。如何修改RDS PostgreSQL實例參數,請參見設置實例參數。
您也可以在系統參數模板中查看PostgreSQL_PgBouncer_默認參數模板(rpg-sys-pgsql-pgbouncer),了解更多PgBouncer相關參數信息。查看方法,請參見查看參數模板。
開啟PgBouncer后才能通過參數設置功能查看和修改PgBouncer參數,關閉PgBouncer后,參數設置中將不顯示PgBouncer參數。
如果您想要通過參數模板來批量修改參數,則必須先開啟PgBouncer,然后再將參數模板應用到RDS PostgreSQL實例。
連接池的最大空閑時間默認為10分鐘,暫不支持修改。
支持修改的參數及相關說明如下:
參數名 | 參數類型 | 默認值 | 描述 |
pgbouncer.pool_mode | string | transaction | 連接池模式,指定客戶端在什么情況下可以重用連接。
|
pgbouncer.default_pool_size | int | 20 | 連接池默認允許連接數。 |
pgbouncer.max_client_conn | int | 100 | 連接池允許的最大客戶端連接數。 |
pgbouncer.min_pool_size | int | 0 | 連接池允許的最小客戶端連接數。 |
pgbouncer.query_wait_timeout | int | 120 | 允許查詢等待執行的最長時間。單位:秒。 如果在此期間未將查詢分配給服務器,則客戶端將斷開連接。 如果配置為0,則表示禁用。此時客戶端將無限期排隊。 |
pgbouncer.ignore_startup_parameters | string | "extra_float_digits" | 啟動參數,您可以在此參數中指定PgBouncer啟動跟蹤參數,使用英文逗號(,)分隔。 重要 該參數默認值為extra_float_digits,建議您在修改時不要刪除此默認值,因為使用PostgreSQL JDBC連接實例時需要在此參數中包含extra_float_digits。 |
pgbouncer.stats_users | string | "" | 允許連接到PgBouncer虛擬庫上運行只讀查詢的數據庫用戶,使用英文逗號(,)分隔。 |
上述參數的更多解釋,請參見PgBouncer官方文檔。
查看連接池相關監控指標
RDS PostgreSQL支持通過增強監控功能,查看PgBouncer的相關監控指標。增強監控的更多信息,請參見查看增強監控。
為了更便捷地獲取PgBouncer的監控信息,開啟PgBouncer后,RDS PostgreSQL將自動在postgres庫下安裝pgbouncer_fdw和dblink插件,該插件暫不支持卸載。
只有開啟連接池功能后,才可以在增強監控中查看連接池的相關監控指標。
PgBouncer監控指標如下:
指標 | 含義 |
db.pgbouncer.client_connections.active | 客戶端活躍連接數。 |
db.pgbouncer.client_connections.waiting | 客戶端等待連接數。 |
db.pgbouncer.server_connections.active | 服務端活躍連接數。 |
db.pgbouncer.server_connections.idle | 服務端空閑連接數。 |
db.pgbouncer.total_pooled_connections | 連接池總連接數。 |
db.pgbouncer.num_pools | 連接池數量。 |
相關OpenAPI
您可以調用ModifyDBInstanceConfig接口為RDS PostgreSQL實例開啟或關閉PgBouncer功能。需要配置的參數如下:
參數 | 說明 | 示例值 |
DBInstanceId | 待開啟或關閉PgBouncer功能的RDS PostgreSQL實例ID。 | pgm-**** |
ConfigName | 配置項名稱。 | pgbouncer |
ConfigValue | 配置項取值。
| true |