管理 Aurora 波斯特格SQLRDS連接流失 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

管理 Aurora 波斯特格SQLRDS連接流失

當用戶端應用程式經常連線和中斷連線,以致 Aurora Postgre SQL 資料庫叢集回應時間變慢時,就表示叢集發生連線流失。每個與 Aurora Postgre 資SQL料庫叢集端點的新連線都會消耗資源,因此減少了可用於處理實際工作負載的資源。我們建議您遵循以下討論的一些最佳實務來管理連線流失問題。

對於初學者來說,您可以改善具有高連線流失率的 Aurora Postgre SQL 資料庫叢集上的回應時間。若要這麼做,您可以使用連線池工具,例如 RDS Proxy。連線集區為用戶端提供立即可用連線的快取。幾乎所有版本的 Aurora Postgre SQL 支持RDS代理。如需詳細資訊,請參閱Amazon RDS 代理與 Aurora 郵政 SQL

如果您的特定版本的 Aurora Postgre SQL 不支援RDS代理伺服器,您可以使用另一個 Postgre SQL — 相容的連線池,例如. PgBouncer 要了解更多信息,請訪問PgBouncer網站。

若要查看您的 Aurora Postgre SQL 資料庫叢集是否可以受益於連線集區,您可以檢查postgresql.log檔案是否有連線和中斷連線。您也可以使用 Performance Insights,瞭解您的 Aurora Postgre SQL 資料庫叢集經歷了多少連線流失。在以下內容中您可以找到這兩個主題的相關資訊。

記錄連線與中斷連線

Postgre SQL log_connectionslog_disconnections參數可擷取與 Aurora Postgre SQL 資料庫叢集之寫入器執行個體的連線和中斷連線。 這些參數預設會被關閉。若要開啟這些參數,請使用自訂參數群組,並將值變更為 1 來開啟。如需自訂參數群組的詳細資訊,請參閱 Amazon Aurora 資料庫叢集的資料庫叢集參數群組。若要檢查設定,請使用 psql 和查詢方式連接至 Aurora Postgre 的資料庫叢集端點,如下SQL所示。

labdb=> SELECT setting FROM pg_settings WHERE name = 'log_connections'; setting --------- on (1 row) labdb=> SELECT setting FROM pg_settings WHERE name = 'log_disconnections'; setting --------- on (1 row)

當這兩個參數都開啟時,記錄會擷取所有的新連線和中斷連線。您會看到每個新授權連線的使用者和資料庫。在斷線時,也會記錄工作階段持續時間,如以下範例所示。

2022-03-07 21:44:53.978 UTC [16641] LOG: connection authorized: user=labtek database=labdb application_name=psql 2022-03-07 21:44:55.718 UTC [16641] LOG: disconnection: session time: 0:00:01.740 user=labtek database=labdb host=[local]

若要檢查您的應用程式是否有連線流失,請開啟這些參數 (如果尚未開啟)。然後在 Postgre SQL 日誌中收集數據以進行分析,方法是以實際的工作負載和時間段運行應用程序。您可以在RDS控制台中查看日誌文件。選擇 Aurora Postgre SQL 資料庫叢集的寫入器執行個體,然後選擇記錄檔和事件索引標籤。如需詳細資訊,請參閱檢視並列出資料庫日誌檔案

或者,您可以從控制台下載日誌檔並使用以下命令序列。此序列會尋找每分鐘授權和捨棄的連線總數。

grep "connection authorized\|disconnection: session time:" postgresql.log.2022-03-21-16|\ awk {'print $1,$2}' |\ sort |\ uniq -c |\ sort -n -k1

在範例輸出中,您可以看到授權連線中出現尖峰,然後從 16:12:10 開始連線中斷。

..... ,...... ......... 5 2022-03-21 16:11:55 connection authorized: 9 2022-03-21 16:11:55 disconnection: session 5 2022-03-21 16:11:56 connection authorized: 5 2022-03-21 16:11:57 connection authorized: 5 2022-03-21 16:11:57 disconnection: session 32 2022-03-21 16:12:10 connection authorized: 30 2022-03-21 16:12:10 disconnection: session 31 2022-03-21 16:12:11 connection authorized: 27 2022-03-21 16:12:11 disconnection: session 27 2022-03-21 16:12:12 connection authorized: 27 2022-03-21 16:12:12 disconnection: session 41 2022-03-21 16:12:13 connection authorized: 47 2022-03-21 16:12:13 disconnection: session 46 2022-03-21 16:12:14 connection authorized: 41 2022-03-21 16:12:14 disconnection: session 24 2022-03-21 16:12:15 connection authorized: 29 2022-03-21 16:12:15 disconnection: session 28 2022-03-21 16:12:16 connection authorized: 24 2022-03-21 16:12:16 disconnection: session 40 2022-03-21 16:12:17 connection authorized: 42 2022-03-21 16:12:17 disconnection: session 40 2022-03-21 16:12:18 connection authorized: 40 2022-03-21 16:12:18 disconnection: session ..... ,...... ......... 1 2022-03-21 16:14:10 connection authorized: 1 2022-03-21 16:14:10 disconnection: session 1 2022-03-21 16:15:00 connection authorized: 1 2022-03-21 16:16:00 connection authorized:

有了這些資訊,您就可以決定您的工作負載是否可以從連線集區工具中獲益。如需更詳細的分析,您可以使用 Performance Insights。

使用 Performance Insights 偵測連線流失

您可以使用 Performance Insights 來評估 Aurora Postgre SQL 相容版本資料庫叢集上的連線流失量。當您建立 Aurora Postgre SQL 資料庫叢集時,預設會開啟 Performance Insights 的設定。如果您在建立資料庫叢集時清除此選項,請修改叢集以開啟此功能。如需詳細資訊,請參閱修改 Amazon Aurora 資料庫叢集

透過 Aurora Postgre SQL 資料庫叢集上執行的效能洞見,您可以選擇要監視的指標。您可以在主控台中的導覽窗格存取效能洞見。您也可以從 Aurora Postgre SQL 資料庫叢集的寫入器執行個體的監視索引標籤存取效能洞見,如下圖所示。

從RDS主控台和選取的 Aurora Postgre SQL 資料庫叢集中存取 Performance Insights 的影像。

從「Performance Insights」主控台選擇 Manage metrics (管理指標)。若要分析 Aurora Postgre SQL 資料庫叢集的連線和中斷連線活動,請選擇下列指標。這些都是波斯特格雷SQL的所有度量標準。

  • xact_commit – 已遞交的交易數量。

  • total_auth_attempts – 每分鐘嘗試驗證的使用者連線數目。

  • numbackends – 目前連線至資料庫的後端數目。

從RDS主控台和選取的 Aurora Postgre SQL 資料庫叢集中存取 Performance Insights 的影像。

若要儲存設定並顯示連線動作,請選擇 Update graph (更新圖表)。

在下圖中,您可以看到有 100 個使用者時運行 pgbench 的影響。顯示連線位於一致向上斜坡的直線。要了解有關 pgbench 的更多信息以及如何使用它,請參閱 Post SQL gre 文檔中的 pgbench

顯示連線集區需要的 Performance Insights 影像。

此影像顯示,如果在沒有連線集區的情況下執行最多 100 個使用者的工作負載,可能會導致在整個工作負載處理期間 total_auth_attempts 的數量大幅增加。

使用 RDS Proxy 連線集區時,連線嘗試會在工作負載開始時增加。設定連線集區之後,平均值會下降。交易和後端使用所使用的資源在整個工作負載處理過程中保持一致。

Performance Insights 的影像顯示 RDS Proxy 對連線集區的優點。

如需將 Performance Insights 與 Aurora Postgre 資SQL料庫叢集搭配使用的詳細資訊,請參閱利用 極光上的 Performance Insights 來監控資料庫負載。若要分析指標,請參閱 使用績效詳情儀表板來分析指標

展示連線集區的好處

如前所述,如果您確定 Aurora Postgre SQL 資料庫叢集有連線流失問題,則可以使用RDS代理伺服器來改善效能。接下來,您可以找到一個範例,其中顯示連線置於集區以及不置於集區時處理工作負載的差異。此範例使用 pgbench 建立交易工作負載的模型。

與 psql 一樣,pgbench 是一個 Postgre SQL 客戶端應用程序,您可以在本地客戶端計算機上安裝和運行它。您也可以從用來管理 Aurora Postgre SQL 資料庫叢集的 Amazon EC2 執行個體安裝和執行它。如需詳細資訊,請參閱 Postgre 文SQL件中的 pgbench

若要逐步執行這個範例,您必須先在資料庫中建立 pgbench 環境。下面的命令是初始化指定資料庫中 pgbench 資料表的基本範本。此範例使用預設的主要使用者帳戶,postgres,用於登入。視需要為您的 Aurora 郵政SQL資料庫叢集進行變更。您在叢集的寫入器執行個體上的資料庫中建立 pgbench 環境。

注意

pgbench 初始化過程會刪除並重新建立名為 pgbench_accountspgbench_branchespgbench_historypgbench_tellers 的資料表。請確定當您初始化 pgbench 時,您選擇用於 dbname 的資料庫不會使用這些名稱。

pgbench -U postgres -h db-cluster-instance-1.111122223333.aws-region.rds.amazonaws.com -p 5432 -d -i -s 50 dbname

針對 pgbench,請指定下列參數:

-d

在 pgbench 執行時輸出偵錯報告。

-h

指定 Aurora Postgre SQL 資料庫叢集的寫入器執行個體的端點。

-i

初始化資料庫中的 pgbench 環境,以進行基準測試。

-p

識別用於資料庫連線的連接埠。Aurora 波斯特雷的預設值通常SQL是 5432 或 5433。

-s

指定用於將資料列填入資料表的擴展係數。預設擴展係數為 1,會在 pgbench_branches 資料表中產生 1 個資料列,在 pgbench_tellers 資料表中產生 10 個資料列,以及在 pgbench_accounts 資料表中產生 10 萬個資料列。

-U

指定 Aurora Postgre SQL 資料庫叢集的寫入器執行個體的使用者帳戶。

設定 pgbench 環境後,您可以使用或不使用連線集區來執行基準測試。預設測試包含在指定時間內重複執行的每個交易的五SELECT個UPDATE、和INSERT命令的一系列。您可以指定擴展係數、用戶端數量和其他詳細資料,以建立您自己的使用案例的模型。

舉例來說,接下來的命令會以 20 個並行連線 (-c 選項) 執行基準測試 60 秒 (時間為-T 選項)。-C 選項每次都會使用新連線執行測試,而不是每個用戶端工作階段執行一次。此設定可提供連線額外負荷的指示。

pgbench -h docs-lab-apg-133-test-instance-1.c3zr2auzukpa.us-west-1.rds.amazonaws.com -U postgres -p 5432 -T 60 -c 20 -C labdb Password:********** pgbench (14.3, server 13.3) starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 50 query mode: simple number of clients: 20 number of threads: 1 duration: 60 s number of transactions actually processed: 495 latency average = 2430.798 ms average connection time = 120.330 ms tps = 8.227750 (including reconnection times)

在 Aurora Postgre SQL 資料庫叢集的寫入器執行個體上執行 pgbench,而不重複使用連線,表示每秒只會處理大約 8 個交易。這在 1 分鐘的測試期間總共提供了 495 筆交易。

如果您重複使用連線,Aurora Postgre SQL 資料庫叢集對使用者數目的回應速度將快上 20 倍。透過重複使用,系統會處理 9,042 筆交易,而在相同的時間量和相同數量的使用者連線中則處理 495 筆交易。不同之處在於:在以下情況中,每個連線都被重複使用。

pgbench -h docs-lab-apg-133-test-instance-1.c3zr2auzukpa.us-west-1.rds.amazonaws.com -U postgres -p 5432 -T 60 -c 20 labdb Password:********* pgbench (14.3, server 13.3) starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 50 query mode: simple number of clients: 20 number of threads: 1 duration: 60 s number of transactions actually processed: 9042 latency average = 127.880 ms initial connection time = 2311.188 ms tps = 156.396765 (without initial connection time)

這個範例說明,將連線置於集區可以大幅改善回應時間。如需為您的 Aurora Postgre 資SQL料庫叢集設定RDS代理伺服器的相關資訊,請參閱使用 Amazon RDS Proxy for Aurora