Mariadb
限制和排隊數據庫連接
在 mariaDB 中,是否有可能做這樣的事情?
- 限制連接數(如在mysql中,如this SO answer中所述)
- 為所有其他連接嘗試設置隊列,並避免觸發
User ** already has more than 'max_user_connections' active connections
如果這樣的事情是可能的,那麼以這種方式進行設置是否可取?
真實的情況是,某事導致我們的一台伺服器阻塞,mariaDB 佔用了多達 80% 的 CPU 和大約相同百分比的 RAM。
SHOW FULL PROCESSLIST
從一個使用者(+50)返回一個荒謬的連接數量,而其他使用者有 3-5 個同時連接。如果違規使用者被暫時阻止,一切都會恢復正常。
除了從 MySQL 繼承的舊資源限制外, MariaDB 授權限制可以包括
MAX_STATEMENT_TIME
(以秒為單位),用於每個查詢。還有wait_timeout和interactive_timeout來確保空閒連接終止。
max_session_mem_used限制每個連接的記憶體使用量。
在伺服器能力範圍內擁有總的max_connections也是一個不錯的舉措。
沒有單獨的隊列選項,但是希望使用這些
*_timeout
選項可以減少意外達到限制的可能性。
max_connections
設置一個限制。back_log
,理論上,提供了一個待處理的連接隊列。但是,實際上,您應該改變您的客戶要求不那麼高。如果你讓數百個連接進入,MariaDB 就會開始絆倒自己。你曾經和一百個其他顧客一起在一家小便利店裡嗎?
如果它只是一個有問題的客戶,請參閱
max_user_connections
。80% 的 RAM 是正常的。80%的CPU可能不好。找到最慢的查詢並努力加快(或消除)它們。