2011-02-17 85 views
1

我們有一個更新過程,目前超過一個小時,這意味着我們的數據庫在此期間不可用。mySQL複製

如果我設置了複製,這是否可以解決問題,還是複製的數據庫會遇到完全相同的問題,即在更新過程中表將被鎖定?

是否有可能讓複製的數據庫優先閱讀更新?

感謝, d

+0

給出更多的說明,更新是什麼樣的。它可以在一段時間內分裂和分散。什麼是您的存儲引擎? (innodb/mysql /其他) – Zimbabao 2011-02-17 09:01:15

+0

我不想觸摸更新過程..它非常複雜。此外,我不想更改存儲引擎的暫時,但我們正在使用myISAM。 – 2011-02-17 09:06:38

回答

0

我懷疑與複製你只是要dupolicating問題(除非大部分的時間都花在CPU和不僅導致一對夫婦的記錄被更新)。

不知道更多關於數據的情況,分佈和大小以及更新過程,不可能說出如何最好地解決問題 - 但是您可能會使用innodb而不是C-ISAM來獲得一些里程,確保更新是作爲一些離散步驟(例如使用存儲的處理程序)而不是單個DML語句來實現的。

-1

MySQL讓您能夠運行查詢delaye。例如:「INSERT DELAYED INTO ...」,這將導致查詢只在MYSQL有時間執行查詢時執行。

根據您的輸入,聽起來您正在使用MyISAM表,MyISAM僅支持表寬鎖定。這意味着一個更新將鎖定整個數據庫表,直到查詢完成。另一方面,InnoDB使用行鎖定,這不會導致SELECT查詢等待(掛起)以便更新完成。

所以,你有一個更好的系統管理員一生中最好的機會,如果你改變InnoDB的:)

當涉及到複製這是相當正常單獨的更新,並選擇兩個不同的MySQL服務器,而且不容易工作得很好。但是如果你使用MyISAM表並做了很多更新,鎖定問題本身仍然存在。

所以我的2美分:首先擺脫MyISAM,然後考慮複製或更好的擴展MySQL服務器,如果問題仍然存在。 (在MySQL中性能好的關鍵是至少將所有數據庫中所有索引的大小作爲物理RAM)