我想增加我的 MySQL 的Amazon Relational Database Service (Amazon RDS) 或 Amazon RDS for PostgreSQL 資料庫執行個體的最大連線量。
解決方法
**注意:**在增加最大連線數之前,最佳實務是最佳化現有組態。
檢查目前的 max_connections 值
max_connections 指標會針對 RDS for MySQL 和 RDS for PostgreSQL 設定資料庫最大連線數。max_connections 的預設值取決於 Amazon RDS 執行個體所使用的執行個體類別。具有更多可用記憶體的資料庫執行個體類別可具有更多數量的資料庫連線。
若要檢查 max_connections 值,請連線至資料庫引擎的 Amazon RDS 資料庫執行個體,然後執行下列命令。
**注意:您使用公式計算的 max_connections **的預設值可能與前面指令的輸出略有不同。這種差異是因為 Amazon RDS 會在總 DBInstanceClassMemory 中保留一些記憶體,用於基礎作業系統作業。上述命令僅使用為 PostgreSQL 引擎保留的記憶體,而不會用於基礎主機作業系統。
最佳化現有連線
在增加 max_connections 的值之前,請檢查是否可以減少現有連線的數量。當用戶端連線數量超過 max_connections 值時,您會收到下列其中一個錯誤:
當 Amazon RDS 的工作負載增加或有資料表或資料列層級鎖定時,可能會發生這些錯誤。如果執行個體上的工作負載如預期運作,則必須增加 max_connections 參數。
檢查您是否已在作業結束後關閉所有用戶端和應用程式連線
當伺服器連線未關閉時,用戶端應用程式會開啟新的連線。隨著時間過去,這些新的伺服器連線可能會導致執行個體超過 max_connections 值。
若要列出 RDS for MySQL 資料庫執行個體的所有連線,請執行下列命令:
SHOW FULL PROCESSLIST;
若要檢視 RDS for PostgreSQL 執行個體的每個資料庫的連線,請執行下列命令:
SELECT datname, numbackends FROM pg_stat_database;
(僅限 MySQL) 檢查休眠連線
當您為連線逾時參數設定較高的值,例如 wait_timeout 或 interactive_timeout 時,就會發生休眠或非作用中的開放連線。如果您設定較高的連線配額,即使您沒有使用這些連線,記憶體使用量也可能會很高。
若要檢視 RDS for MySQL 執行個體中的閒置連線,請執行下列查詢:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';
若要終止 RDS for MySQL 資料庫執行個體中的休眠連線,請執行下列命令:
CALL mysql.rds_kill(example-pid);
(僅限 PostgreSQL) 檢查閒置連線
若要檢視 RDS for PostgreSQL 執行個體中的閒置連線,請執行下列查詢:
SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid()
AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled')
AND state_change < current_timestamp - INTERVAL '15' MINUTE;
查詢的輸出顯示處於閒置、交易中閒置、交易中閒置 (中止) 或停用狀態超過 15 分鐘的後端處理程序。
若要終止 RDS for PostgreSQL 執行個體中的閒置連線,請執行下列命令:
SELECT pg_terminate_backend(example-pid);
**注意:**最佳實務是僅設定應用程式效能所需的作用中連線。如果您的應用程式結構需要閒置連線,則最佳實務是使用 Amazon RDS Proxy。
增加最大連接數
**注意:**當您向上擴展執行個體時,您會遇到停機時間並變更計費方式。
若要增加連線上限,最佳實務是將資料庫執行個體向上擴展至具有更多記憶體的資料庫執行個體類別。將 max_connections 參數增加到超過預設值並非最佳實務。當更多連線需要更高的記憶體使用量時,執行個體可能會遇到問題。記憶體不足的執行個體可能會當機。如果您增加 max_connections 值,則請監控 **FreeableMemory ** Amazon CloudWatch 指標來監控您的資源使用量。
不過,如果您的執行個體有很多可用記憶體,請手動變更 max_connections 參數。在調整 max_connections 之前,請先調整參數群組中的連線限制,以負責資料庫執行個體上可用記憶體的變更。
如果您的資料庫執行個體使用預設參數群組,則必須建立並使用自訂參數群組來修改 max_connections。關聯自訂資料庫參數群組與 Amazon RDS 執行個體,接下來重新啟動執行個體。新的自訂參數群組與資料庫執行個體關聯之後,您可以修改 max_connections 參數值。如需詳細資訊,請參閱如何修改 Amazon RDS 資料庫參數群組的值。將 max_connections 值設定為略高於您預期在每個資料庫執行個體上開啟的最大連線數。
**注意:**在重新啟動期間,您會遇到短暫中斷。
用來增加 max_connections 的 RDS for MySQL 最佳實務
如果您啟用了效能架構,則最佳實務是使用預設的 max_connections 設定。效能架構記憶體結構會根據伺服器組態變數自動調整大小。
**注意:**如果您啟用 Amazon RDS MySQL 資料庫執行個體的效能洞察,則會自動啟動效能架構。
針對您的使用案例,最佳化下列 MySQL 連線相關參數的逾時設定:
- wait_timeout
- interactive_timeout
- net_read_timeout
- net_write_timeout
- max_execution_time
- max_connect_errors
- max_user_connections
如需有關這些參數的詳細資訊,請參閱 MySQL 網站上的 7.1.8 伺服器系統變數。
用來增加 max_connections 的 RDS for PostgreSQL 最佳實務
針對您的使用案例,最佳化下列 PostgreSQL 連線相關參數的逾時設定:
- idle_in_transaction_session_timeout
- tcp_keepalives_idle
- tcp_keepalives_interval
- tcp_keepalives_count
如需有關這些參數的詳細資訊,請參閱 PostgreSQL 網站上的 idle_in_transaction_session_timeout (integer) 和 19.3.2 TCP 設定。