Mariadb

限制和排隊數據庫連接

  • April 28, 2022

在 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_timeoutinteractive_timeout來確保空閒連接終止。

max_session_mem_used限制每個連接的記憶體使用量。

在伺服器能力範圍內擁有總的max_connections也是一個不錯的舉措。

沒有單獨的隊列選項,但是希望使用這些*_timeout選項可以減少意外達到限制的可能性。

max_connections設置一個限制。 back_log,理論上,提供了一個待處理的連接隊列。

但是,實際上,您應該改變您的客戶要求不那麼高。如果你讓數百個連接進入,MariaDB 就會開始絆倒自己。你曾經和一百個其他顧客一起在一家小便利店裡嗎?

如果它只是一個有問題的客戶,請參閱max_user_connections

80% 的 RAM 是正常的。80%的CPU可能不好。找到最慢的查詢並努力加快(或消除)它們。

引用自:https://dba.stackexchange.com/questions/311424