我們知道生產環境中經常會遇到MySQL主從延遲問題,從原理上也能看出主庫的事務提交是並發模式,而從庫只有一個SQL線程負責解析,所以本身上就可能存在延遲。
延遲的主要原因在於:
1、從庫的配置往往沒有主庫的配置高
2、主庫支持並發寫入,而5.7之前的版本上從庫只有單線程SQL來完成任務。
3、MySQL主從之間的同步,並不是完全的實時同步,而是主庫提交事務之后,從庫才再來執行一遍
4、主庫上的表的某個列沒有索引,然后對這個列進行delete或update操作
5、網絡問題,往返時延RTT較大。
解決方案如下:
1、使用MySQL5.7版本,MySQL5.7版本后引入新的機制,即基於組提交的並行復制,設置參數slave_parallel_workers的值大於0,還有一個參數slave_parallel_type='LOGICAL_CLOCK'。
。MySQL [fruit]> show variables like '%parallel%'; +------------------------+----------+ | Variable_name | Value | +------------------------+----------+ | slave_parallel_type | DATABASE | | slave_parallel_workers | 0 | +------------------------+----------+ 2 rows in set (0.00 sec)
上面這個是沒有修改的例子而已。僅僅是為了展示
2、可以采用percona公司的PXC架構,實現多節點寫入,達到時時同步
3、在業務初期就選擇合適的分庫、分表策略,避免單表單庫過大帶來額外的復制壓力。
4、避免一些無用的I/O消耗,使用PCIE-SSD硬盤
5、磁盤陣列選擇RAID10架構,raid cache策略使用WB而非WT
6、適當調整buffer pool的大小
7、避免數據庫進行各種大量的運算。