了解連線處理
Postgres 使用以進程為基礎的連接模型。 建立連線牽涉到作業系統和少量記憶體的配置。 每個 SQL 查詢都是使用目前的連線來執行。
連線狀態
連線可能會處於以下四種狀態之一:
- 使用中 - 目前正在執行查詢的有效連線。
- 閑置 - 開啟但未使用的連線。
- 閒置交易 - 未執行任何工作的等待中連線。 使用 pg_stat_activity 瞭解連線的運作方式,以及連線處於此狀態的時間長度。
- 閒置交易 (已中止) - 之前處於閒置交易狀態,但現在中止的連線。
以進程為基礎的連線模型可讓維護許多閑置連線的成本很高。
聯機數目上限
PostgreSQL 會使用稱為 max_connections 的伺服器參數,一次限制伺服器的最大並行連線數目。 在適用於 PostgreSQL 的 Azure 資料庫中,預設值取決於您的計算層。 允許的值介於 25 到 5000 之間。
PostgreSQL 的內部部署實作會保留一些連線,供進階使用者維護資料庫的完整性。 此保留通常是 max_connections 值的 15%。
適用於PostgreSQL的 Azure 資料庫是受控解決方案,並會自動保留三個連線來監視彈性伺服器。
備註
適用於 PostgreSQL 的 Azure 資料庫中沒有可管理 superuser_reserved_connections 的伺服器參數。
連線共用
經常開啟和關閉連線的用戶端應用程式可能會遇到連線延遲,導致每秒的交易數較低,且整體應用程式延遲較高。
適用於 PostgreSQL 的 Azure 資料庫建議使用連線共用,而不是經常開啟和關閉連線。 線上共用會重複使用現有的連線,而不是關閉和重新建立連線。 此程式可減少連線延遲,並允許伺服器上資料庫的每秒資料庫交易數較高。
連接共用會在伺服器啟動時建立一組固定的連線,然後維護這些連線。 連線池化也有助於減少由於伺服器上不斷建立新連線而引起的記憶體碎片化。
PGBouncer 是內建於「適用於 PostgreSQL 的 Azure 資料庫」的連線共用解決方案。 若要啟用 pgBouncer:
- 在 Azure 入口網站中,流覽至適用於 PostgreSQL 的 Azure 資料庫伺服器。
- 從左側功能表中,選取 [伺服器參數]。
- 在搜尋列中,搜尋 PgBouncer。
- 將 pgbouncer.enabled 設定為 true 以啟用 PgBouncer。 此設定不需要重新啟動伺服器。
- 將 pgbouncer.default_pool_size 設定為每個使用者/資料庫配對所需的連線數目。 預設值為 50。
- 將 pgBouncer.pool_mode 參數設定為 TRANSACTION。
備註
PgBouncer 在公用存取和私有存取網路中,支援一般用途和記憶體優化計算層。 可高載計算層不支援 PgBouncer。 當計算層從一般用途或記憶體優化變更為突發型時,PGBouncer 功能會遺失。