由 mysql的主從複製和讀寫分離 原理可知,所謂主從複製,按慣用的基於語句複製模式,是從庫將主庫的日誌裡的各種sql語句,在從庫重新執行了一遍。
這就引出乙個問題,主從複製、讀寫分離,真的可以提高效能嗎?
如果一台機上的關係型資料庫,既要寫入資料,又要提供讀取服務,那麼在各種鎖機制之下,可以想見,效率一定不高。現在讀寫分離,主機寫,從機讀,聽上去真不錯。——但是,仔細一想,就覺得不對。主機只有寫入,並無讀取,當然壓力較小;但從機一方面供外部讀取,一方面又要同步,同步機制仍然是執行sql語句,這不是跟原來一樣了嗎?!
如果是一主多從,多台從機,可以利用負載均衡或路由演算法,減輕壓力,但如果是只有一台從機,那麼從機的壓力豈不是跟原來一樣?
唯一得到的好處,是外部寫入資料速度會快一些,因為外部只寫入主庫,沒有讀取。
不過,按照常理分析,主從複製、讀寫分離機制能夠盛行,肯定是有比較明顯的好處的,就算是一主一從,效能也一定不會像我想的那樣沒有提高。
其原因在於,系統提供的主從複製機制,和我們單純通過sql語句來更新還是差別很大的。一方面不需要做sql解析和複雜的寫查詢,另一方面,從機重放sql的時候,只要回放到記憶體中就可以了,所以速度要快上許多。實際測試可以發現,實際上資料庫至少一大半的cpu是消耗到sql解析處理的。sql語句執行的效能取決於3部分:
1)解析sql時間
2)執行sql時間
3)執行結果獲取時間
20210325
我忽然想到,資料庫分為主從倆庫,一種寫,一種讀,還有個好處就是可以加強優化和程式設計的針對性。比如說,用mysql,主庫用innodb儲存模式,從庫是myisam,讀起來會快些。程式設計方面,傳說中有cqrs模式,命令查詢職責分離,就是操作sql的語句,不是crud了,而是分為命令和查詢兩大塊,命令增刪改,查詢只負責查詢,它們分開以後,就可以在**方面加以針對性的優化。具體咋優化,沒用過,不清楚。
一主多從模式下的讀寫分離方案設計
在一主多從的環境下,由於同步的問題,會出現主庫記錄已更改,從庫尚未收到binlog或者尚未應用binlog的情況,這時如果我們在從庫上讀取該記錄,會讀取到以前的資料,稱之為 過期讀 對於有的業務來說這是不允許的,所以從程式的角度,在程式應用讀寫分離時,需要考慮到這個因素。強制走主庫方案 對於那些對實...
一主兩備流複製讀寫分離分流不均
目錄 環境症狀 問題原因 解決方案 環境系統平台 linux x86 64 red hat enterprise linux 7 版本 4.3.2 症狀架構 hgdb4.3.2企業版三颱一主倆備流複製 jdbc版本 hgdb 4.0 jdbc42.jar 一主兩備流複製,在接到外來訪問請求時,任務分...
高併發必備 mysql主從讀寫分離你真的理解嘛
場景 mysql主從複製的常見使用場景,當我們的讀寫流量過大的情況下,尤其是讀流量過大的情況下,mysql主從讀寫分離就很有必要了。我們使用主庫寫入,讀取從庫來分離讀寫流量,而這時候讀流量不斷增加,那我們只需要擴充套件從庫就可以了。主從複製的原理 資料庫是怎麼完成主從複製的呢,這裡就要說到binlo...