my41_主从延迟大排查
阅读原文时间:2023年07月08日阅读:1

半同步复制

主库执行

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'``;

SET GLOBAL rpl_semi_sync_master_enabled = 1;

从库执行

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'``;

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_slave_status';

配置文件

主从数据库的my.cnf配置文件中添加:

plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1

详细可以参考

https://www.cnblogs.com/kevingrace/p/10228694.html

复制并行度

DATABASE 默认值,基于库的并行复制方式;LOGICAL_CLOCK:基于组提交的并行复制方式

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

stop slave;

set global slave_parallel_type='logical_clock';

set global slave_parallel_workers=16;

start slave;

事务提交控制

sync_binlog

innodb_flush_log_at_trx_commit

1,1最慢,提速可以配置为0,2

sync_binlog=0

innodb_flush_log_at_trx_commit=2

innodb_io_capacity

mysql> show variables like '%io_c%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_io_capacity | 200 |
| innodb_io_capacity_max | 2000 |
+------------------------+-------+
2 rows in set, 1 warning (0.03 sec)

可以调整到3000-5000,SSD可到8000

关闭顺序提交

mysql> show variables like '%order_co%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| binlog_order_commits | ON |
+----------------------+-------+

自动提交

mysql自动提交的效率要远高于开发代码中的事务,批量删除时,可以让开发使用数据库的自动提交,关闭显式提交。

也可以尝试另外一套组提交的逻辑

binlog_group_commit_sync_delay=100
binlog_group_commit_sync_no_delay_count=10000
sync_binlog=1