mysqlreplication優(yōu)化
來源:懂視網(wǎng)
責(zé)編:小采
時(shí)間:2020-11-09 08:19:27
mysqlreplication優(yōu)化
mysqlreplication優(yōu)化:這兩天有空看了一下ppc2009大會(huì)的一些pdf,發(fā)現(xiàn)這次關(guān)于Replication的討論還是很多的,很多內(nèi)容都很實(shí)用,就總結(jié)了一下。本人英文水平水平有限,難免有翻譯的不對的地方,有疑問歡迎討論:) Replication延時(shí)的類型 1.固定性的延時(shí) ——Slave的數(shù)據(jù)持續(xù)
導(dǎo)讀mysqlreplication優(yōu)化:這兩天有空看了一下ppc2009大會(huì)的一些pdf,發(fā)現(xiàn)這次關(guān)于Replication的討論還是很多的,很多內(nèi)容都很實(shí)用,就總結(jié)了一下。本人英文水平水平有限,難免有翻譯的不對的地方,有疑問歡迎討論:) Replication延時(shí)的類型 1.固定性的延時(shí) ——Slave的數(shù)據(jù)持續(xù)

這兩天有空看了一下ppc2009大會(huì)的一些pdf,發(fā)現(xiàn)這次關(guān)于Replication的討論還是很多的,很多內(nèi)容都很實(shí)用,就總結(jié)了一下。本人英文水平水平有限,難免有翻譯的不對的地方,有疑問歡迎討論:) Replication延時(shí)的類型 1.固定性的延時(shí) ——Slave的數(shù)據(jù)持續(xù)性的
這兩天有空看了一下ppc2009大會(huì)的一些pdf,發(fā)現(xiàn)這次關(guān)于Replication的討論還是很多的,很多內(nèi)容都很實(shí)用,就總結(jié)了一下。本人英文水平水平有限,難免有翻譯的不對的地方,有疑問歡迎討論:)
Replication延時(shí)的類型
1. 固定性的延時(shí)
——Slave的數(shù)據(jù)持續(xù)性的落后于Master并且一直無法與Master的數(shù)據(jù)保持一致。
——Slave的數(shù)據(jù)經(jīng)常在白天落后于Master,而在晚上可以趕上并與Master的記錄保持一致。
這種類型的延時(shí)通常是由于Slave服務(wù)器的負(fù)載已經(jīng)到達(dá)了上限或在白天訪問量大的時(shí)候到達(dá)上限造成的。
2. 非固定性的延時(shí)
——Slave的數(shù)據(jù)只是短暫的落后于Master,可在短時(shí)間內(nèi)恢復(fù)
這類型的延時(shí)通常與批量任務(wù)和報(bào)表有關(guān),效率差的查詢也會(huì)導(dǎo)致這類延時(shí)
Mysql Replication的限制
Mysql的Replication是單線程的,意味著只能有效的使用一個(gè)CPU內(nèi)核和一個(gè)磁盤,一條復(fù)雜的查詢或者事務(wù)都導(dǎo)致進(jìn)程被阻塞,不過現(xiàn)在針對5.1版本的多線程Replication補(bǔ)丁,[url=http://forge.mysql.com/wiki/ReplicationFeatures/ParallelSlave]http://forge.mysql.com/wiki/ReplicationFeatures/ParallelSlave,還是pre版,有很多限制,感興趣的可以去看看。
Replication的容量
1. 理解什么是Replication的容量
可以將Replication暫停一個(gè)小時(shí),重新啟動(dòng)Replication后,觀察Slave的數(shù)據(jù)多久可以與Master一致。從Replication重新啟動(dòng)到和Master數(shù)據(jù)一致所花費(fèi)的時(shí)間與Replication暫停的時(shí)間的比值就是Replication的容量。
2. 建議保持Replication的容量在3倍以上,即延遲一個(gè)小時(shí)的數(shù)據(jù),Slave只需要20分鐘就能與Master的數(shù)據(jù)一致。
Replication的優(yōu)化
1. 5.0的mysql中避免類似以下的更新語句
INSERT … SELECT
UPDATE .... WHERE
復(fù)雜的查詢會(huì)導(dǎo)致Replication線程阻塞。如果是insert或update與select結(jié)合的語句,可以講select單獨(dú)執(zhí)行并保存在臨時(shí)表中,然后再執(zhí)行insert或者update。
如果使用的是5.1的mysql,新功能中的行級(jí)Replication(RBR)可以解決這個(gè)問題。RBR可以將在Master上通過復(fù)雜查詢后更新的結(jié)果直接傳給Slave,Slave可以直接將結(jié)果更新到數(shù)據(jù)庫中。
2. 避免大的事務(wù)
太大的事務(wù)會(huì)造成Replication長時(shí)間阻塞,數(shù)據(jù)會(huì)嚴(yán)重滯后于Master。
Slave服務(wù)器的硬件選擇
更快的CPU內(nèi)核,對于單線程的Replication多核CPU是沒有任何優(yōu)勢的。
更高速的硬盤,包括更高的轉(zhuǎn)速和更好的高速緩存命中率,如果有錢的話上SSD吧
主從結(jié)構(gòu)的擴(kuò)展性問題
1. 如何降低寫操作的頻率
Master的寫操作會(huì)擴(kuò)散到所有的Slave上,所以高頻率的寫操作會(huì)降低Slave的讀操作效率。
至少保持一臺(tái)Slave做全庫同步,其他的Slave可以只做部分表的同步。當(dāng)然,這需要web應(yīng)用程序的配合來分配哪些查詢讀哪些Slave。
將一些更新操作放到memcached中,例如session和計(jì)數(shù)器。
Slave使用myisam引擎
將一些寫入量很大的更新操作直接在slave上執(zhí)行,而不通過Replication。
2. 如何更有效的利用Slave的硬件資源
使用分區(qū)
有選擇的對表進(jìn)行同步
在Slave上對數(shù)據(jù)進(jìn)行歸檔。
Session的持久化
為不同的應(yīng)用服務(wù)器分配不同的Slave進(jìn)行讀操作。
或者根據(jù)查詢類型的不同來分配不同的Slave。
3. 如何使你的程序最大化的利用Slave
將對數(shù)據(jù)更新不敏感的查詢放到Slave上,而需要實(shí)時(shí)數(shù)據(jù)的查詢則放到Master。
通過session的持久化,讓做了修改的用戶首先看到修改的內(nèi)容,其他的用戶可以等待Slave更新后再查看新內(nèi)容。
對于某些數(shù)據(jù),可以用memcached來存放數(shù)據(jù)的版本號(hào),讀Slave的程序可以先對比Slave的數(shù)據(jù)和memcached數(shù)據(jù)的版本,如果不一致則去讀master。用戶和博客類的信息可以用這種方法。
在查詢前可以通過SHOW SLAVE STATUS檢測Slave的狀態(tài),然后根據(jù)返回的結(jié)果進(jìn)行服務(wù)器的選擇。
from http://www.chinaunix.net/old_jh/17/1479454.html
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
mysqlreplication優(yōu)化
mysqlreplication優(yōu)化:這兩天有空看了一下ppc2009大會(huì)的一些pdf,發(fā)現(xiàn)這次關(guān)于Replication的討論還是很多的,很多內(nèi)容都很實(shí)用,就總結(jié)了一下。本人英文水平水平有限,難免有翻譯的不對的地方,有疑問歡迎討論:) Replication延時(shí)的類型 1.固定性的延時(shí) ——Slave的數(shù)據(jù)持續(xù)