讀寫分離為什麼能夠提公升效能?

時間 2021-05-30 23:55:19

1樓:張世玉

恰好今天面試,遇到乙個面試者,說自己參與了上家公司的系統優化,提高了50%的資料庫效率,提到使用過的方法就是讀寫分離和分庫分表。

那麼讀寫分離是否可以提高所有的場景下的效能?或者說什麼情況下適合,什麼情況下不適合使用讀寫分離呢?聊聊個人的理解。

讀寫分離不是萬金油,不見得所有的場景都合適。在讀遠遠大於寫,且對資料的實時性要求不是那麼敏感的情況下,讀寫分離可以提高程式的效能。其他情況甚至有相反的效果。

首先,讀寫分離增加了物力伺服器,主庫負責寫入,然後再同步到從庫。負責寫入的庫不考慮讀出,負責讀出的不考慮寫入,一定程度上減少了鎖的爭用。

其次,讀寫分離不僅僅可以分離出來乙個唯讀庫,你可以乙個寫庫,然後拖多個唯讀庫,把流量分布到多個讀的庫上面去。當然就大幅度的降低了每個資料庫的負載。

如果你讀寫分離用在了寫大於讀的情況下,每次寫入資料庫,都需要花費一些效能同步到唯讀庫。而唯讀庫對分攤負載沒有什麼幫助。

如果你的系統對資料非常敏感,寫入主庫後非同步發布到從庫,從庫一定有一定時間的差異。這個要考慮。

2樓:李雲興

讀寫分離是指程式上把讀操作和寫操作分別對應不同的伺服器

誤解:主伺服器不執行讀操作,主伺服器要根據情況執行讀操作的,不然會有延遲問題

從伺服器不執行寫操作,雖然你的程式沒有直接寫,但是複製資料的過程還是一樣要寫,不寫資料哪來的,只是寫的方式是延遲批量寫

只要配置了讀寫分離效能就一定會提公升,只有兩台伺服器的情況,由於從伺服器實際上是承擔了所有的讀寫,所以並沒有提公升,所以要使用主從讀寫分離,從伺服器要兩個以上,兩個只能達到備份目的

說提公升實際上是不夠準確的說法,準確的說是可以使大量併發的讀操作不會使單條語句執行速度降低或者降低較少,也就是說沒有併發場景是不會有效果的

提公升的意思是指不降低

另外 Galera Cluster 通常是更好的方案

3樓:Robin

可以看下我寫的這篇文章:MySQL 讀寫分離,裡面在參考別人寫的東西的同時有自己的見解。

文章片段引用如下:

三讀寫分離提高效能之原因1.物理伺服器增加,負荷增加

2.主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用

3.從庫可配置myisam引擎,提公升查詢效能以及節約系統開銷

4.從庫同步主庫的資料和主庫直接寫還是有區別的,通過主庫傳送來的binlog恢復資料,但是,最重要區別在於主庫向從庫傳送binlog是非同步的,從庫恢復資料也是非同步的

5.讀寫分離適用與讀遠大於寫的場景,如果只有一台伺服器,當select很多時,update和delete會被這些select訪問中的資料堵塞,等待select結束,併發效能不高。 對於寫和讀比例相近的應用,應該部署雙主相互複製

6.可以在從庫啟動是增加一些引數來提高其讀的效能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。當然這些設定也是需要根據具體業務需求來定得,不一定能用上

7.分攤讀取。假如我們有1主3從,不考慮上述1中提到的從庫單方面設定,假設現在1分鐘內有10條寫入,150條讀取。

那麼,1主3從相當於共計40條寫入,而讀取總數沒變,因此平均下來每台伺服器承擔了10條寫入和50條讀取(主庫不承擔讀取操作)。因此,雖然寫入沒變,但是讀取大大分攤了,提高了系統效能。另外,當讀取被分攤後,又間接提高了寫入的效能。

所以,總體效能提高了,說白了就是拿機器和頻寬換效能。MySQL官方文件中有相關演算公式:官方文件 見6.

9FAQ之「MySQL複製能夠何時和多大程度提高系統效能」

8.MySQL複製另外一大功能是增加冗餘,提高可用性,當一台資料庫伺服器宕機後能通過調整另外一台從庫來以最快的速度恢復服務,因此不能光看效能,也就是說1主1從也是可以的。

為什麼機械硬碟隨機讀取效能和連續讀寫效能差那麼多?

鄧卓 再來看下訪問時間,主要有三個部分 1.尋道時間,為讀取某個目標扇區的內容,傳動臂首先將磁頭定位到包含目標扇區的磁軌上,這個過程花費的時間即為尋道時間。平均值 3 9 ms,最大可至 20 ms。2.旋轉延遲,磁頭定位到目標磁軌後,驅動器等待目標扇區的第乙個位旋轉到磁頭下,這個過程如果是 540...

使用分割槽真的能提高讀寫效能嗎?如果是為什麼?

孤華 假如說的是SSD,什麼情況下都沒有。以下均假定說的是HDD。如果 分割槽 指通常意義下的磁碟分割槽的話,而且你是用的近年的技術而不是三十年前的技術的話,不能 如果 分割槽 指 任意按照人的想法對磁碟上的資料進行劃分 的話,對理論上的HDD 能,但是提公升十分微小 假如你說的 提高效能 是指超越...

顯示卡驅動為什麼能提公升顯示卡效能?

emmmm 不是顯示卡驅動為什麼能提公升顯示卡效能,而是,沒有顯示卡驅動,你的顯示卡根本就不知道你打出的指令是啥子,玩意。如果沒有顯示卡驅動,你的顯示卡只是一塊通了電的電路板。 槓精屠手 為什麼能提公升上面也說了我但是要提一下驅動最好不要每次都更新 nv為了賣新卡對老卡有時會在驅動上進行負優化可以等...