mysql 並行複製

來源:互聯網
上載者:User

標籤:並行複製

   並行複製,主要是解決sql_thread在高並發環境下,存在效能瓶頸。mysql5.7並行複製的思想簡單易懂,一個組提交的事務都是可以並行回放,因為這些事務都已進入到事務的prepare階段,則說明事務之間沒有任何衝突(否則就不可能提交)。

為了相容MySQL 5.6基於庫的並行複製,5.7引入了新的變數slave-parallel-type,其可以配置的值有:

 (1)DATABASE:預設值,基於庫的並行複製方式

 (2)LOGICAL_CLOCK:基於組提交的並行複製方式


操作步驟:

資料庫版本資訊

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/8B/F7/wKioL1hd_b6ycFcvAACBGL0D-P0424.png" title="0_1.png" alt="wKioL1hd_b6ycFcvAACBGL0D-P0424.png" />


複製類型 基於binlog檔案名稱和位置【也可採用GTID方式】

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/8B/FB/wKiom1hd_l-g790VAAA-0C28dFA991.png" title="0_2.png" alt="wKiom1hd_l-g790VAAA-0C28dFA991.png" />


在slave 的my.cnf增加配置,然後重啟slave。

[mysqld]

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=8

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON


重新start slave;發現有8個coordinator線程。

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/8B/FB/wKiom1heCWaz-Uu7AACT8jOdpiY523.png" title="cor.png" alt="wKiom1heCWaz-Uu7AACT8jOdpiY523.png" />


   如何知道事務是否在一組中,因為原版的MySQL並沒有提供這樣的資訊。在MySQL 5.7版本中,其設計方式是將組提交的資訊存放在GTID中。那麼如果使用者沒有開啟GTID功能,即將參數gtid_mode設定為OFF呢?故MySQL 5.7又引入了稱之為Anonymous_Gtid的二進位日誌event類型。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/8B/F7/wKioL1heAary4UfIAACfCGMN9Kg209.png" title="4_1.png" alt="wKioL1heAary4UfIAACfCGMN9Kg209.png" />


last_committed值相同的為一組,可以並存執行。

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/8B/F7/wKioL1heCJ_iv6rhAAAvMM7DH-8052.png" title="commit.png" alt="wKioL1heCJ_iv6rhAAAvMM7DH-8052.png" />


監控並行複製的資訊

"[email protected]:mysql9000.sock  [performance_schema]>show tables like ‘replication%‘;

+---------------------------------------------+

| Tables_in_performance_schema (replication%) |

+---------------------------------------------+

| replication_applier_configuration           |

| replication_applier_status                  |

| replication_applier_status_by_coordinator   |

| replication_applier_status_by_worker        |

| replication_connection_configuration        |

| replication_connection_status               |

| replication_group_member_stats              |

| replication_group_members                   |

+---------------------------------------------+

8 rows in set (0.00 sec)


並行複製配置與調優

master_info_repository

開啟MTS功能後,務必將參數master_info_repostitory設定為TABLE,這樣效能可以有50%~80%的提升。這是因為並行複製開啟後對於元master.info這個檔案的更新將會大幅提升,資源的競爭也會變大。在之前InnoSQL的版本中,添加了參數來控制重新整理master.info這個檔案的頻率,甚至可以不重新整理這個檔案。因為重新整理這個檔案是沒有必要的,即根據master-info.log這個檔案恢複本身就是不可靠的。在推薦將master_info_repository設定為TABLE,來減小這部分的開銷。

slave_parallel_workers

若將slave_parallel_workers設定為0,則MySQL 5.7退化為原單線程複製,但將slave_parallel_workers設定為1,則SQL線程功能轉化為coordinator線程,但是只有1個worker線程進行回放,也是單線程複製。然而,這兩種效能卻又有一些的區別,因為多了一次coordinator線程的轉寄,因此slave_parallel_workers=1的效能反而比0還要差,有20%左右的效能下降。


   這裡其中引入了另一個問題,如果主機上的負載不大,那麼組提交的效率就不高,很有可能發生每組提交的事務數量僅有1個,那麼在從機的回放時,雖然開啟了並行複製,但會出現效能反而比原先的單線程還要差的現象,即延遲反而增大了。


本文出自 “南山深處” 部落格,請務必保留此出處http://kenneyzhou.blog.51cto.com/12427643/1885731

mysql 並行複製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.