了解連線處理
Postgres 使用程序型連線模型。 建立連線涉及作業系統以及少量的記憶體配置。 每個 SQL 查詢都是使用目前的連線執行。
連線狀態
連線可能處於下列四種狀態之一:
- 使用中 - 目前正在執行查詢的有效連線。
- 閒置 - 未使用的開放連線。
- 閒置交易 - 未執行任何工作的等待中連線。 使用 pg_stat_activity 可了解連線的作用,以及處於此狀態的時長。
- 閒置交易 (已中止) - 之前處於閒置交易狀態,但現在中止的連線。
程序型連線模型會提高許多閒置連線的維護成本。
連線數目上限
PostgreSQL 使用名為 max_connections 的伺服器參數,隨時限制伺服器的並行連線數目上限。 在適用於 PostgreSQL 的 Azure 資料庫中,預設值會隨計算層而異。 允許的值介於 25 到 5000 之間。
PostgreSQL 的內部部署實作會保留一些進階使用者連線,以維護資料庫的完整性。 這個保留通常是 15% 的 max_connections 值。
適用於 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 功能。