Mysql

MySQL:如何減少睡眠過程的超時?

  • February 8, 2022

當我執行“show processlist;”時,我得到了很多睡眠程序。

顯示程序列表;

我在 my.cnf 中將 wait_timeout 和 interactive_timeout 設置為 60。但是,當程序列表上的時間 60 時,睡眠程序並沒有死亡。我發現當時間為 7900 時,睡眠程序死亡。發生了什麼?如何減少睡眠過程的超時?

如果您需要其他資訊,我會盡可能提供資訊。

更新

我在 mysql 上使用 root、read_only 和部署帳戶。我發現 root 和 read_only 帳戶執行正確。查詢->睡眠-(60sec)->釋放過程。

但是部署帳戶,用於連接rails伺服器和mysql,執行錯誤。查詢->睡眠-(7900sec)->釋放。所以,我認為部署帳戶或 Rails 是問題。但是,我不知道要解決這個問題。

要檢查您的空閒程序超時,您可以連接到MySQL然後執行以下命令:

show variables like "%timeout%";

您需要檢查wait_timeoutinteractive_timeout根據這些值從結果中執行 MySQL 中的以下命令來設置它們:

set global wait_timeout=XXX; -- where XXX equal value less than the original one
set global interactive_timeout=XXX;  -- where XXX equal value less than the original one

是什麼sleep意思?

MySQL 程序已完成查詢的執行,但客戶端(Rails)沒有退出。

為什麼會這樣?

無論是 puma 還是 unicorn,它們都使用持久連接到數據庫,然後有很多空閒連接是正常的,其狀態是睡眠。

我應該擔心嗎?

如果這些睡眠連接來自 Rails Web 應用程序並且小於數據庫連接池大小的配置,則無需擔心。

如何解決?

set global wait_timeout=XXX; // wait_timeout is for non-interactive sessions.
set global interactive_timeout=XXX;  // interactive_time is for interactive sessions

參考

  1. 我應該擔心程序列表中的mysql睡眠狀態程序嗎?
  2. Mysql show processlist 列出許多程序sleep and info = null?

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