2009-05-20 76 views
0

目前我們有3個從數據庫,MySQL從數據庫問題

但幾乎總是有其中之一的極端緩慢比其他人(可能是主數據庫後一小時)

有沒有人遇到了類似的問題?可能是什麼原因?

回答

1

我猜想一些其他進程在慢速從屬數據庫所在的主機上運行,​​並且它佔用了大量資源。

嘗試運行「top」(或使用Nagios或Cactus或其他)來監視三臺從屬數據庫主機的系統性能,並查看是否有任何趨勢可以觀察。除了mysqld之外,另一個進程固定的CPU利用率,或I/O不斷飽和等等。


更新:閱讀MySQL的性能專家彼得·扎伊採夫以下兩篇文章:

筆者指出,複製從單一線程化,從機按順序執行查詢,而不是像我們一樣並行執行查詢重新在主人身上執行。所以如果你有幾個長時間運行的複製查詢,他們可以「保持隊列」。

他建議的補救措施是簡化長時間運行的SQL查詢,以便它們運行得更快。例如:

  • 如果您有影響數百萬行的UPDATE,請將其分解爲對行的子集起作用的多個UPDATE。

  • 如果您的UPDATE或INSERT查詢中包含複雜的SELECT語句,請將SELECT分隔到自己的語句中,在應用程序代碼中生成一組文字值,然後在這些文件上運行UPDATE或INSERT。當然,SELECT不會被複制,從屬只會看到具有字面值的UPDATE/INSERT。

  • 如果您有一個長時間運行的批處理作業正在運行,它可能會阻止其他更新在從服務器上執行。您可以在批處理作業中插入一些睡眠,甚至可以編寫批處理作業來檢查複製滯後,並根據需要進行睡眠。

+0

它不會非常頻繁地發生, 也許是一次幾個小時...... – omg 2009-05-21 17:23:07

+0

好吧,所以它是零星的,服務器輪流緩慢。問題依然存在:這些服務器上還有哪些可能會消耗資源的內容? – 2009-05-21 17:54:48

0

所有從屬服務器是否位於同一位置?在我的情況下,從服務器之一位於另一個位置,這是一個網絡問題。