summaryrefslogtreecommitdiff
path: root/plugin/sql_errlog
diff options
context:
space:
mode:
authorLixun Peng <lixun@mariadb.org>2017-02-11 02:11:30 +0800
committerLixun Peng <lixun@mariadb.org>2017-02-11 02:11:30 +0800
commit86bba77b88ebbe420b797c95e61b3f7d84410206 (patch)
tree34765f9b889ff0065cad0795d4a01056e99d9a59 /plugin/sql_errlog
parent1b4f694adfa257d41b5ddb141e5bcc23e6dfd9c8 (diff)
downloadmariadb-git-bb-10.2-mdev8112.tar.gz
[MDEV-8112] Port no slave left behind into 10.2bb-10.2-mdev8112
This patch implements master throttling based on slave lag, aka no slave left behind. The core feature works as follows: 1) The semi-sync-reply is ammended to also report back SQL-thread position (aka exec position) 2) Transactions are not removed from the "active-transaction-list" in the semi-sync-master plugin until atleast one slave has reported that it has executed this transaction. the slave lag can then be estimated by calculating how long the oldest transaction has been lingering in the active-transaction-list. 3) client-threads are forced to wait before commit until slave lag has decreased to acceptable value. The following variables are introduced on master: 1. rpl_semi_sync_master_max_slave_lag (global) 2. rpl_semi_sync_master_slave_lag_wait_timeout (session) The following status variables are introduced on master: 1. rpl_semi_sync_master_slave_lag_wait_sessions 2. rpl_semi_sync_master_estimated_slave_lag 3. rpl_semi_sync_master_trx_slave_lag_wait_time 4. rpl_semi_sync_master_trx_slave_lag_wait_num 5. rpl_semi_sync_master_avg_trx_slave_lag_wait_time The following variables are introduced on slave: 1. rpl_semi_sync_slave_lag_enabled (global) In addition to this, 2 optimizations that decreases overhead of semi-sync is introduced. 1) the idea of this is that if when a slave should send and transaction, it checks if it should be semi-synced, but rather than semi-sync:ing each transaction (which is done currently) the code will skip semi-syncing transaction if there already is newer transactions committed. But, since this can mean that semi-syncing is delayed indefinitely a cap is set using 2 new master variables: 1. rpl_semi_sync_master_max_unacked_event_bytes (global) 2. rpl_semi_sync_master_max_unacked_event_count (global) 2) rpl_semi_sync_master_group_commit which makes the semi-sync plugin only semi-sync the last transaction in a group commit.
Diffstat (limited to 'plugin/sql_errlog')
0 files changed, 0 insertions, 0 deletions