MySQL5.7からslave_parallel_workersを調整してスレーブの遅延が対応出来る事は、
色々な資料やブログ等にも書かれているので詳細はそちらを確認してみて下さい。
Oracle MySQL Cloud Service(OC3 = 2vCPU)の環境でSQLSLAPで負荷をかけてみて、
マスターとスレーブで遅延がどれだけ解消できるか?若しくはどこまで調整すれば良いか確認してみました。
slave_parallel_workersを1,2,4,8,16,32と変更して確認した中では、slave_parallel_workers=8が安定していました。
スレーブのCPUや実行されているQuery等を確認して、適宜最適な値を調整出来ると良いですね。
環境
Oracle Cloud
MySQL Service
Instance: OC3 (2vCPU)
slave_parallel_workers=1
mysql> stop slave; Query OK, 0 rows affected (0.01 sec) mysql> SET GLOBAL SLAVE_PARALLEL_WORKERS=1; Query OK, 0 rows affected (0.00 sec) mysql> start slave; Query OK, 0 rows affected (0.04 sec) mysql> show variables like 'SLAVE_PARALLEL_WORKERS'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | slave_parallel_workers | 1 | +------------------------+-------+ 1 row in set (0.00 sec) mysql>
[oracle@study01-mysql-1 ~]$ ./mysqlslap.sh Benchmark Running for engine InnoDB Average number of seconds to run all queries: 38.711 seconds Minimum number of seconds to run all queries: 38.711 seconds Maximum number of seconds to run all queries: 38.711 seconds Number of clients running queries: 10 Average number of queries per client: 10000 [oracle@study01-mysql-1 ~]$
slave_parallel_workers=8
mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL SLAVE_PARALLEL_WORKERS=8; Query OK, 0 rows affected (0.00 sec) mysql> start slave; Query OK, 0 rows affected (0.02 sec) mysql> show variables like 'SLAVE_PARALLEL_WORKERS'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | slave_parallel_workers | 8 | +------------------------+-------+ 1 row in set (0.01 sec) mysql>
[oracle@study01-mysql-1 ~]$ ./mysqlslap.sh Benchmark Running for engine InnoDB Average number of seconds to run all queries: 38.466 seconds Minimum number of seconds to run all queries: 38.466 seconds Maximum number of seconds to run all queries: 38.466 seconds Number of clients running queries: 10 Average number of queries per client: 10000 [oracle@study01-mysql-1 ~]$
以下、MySQL Enterprise Monitorで確認したグラフです。スレーブの遅延の状況が分かり易いですね。
slave_parallel_workers=2とslave_parallel_workers=8の差です。
1) Master -> 2) slave_parallel_workers=8 -> slave_parallel_workers=2の順にデータベース内での処理が終わっています。
slave_parallel_workers=2とslave_parallel_workers=32の差です。
マスターとスレーブがほぼ同時に終了しています。