跳至內容

為什麼在連線到我的 Amazon Aurora MySQL 資料庫執行個體時,會收到「Too many connections」錯誤?

2 分的閱讀內容
0

我想連線到我的 Amazon Aurora MySQL 相容版本 資料庫執行個體,但收到「Too many connections」錯誤。我想了解我的資料庫執行個體的最大連線數值,以及如何變更該數值。

簡短描述

當用戶端連線數超過資料庫執行個體中的 max_connections 參數值時,您會收到「Too many connections」錯誤訊息。

若要解決此問題,請先查看資料庫執行個體上執行的所有查詢和執行緒。然後,啟用資料庫執行個體上的記錄。檢視現有的連線,結束不必要的連線,以減少連線壓力。另外,調整您的 MySQL 連線參數。如果您仍然遇到該問題,請增加資料庫執行個體的最大連線數。

解決方法

查看資料庫執行個體上執行的所有查詢和執行緒

查看資料庫執行個體上執行的所有查詢。然後,檢查 Threads_Connected 值,以查看已開啟的連線數。如需詳細資訊,請參閱 MySQL 網站上的 Threads_connected

若為 MySQL 5.7,請執行以下命令:

mysql> SELECT variable_value AS Threads_Connected FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name='threads_connected';

若為 MySQL 8.0,請執行以下命令:

mysql> SELECT variable_value AS Threads_Connected from performance_schema.global_status where VARIABLE_NAME = 'threads_connected';

**注意:**由於 Aurora 可以從 rdsadmin 管理使用者連線到資料庫,因此 threads_connected 的值可能會高於 max_connections

最佳實務是使用 threads_connectedinformation_schema.processlist 來取代 DatabaseConnectionsthreads_connectedinformation_schema.processlist 參數會顯示其他用戶端所使用的可用 MySQL 連線。

DatabaseConnections 顯示的遠端 TCP 連線總數,不包括資料庫引擎為自身目的而建立的休眠連線或工作階段。因此,DatabaseConnections 值可能低於 MySQL 執行緒執行的作業數。

啟用資料庫執行個體上的記錄

啟用 Aurora MySQL 相容資料庫執行個體上的記錄,以確定連線數量增加的根本原因。您可以啟用 general_log、slow_query_log進階稽核日誌參數

結束資料庫執行個體上不必要的連線

使用 rds_kill 和 rds_kill_query 命令,終止在資料庫執行個體上所執行不必要的使用者工作階段與查詢。

調整 MySQL 連線參數

根據您的偏好值,調整以下 MySQL 連線參數以適用於您的資料庫執行個體:

  • wait_timeout
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout
  • max_execution_time
  • max_connect_errors
  • max_user_connections

如需上述各參數的詳細資訊,請參閱 MySQL 網站上的伺服器系統變數

增加資料庫執行個體的最大連線數

如果調整連線參數後仍然遇到問題,請增加資料庫執行個體的最大連線數。若要取得資料庫執行個體的目前 max_connections 值,請檢查附加到資料庫執行個體的參數群組。或者,執行以下查詢:

select @@max_connections;

Aurora MySQL 相容版和 Amazon Relational Database Service (Amazon RDS) for MySQL 資料庫執行個體的記憶體額外負荷不同。對於使用相同執行個體類別的 Aurora MySQL 相容版與 Amazon RDS for MySQL 資料庫執行個體,max_connections 的值可能會有所不同。

若要確定執行個體類別的最大連線數,請使用下列公式:

最大連線數 = GREATEST ({log (17179869184/805306368) *45},{log (17179869184/8187281408) *1000})

**注意:**上述範例適用於具有 16 GiB 記憶體的 Aurora MySQL 相容版 db.r8g.large 執行個體。DBInstanceClassMemory 等於 17179869184 位元組。max_connections 的目前值為 1000。

範例結果:

最大連線數 = GREATEST (195.56,1000) = 1000

**注意:**對於具有 16 GiB 記憶體的 db.r8g.large 執行個體類別,其最大連線數等於預設值。

增加 max_connections 參數

**注意:**將 max_connections 值增加到超出預設值並非最佳實務。請擴展您的資料庫執行個體。

如果您不擴展資料庫執行個體,而是選擇增加 max_connections 的值,請完成下列步驟:

  1. 建立自訂資料庫執行個體參數群組
  2. 將參數群組與您的資料庫執行個體建立關聯
  3. 增加 max_connections 參數值
    **注意:**當您設定較大的 max_connections 值時,不會發生中斷。

向上擴展您的執行個體

如果您超出了 max_connections 參數的最大值,則最佳實務是擴展資料庫執行個體類別。您的資料庫執行個體在擴展時可能會發生中斷。

使用最佳實務調整 max_connections 參數

如果您變更了資料庫叢集的緩衝集區和查詢快取設定,請根據資料庫執行個體中可用記憶體的增加或減少,調整連線配額。

max_connections 參數設定為略高於您預期在每個資料庫執行個體上開啟的最大連線數。

如果您已啟用 Performance Insights,則 Performance Schema 會自動啟動。啟用 Performance Schema 時,最佳實務是使用預設的 max_connections 值。Performance Schema 記憶體結構會根據伺服器組態自動調整大小。

重要:Performance Insights 將於 2026 年 6 月 30 日終止服務。您可以在 2026 年 6 月 30 日之前升級至 Database Insights 的進階模式。如果不升級,則使用 Performance Insights 的資料庫叢集將預設為 Database Insights 的標準模式。只有 Database Insights 的進階模式才支援執行計畫和隨需分析。如果您的叢集預設為標準模式,那麼您可能無法在主控台上使用這些功能。若要開啟進階模式,請參閱 在 Amazon RDS 中開啟 Database Insights 進階模式在 Amazon Aurora 中開啟 Database Insights 進階模式

使用 Amazon RDS Proxy

如果您仍收到錯誤,請使用 Amazon RDS Proxy for Aurora 來提高應用程式的擴展能力。

相關資訊

如何解決 Amazon RDS for MySQL 或 Aurora MySQL 相容中的「讀取通訊封包時發生錯誤」的錯誤?

AWS 官方已更新 7 個月前