標籤:
RDS MySQL 串連數滿情況的處理
RDS MySQL 串連數滿有2種情況
1. 空閑串連過多
原因:
應用使用長串連模式 - 對於長串連模式(比如Java應用),應用側應該配置串連池。串連池的初始串連數設定過高,應用啟動後建立多個到RDS執行個體空閑串連。如果出現串連數滿(too many connections)不能串連的問題,請檢查串連池是否啟用了複用串連功能。
應用使用短串連模式 - 對於短串連模式(比如PHP應用),出現大量的空閑串連說明應用沒有在查詢執行完畢後顯式的關閉串連。使用者應該檢查應用是否在頁面查詢結束後調用串連關閉方法主動顯式關閉了到RDS執行個體的串連。
解決:
通過DMS或者Kill 命令來終止當前空閑會話,詳細步驟請參考: RDS MySQL 如何終止串連
修改應用,長串連模式需要啟用串連池的複用功能(建議也啟用串連檢測功能),具體設定請參考串連池配置文檔。
修改應用,短串連模式需要在代碼中查詢結束後調用關閉串連的方法。
對於非互動模式串連,控制台=》參數設定=》設定 wait_timeout 參數為較小值,wait_timeout 參數控制非互動模式串連的逾時時間(單位秒,預設值為 24小時 - 86400秒),當非互動式串連空閑時間超過wait_timeout指定的時間後,RDS執行個體會主動關閉(斷開)串連。
建議與說明:
在RDS MySQL 執行個體串連數完全打滿的情況下,通過DMS或者其他方式是無法串連執行個體的;因此對於長串連模式,建議串連池的最大串連數要略小於執行個體規格的串連數限制,比如保留10個串連給DMS或其他管理操作使用。當發生無法串連的情況時,建議先在控制台修改wait_timeout參數為較小值,促使RDS執行個體主動關閉空閑時間超過閥值的串連。
通常情況下,應用到RDS執行個體會採用非互動模式;具體採用哪個模式需要查看應用的串連方式配置,比如 PHP 通過傳遞 MYSQL_CLIENT_INTERACTIVE 常量給 mysql_connect()函數即可開啟串連的互動模式。
RDS MySQL 作為伺服器,被動的接收來自應用或用戶端的串連,處理應用或用戶端提交的查詢或命令並返回結果。RDS 執行個體自身是不會主動發起串連的。
註:在出現大量空閑串連之前,有可能會出現瞬間串連數過多的情況,由於RDS作為伺服器被動接收串連,通常情況下是應用SQL未最佳化導致的問題,因此需要從SQL最佳化入手來根本解決這個問題。
2. 活動串連過多
原因:
解決:
InnoDB鎖等待處理,請參考:RDS MySQL InnoDB 鎖等待和鎖等待逾時的處理
MyISAM表級鎖等待處理,請參考:RDS MySQL MyISAM 表級鎖等待的產生和處理
表中繼資料鎖等待,請參考:RDS MySQL 表上 Metadata lock 的產生和處理
CPU 使用率高導致活動串連數增加的處理,請參考:RDS MySQL CPU使用率高情況的原因和解決
IOPS使用率高導致活動串連數增加,請參考:RDS MySQL IOPS 使用率高的原因和處理
如問題還未解決,請聯絡售後支援人員。
RDS MySQL 串連數滿情況的處理