MySQL 代理和 SHOW PROCESSLIST 查詢時間
我目前在兩個主伺服器之間雙向進行 MySQL 複製,一個在本地數據中心,另一個在 Amazon EC2。
一切似乎都可以正常複製,本身沒有問題,除了偶爾會導致衝突的查詢,但這些查詢很少而且相差甚遠。最近我設置了 mysql-proxy 來嘗試對兩台伺服器進行負載平衡,在本地機器接收到 40 個或更多連接之後,負載平衡才真正開始,此時後續數據庫連接被改組到 EC2 機器。
我們最近注意到的一點是,mysql 代理會通知我們有 41 個連接,然後開始平衡。但是,當我連接到本地機器並執行時,
SHOW PROCESSLIST;
它可能只為我提供 30 個連接。有人知道為什麼會這樣嗎?
除此之外,作為發出
SHOW PROCESSLIST;
命令的結果,我注意到兩台機器上都在執行大量查詢,表明它們的執行時間已超過 5000 秒。我很確定這些是“殭屍”查詢,但有誰知道為什麼首先創建它們?僅供參考,我們在最新版本的 ubuntu 和 debian 上執行 mysql 版本 5.1.54。
任何想法都會非常有幫助。
$$ Addendum $$ 原來我們沒有使用 mysql_pconnect 並且實際上使用的是 mysqli 庫。我仍然無法找出為什麼會發生這種情況,一旦我發現就會報告。
我反對在雙主設置中寫信給兩個大師。有太多事情可能出錯,而且修復起來很麻煩——AUTO_INCREMENT、其他重複鍵等。
數百個“睡眠”連接對伺服器幾乎沒有影響,因此限制為 40 是沒有用的。10 個或更多活動連接(非睡眠)可能是一個問題。在這種情況下,我會查看查詢。通常優化查詢是最好的答案。
另請注意,在一個 Master 上完成的每一次寫入(INSERT、UPDATE 等)都必須在所有其他 Master 和 Slave 上完成。所以,你不能真正“傳播”文字。
如果您有隻進行讀取(SELECT)的程序,那麼它們應該轉到從屬和/或備份主控,而不是實時的、可寫的主控。這會有所幫助。
請注意“關鍵寫入”問題。範例:使用者發表部落格評論,然後查看他的評論,但沒有看到。如果寫入到一台機器,但讀取擊中另一台機器,並且複制“落後”,則可能會發生這種情況。
(我的評論適用於所有版本和所有 API,而不僅僅是 5.1 和 PHP 的 mysqli。)
我遠離 mysql_pconnect (和其他連接池機制)。MySQL 中的連接啟動/拆除非常快。池化連接可能存在@variables、事務模式、sql_modes 等問題。