本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理 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_connections
和log_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 資料庫叢集的寫入器執行個體的監視索引標籤存取效能洞見,如下圖所示。
從「Performance Insights」主控台選擇 Manage metrics (管理指標)。若要分析 Aurora Postgre SQL 資料庫叢集的連線和中斷連線活動,請選擇下列指標。這些都是波斯特格雷SQL的所有度量標準。
xact_commit
– 已遞交的交易數量。total_auth_attempts
– 每分鐘嘗試驗證的使用者連線數目。numbackends
– 目前連線至資料庫的後端數目。
若要儲存設定並顯示連線動作,請選擇 Update graph (更新圖表)。
在下圖中,您可以看到有 100 個使用者時運行 pgbench 的影響。顯示連線位於一致向上斜坡的直線。要了解有關 pgbench 的更多信息以及如何使用它,請參閱 Post SQL gre 文檔中的 pgbench
此影像顯示,如果在沒有連線集區的情況下執行最多 100 個使用者的工作負載,可能會導致在整個工作負載處理期間 total_auth_attempts
的數量大幅增加。
使用 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_accounts
、pgbench_branches
、pgbench_history
和 pgbench_tellers
的資料表。請確定當您初始化 pgbench 時,您選擇用於
的資料庫不會使用這些名稱。dbname
pgbench -U postgres -h
db-cluster-instance-1.111122223333
.aws-region
.rds.amazonaws.com -p 5432 -d -i -s 50dbname
針對 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。