Skip to content

Commit 3487832

Browse files
AliSQLAliSQL
authored andcommitted
[Performance] Issue #40 Optimize performance of semisync
Description: ------------ This diff includes: 1. Make semisync buidin to completely remove overhead of plugin lock. 2. Remove LOCK_log requirement from dump thread 3. Now user threads can wait for ACK before innodb commit. add rpl_semi_sync_master_wait_point to control this behavior(AFTER_COMMIT/AFTER_SYNC) 4. Add a new ACK thread to handle ACK from slave. 5. The IO thread flushs master info only when ACK is needed add rpl_semi_sync_slave_delay_master to control this behavior 6. Fix bug#70669, if sync_binlog = 1 ,then notify dump thread after fsync of binlog file.
1 parent 830187b commit 3487832

44 files changed

Lines changed: 2510 additions & 1509 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

mysql-test/include/install_semisync.inc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
--source include/begin_include_file.inc
66

77
--source include/not_embedded.inc
8-
--source include/have_semisync_plugin.inc
98

109
--connection master
1110

mysql-test/r/mysqld--help-notwin.result

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,31 @@ The following options may be given as the first argument:
859859
not sure, leave this option unset
860860
--report-user=name The account user name of the slave to be reported to the
861861
master during slave registration
862+
--rpl-semi-sync-master-enabled
863+
enble semi-synchronous replication master (disabled by
864+
default).
865+
--rpl-semi-sync-master-timeout=#
866+
he timeout value (in ms) for semi-synchronous replication
867+
in the master
868+
--rpl-semi-sync-master-trace-level=#
869+
The tracing level for semi-sync replication.
870+
--rpl-semi-sync-master-wait-no-slave
871+
Wait until timeout when no semi-synchronous replication
872+
slave available (enabled by default).
873+
(Defaults to on; use --skip-rpl-semi-sync-master-wait-no-slave to disable.)
874+
--rpl-semi-sync-master-wait-point=name
875+
watting for slave ack before/after commit trx
876+
--rpl-semi-sync-slave-delay-master
877+
Only write master info file when ack is needed.
878+
--rpl-semi-sync-slave-enabled
879+
enble semi-synchronous replication slave (disabled by
880+
default).
881+
--rpl-semi-sync-slave-kill-conn-timeout[=#]
882+
Timeout for the mysql connection used to kill the slave
883+
io_thread's connection on master. This timeout comes into
884+
play when stop slave is executed.
885+
--rpl-semi-sync-slave-trace-level=#
886+
The tracing level for semi-sync replication.
862887
--rpl-stop-slave-timeout=#
863888
Timeout in seconds to wait for slave to stop before
864889
returning a warning.
@@ -1435,6 +1460,15 @@ report-host (No default value)
14351460
report-password (No default value)
14361461
report-port 0
14371462
report-user (No default value)
1463+
rpl-semi-sync-master-enabled FALSE
1464+
rpl-semi-sync-master-timeout 10000
1465+
rpl-semi-sync-master-trace-level 32
1466+
rpl-semi-sync-master-wait-no-slave TRUE
1467+
rpl-semi-sync-master-wait-point after_commit
1468+
rpl-semi-sync-slave-delay-master FALSE
1469+
rpl-semi-sync-slave-enabled FALSE
1470+
rpl-semi-sync-slave-kill-conn-timeout 5
1471+
rpl-semi-sync-slave-trace-level 32
14381472
rpl-stop-slave-timeout 31536000
14391473
safe-user-create FALSE
14401474
secure-auth TRUE

mysql-test/suite/perfschema/r/dml_setup_instruments.result

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ where name like 'Wait/Synch/Mutex/sql/%'
44
and name not in ('wait/synch/mutex/sql/DEBUG_SYNC::mutex')
55
order by name limit 10;
66
NAME ENABLED TIMED
7+
wait/synch/mutex/sql/Ack_receiver::m_mutex YES YES
78
wait/synch/mutex/sql/Cversion_lock YES YES
89
wait/synch/mutex/sql/Delayed_insert::mutex YES YES
910
wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state YES YES
1011
wait/synch/mutex/sql/Gtid_state YES YES
1112
wait/synch/mutex/sql/hash_filo::lock YES YES
1213
wait/synch/mutex/sql/LOCK_active_mi YES YES
1314
wait/synch/mutex/sql/LOCK_audit_mask YES YES
15+
wait/synch/mutex/sql/LOCK_binlog_ YES YES
1416
wait/synch/mutex/sql/LOCK_connection_count YES YES
15-
wait/synch/mutex/sql/LOCK_crypt YES YES
16-
wait/synch/mutex/sql/LOCK_delayed_create YES YES
1717
select * from performance_schema.setup_instruments
1818
where name like 'Wait/Synch/Rwlock/sql/%'
1919
and name not in ('wait/synch/rwlock/sql/CRYPTO_dynlock_value::lock')
@@ -36,6 +36,8 @@ where name like 'Wait/Synch/Cond/sql/%'
3636
'wait/synch/cond/sql/DEBUG_SYNC::cond')
3737
order by name limit 10;
3838
NAME ENABLED TIMED
39+
wait/synch/cond/sql/Ack_receiver::m_cond YES YES
40+
wait/synch/cond/sql/COND_binlog_send_ YES YES
3941
wait/synch/cond/sql/COND_connection_count YES YES
4042
wait/synch/cond/sql/COND_flush_thread_cache YES YES
4143
wait/synch/cond/sql/COND_manager YES YES
@@ -44,8 +46,6 @@ wait/synch/cond/sql/COND_server_started YES YES
4446
wait/synch/cond/sql/COND_thread_cache YES YES
4547
wait/synch/cond/sql/COND_thread_count YES YES
4648
wait/synch/cond/sql/Delayed_insert::cond YES YES
47-
wait/synch/cond/sql/Delayed_insert::cond_client YES YES
48-
wait/synch/cond/sql/Event_scheduler::COND_state YES YES
4949
select * from performance_schema.setup_instruments
5050
where name='Wait';
5151
select * from performance_schema.setup_instruments

mysql-test/suite/perfschema/r/relaylog.result

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,15 @@ where event_name like "%MYSQL_BIN_LOG%"
6161
EVENT_NAME COUNT_STAR
6262
wait/synch/cond/sql/MYSQL_BIN_LOG::COND_done NONE
6363
wait/synch/cond/sql/MYSQL_BIN_LOG::prep_xids_cond NONE
64+
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_binlog_end_pos MANY
6465
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit MANY
6566
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit_queue MANY
6667
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_done MANY
6768
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_flush_queue MANY
6869
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index MANY
6970
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_log MANY
71+
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_semisync NONE
72+
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_semisync_queue NONE
7073
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_sync MANY
7174
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_sync_queue MANY
7275
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_xids NONE
@@ -86,6 +89,7 @@ where event_name like "%MYSQL_RELAY_LOG%"
8689
EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
8790
wait/synch/cond/sql/MYSQL_RELAY_LOG::COND_done 0 0 0 0 0
8891
wait/synch/cond/sql/MYSQL_RELAY_LOG::prep_xids_cond 0 0 0 0 0
92+
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_binlog_end_pos 0 0 0 0 0
8993
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_commit 0 0 0 0 0
9094
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_commit_queue 0 0 0 0 0
9195
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_done 0 0 0 0 0
@@ -153,12 +157,15 @@ where event_name like "%MYSQL_BIN_LOG%"
153157
EVENT_NAME COUNT_STAR
154158
wait/synch/cond/sql/MYSQL_BIN_LOG::COND_done NONE
155159
wait/synch/cond/sql/MYSQL_BIN_LOG::prep_xids_cond NONE
160+
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_binlog_end_pos MANY
156161
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit MANY
157162
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit_queue MANY
158163
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_done MANY
159164
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_flush_queue MANY
160165
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index MANY
161166
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_log MANY
167+
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_semisync NONE
168+
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_semisync_queue NONE
162169
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_sync MANY
163170
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_sync_queue MANY
164171
wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_xids NONE
@@ -200,6 +207,7 @@ where event_name like "%MYSQL_RELAY_LOG%"
200207
EVENT_NAME COUNT_STAR
201208
wait/synch/cond/sql/MYSQL_RELAY_LOG::COND_done NONE
202209
wait/synch/cond/sql/MYSQL_RELAY_LOG::prep_xids_cond NONE
210+
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_binlog_end_pos NONE
203211
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_commit NONE
204212
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_commit_queue NONE
205213
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_done NONE

0 commit comments

Comments
 (0)