PolarDB MySQL版通過RDMA技術對日誌傳輸模組進行了最佳化,推出了RDMA日誌傳輸(RDMA-based log shipment)技術方案。該方案通過RDMA來替代傳統的基於共用儲存或TCP的傳輸方式, 可以把日誌傳輸輸送量提升100%,並在此基礎之上,把複製延遲降低50%以上。本文主要介紹RDMA-based log shipment技術方案的原理、開啟方式以及標準情境下的效能測試結果。
RDMA-based log shipment技術原理
PolarDB預設基於共用儲存或TCP的傳輸方式進行日誌同步。為了追求更快的日誌同步速度,降低日誌同步開銷,PolarDB引入了RDMA-based log shipment技術。RDMA-based log shipment的技術原理如下:
將RO節點的Redo log buffer當作是RW節點的Redo log buffer的遠端鏡像;
RW節點在log buffer寫盤之前,將Redo log遠端非同步寫到RO節點的log buffer,最後再將位點同步給RO節點;
RO節點通過讀取本地的log buffer來替代讀取共用儲存中的Redo log file,加快複製同步效率。
相比於two-sided操作,RDMA-based log shipment技術使用的one-sided操作基於Read/Write Verbs,無需接收端CPU的參與。通過遠程地址+密鑰的方式,將日誌直接寫入到遠端RO節點的記憶體中。
使用限制
叢集版本需為PolarDB MySQL版8.0.1版本且核心小版本需為8.0.1.1.33及以上。
全球資料庫網路GDN中的從叢集不支援開啟RDMA日誌傳輸功能。
使用方法
您可以通過loose_innodb_polar_log_rdma_transfer參數開啟RDMA日誌傳輸功能。
參數 | 層級 | 說明 |
loose_innodb_polar_log_rdma_transfer | Global | RDMA日誌傳輸功能開關,取值範圍:
|
效能提升
降低複寫延遲
在多種寫入情境下,基於RDMA的日誌傳輸功能都可以極大的降低RO節點的複寫延遲。
以32核128 GB的PolarDB MySQL版8.0叢集為例,測試資料量為20張表,單表200W資料,進行RO節點的複寫延遲測試。分別對比開啟和關閉RDMA日誌傳輸功能,在不同Redo速率下,RO節點的複寫延遲變化情況。
從上圖可以看出,開啟RDMA日誌傳輸功能後,隨著Redo寫入速率的增加,RO節點的複寫延遲將大大的降低。
提升PolarDB全域一致性讀效能
PolarDB MySQL版開啟全域一致性(高效能模式)後,RO節點的複寫延遲對效能影響較大。通過RDMA-based log shipment技術可以有效提升全域一致性讀效能。
以8核32 GB的PolarDB MySQL版8.0叢集為例,測試資料量為20張表,單表20W資料,進行RO節點的全域一致性讀效能測試。分別對比開啟和關閉RDMA日誌傳輸功能,在不同的線程數下,RO節點的全域一致性讀效能變化情況。
從上圖可以看出,開啟RDMA日誌傳輸功能後,RO節點的全域一致性讀效能提升了20%左右。