mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge mdev-4506-base into 10.0-base
This commit is contained in:
@ -63,5 +63,5 @@ if (`SELECT '$binlog_limit' <> ''`)
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $_binlog_start <binlog_start>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /Server ver:.*$/SERVER_VERSION, BINLOG_VERSION/ /GTID [0-9]+-[0-9]+-[0-9]+/GTID #-#-#/ /\[([0-9]-[0-9]-[0-9]+)\]/[#-#-#]/
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /Server ver:.*$/SERVER_VERSION, BINLOG_VERSION/ /GTID [0-9]+-[0-9]+-[0-9]+/GTID #-#-#/ /\[([0-9]-[0-9]-[0-9]+)\]/[#-#-#]/ /cid=[0-9]+/cid=#/
|
||||
--eval $_statement
|
||||
|
@ -41,6 +41,17 @@ The following options may be given as the first argument:
|
||||
Type of BINLOG_CHECKSUM_ALG. Include checksum for log
|
||||
events in the binary log. Possible values are NONE and
|
||||
CRC32; default is NONE.
|
||||
--binlog-commit-wait-count=#
|
||||
If non-zero, binlog write will wait at most
|
||||
binlog_commit_wait_usec microseconds for at least this
|
||||
many commits to queue up for group commit to the binlog.
|
||||
This can reduce I/O on the binlog and provide increased
|
||||
opportunity for parallel apply on the slave, but too high
|
||||
a value will decrease commit throughput.
|
||||
--binlog-commit-wait-usec=#
|
||||
Maximum time, in microseconds, to wait for more commits
|
||||
to queue up for binlog group commit. Only takes effect if
|
||||
the value of binlog_commit_wait_count is non-zero.
|
||||
--binlog-direct-non-transactional-updates
|
||||
Causes updates to non-transactional engines using
|
||||
statement format to be written directly to binary log.
|
||||
@ -783,6 +794,16 @@ The following options may be given as the first argument:
|
||||
--slave-net-timeout=#
|
||||
Number of seconds to wait for more data from any
|
||||
master/slave connection before aborting the read
|
||||
--slave-parallel-max-queued=#
|
||||
Limit on how much memory SQL threads should use per
|
||||
parallel replication thread when reading ahead in the
|
||||
relay log looking for opportunities for parallel
|
||||
replication. Only used when --slave-parallel-threads > 0.
|
||||
--slave-parallel-threads=#
|
||||
If non-zero, number of threads to spawn to apply in
|
||||
parallel events on the slave that were group-committed on
|
||||
the master or were logged with GTID in different
|
||||
replication domains.
|
||||
--slave-skip-errors=name
|
||||
Tells the slave thread to continue replication when a
|
||||
query event returns an error from the provided list
|
||||
@ -922,6 +943,8 @@ bind-address (No default value)
|
||||
binlog-annotate-row-events FALSE
|
||||
binlog-cache-size 32768
|
||||
binlog-checksum NONE
|
||||
binlog-commit-wait-count 0
|
||||
binlog-commit-wait-usec 100000
|
||||
binlog-direct-non-transactional-updates FALSE
|
||||
binlog-format STATEMENT
|
||||
binlog-optimize-thread-scheduling TRUE
|
||||
@ -1130,6 +1153,8 @@ slave-compressed-protocol FALSE
|
||||
slave-exec-mode STRICT
|
||||
slave-max-allowed-packet 1073741824
|
||||
slave-net-timeout 3600
|
||||
slave-parallel-max-queued 131072
|
||||
slave-parallel-threads 0
|
||||
slave-skip-errors (No default value)
|
||||
slave-sql-verify-checksum TRUE
|
||||
slave-transaction-retries 10
|
||||
|
@ -31,6 +31,6 @@ a
|
||||
1
|
||||
2
|
||||
3
|
||||
InnoDB: Last MySQL binlog file position 0 922, file name ./master-bin.000001
|
||||
InnoDB: Last MySQL binlog file position 0 926, file name ./master-bin.000001
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
DROP TABLE t1;
|
||||
|
@ -32,6 +32,6 @@ a
|
||||
1
|
||||
2
|
||||
3
|
||||
InnoDB: Last MySQL binlog file position 0 922, file name ./master-bin.000001
|
||||
InnoDB: Last MySQL binlog file position 0 926, file name ./master-bin.000001
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
DROP TABLE t1;
|
||||
|
@ -61,6 +61,7 @@ wait/synch/mutex/sql/LOCK_prepared_stmt_count
|
||||
wait/synch/mutex/sql/LOCK_prepare_ordered
|
||||
wait/synch/mutex/sql/LOCK_rpl_gtid_state
|
||||
wait/synch/mutex/sql/LOCK_rpl_status
|
||||
wait/synch/mutex/sql/LOCK_rpl_thread_pool
|
||||
wait/synch/mutex/sql/LOCK_server_started
|
||||
wait/synch/mutex/sql/LOCK_slave_list
|
||||
wait/synch/mutex/sql/LOCK_slave_state
|
||||
@ -87,7 +88,6 @@ wait/synch/mutex/sql/Query_cache::structure_guard_mutex
|
||||
wait/synch/mutex/sql/Relay_log_info::data_lock
|
||||
wait/synch/mutex/sql/Relay_log_info::log_space_lock
|
||||
wait/synch/mutex/sql/Relay_log_info::run_lock
|
||||
wait/synch/mutex/sql/Relay_log_info::sleep_lock
|
||||
wait/synch/mutex/sql/Slave_reporting_capability::err_lock
|
||||
wait/synch/mutex/sql/TABLE_SHARE::LOCK_ha_data
|
||||
wait/synch/mutex/sql/THD::LOCK_thd_data
|
||||
@ -122,8 +122,10 @@ wait/synch/cond/mysys/COND_alarm
|
||||
wait/synch/cond/mysys/my_thread_var::suspend
|
||||
wait/synch/cond/mysys/THR_COND_threads
|
||||
wait/synch/cond/sql/COND_flush_thread_cache
|
||||
wait/synch/cond/sql/COND_prepare_ordered
|
||||
wait/synch/cond/sql/COND_queue_state
|
||||
wait/synch/cond/sql/COND_rpl_status
|
||||
wait/synch/cond/sql/COND_rpl_thread_pool
|
||||
wait/synch/cond/sql/COND_server_started
|
||||
wait/synch/cond/sql/COND_thread_cache
|
||||
wait/synch/cond/sql/COND_thread_count
|
||||
@ -143,7 +145,6 @@ wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond
|
||||
wait/synch/cond/sql/Query_cache::COND_cache_status_changed
|
||||
wait/synch/cond/sql/Relay_log_info::data_cond
|
||||
wait/synch/cond/sql/Relay_log_info::log_space_cond
|
||||
wait/synch/cond/sql/Relay_log_info::sleep_cond
|
||||
wait/synch/cond/sql/Relay_log_info::start_cond
|
||||
wait/synch/cond/sql/Relay_log_info::stop_cond
|
||||
wait/synch/cond/sql/THD::COND_wakeup_ready
|
||||
|
@ -38,14 +38,14 @@ order by name limit 10;
|
||||
NAME ENABLED TIMED
|
||||
wait/synch/cond/sql/COND_flush_thread_cache YES YES
|
||||
wait/synch/cond/sql/COND_manager YES YES
|
||||
wait/synch/cond/sql/COND_parallel_entry YES YES
|
||||
wait/synch/cond/sql/COND_prepare_ordered YES YES
|
||||
wait/synch/cond/sql/COND_queue_state YES YES
|
||||
wait/synch/cond/sql/COND_rpl_status YES YES
|
||||
wait/synch/cond/sql/COND_rpl_thread YES YES
|
||||
wait/synch/cond/sql/COND_rpl_thread_pool YES YES
|
||||
wait/synch/cond/sql/COND_server_started YES YES
|
||||
wait/synch/cond/sql/COND_thread_cache YES YES
|
||||
wait/synch/cond/sql/COND_thread_count YES YES
|
||||
wait/synch/cond/sql/Delayed_insert::cond YES YES
|
||||
wait/synch/cond/sql/Delayed_insert::cond_client YES YES
|
||||
wait/synch/cond/sql/Event_scheduler::COND_state YES YES
|
||||
select * from performance_schema.setup_instruments
|
||||
where name='Wait';
|
||||
select * from performance_schema.setup_instruments
|
||||
|
@ -8,6 +8,7 @@ a
|
||||
1
|
||||
2
|
||||
3
|
||||
SET GLOBAL debug_dbug= '+d,incident_database_resync_on_replace,*';
|
||||
REPLACE INTO t1 VALUES (4);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
|
267
mysql-test/suite/rpl/r/rpl_parallel.result
Normal file
267
mysql-test/suite/rpl/r/rpl_parallel.result
Normal file
@ -0,0 +1,267 @@
|
||||
include/rpl_init.inc [topology=1->2]
|
||||
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
include/start_slave.inc
|
||||
*** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
||||
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a int PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
LOCK TABLE t1 WRITE;
|
||||
SET gtid_domain_id=1;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SET gtid_domain_id=0;
|
||||
INSERT INTO t2 VALUES (2);
|
||||
INSERT INTO t2 VALUES (3);
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (4);
|
||||
INSERT INTO t2 VALUES (5);
|
||||
COMMIT;
|
||||
INSERT INTO t2 VALUES (6);
|
||||
SELECT * FROM t2 ORDER by a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
UNLOCK TABLES;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
*** Test two transactions in different domains committed in opposite order on slave but in a single group commit. ***
|
||||
include/stop_slave.inc
|
||||
SET sql_log_bin=0;
|
||||
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
||||
RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
RETURN x;
|
||||
END
|
||||
||
|
||||
SET sql_log_bin=1;
|
||||
SET @old_format= @@SESSION.binlog_format;
|
||||
SET binlog_format='statement';
|
||||
SET gtid_domain_id=1;
|
||||
INSERT INTO t2 VALUES (foo(10,
|
||||
'commit_before_enqueue SIGNAL ready1 WAIT_FOR cont1',
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL ready2'));
|
||||
FLUSH LOGS;
|
||||
SET sql_log_bin=0;
|
||||
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
||||
RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
IF d1 != '' THEN
|
||||
SET debug_sync = d1;
|
||||
END IF;
|
||||
IF d2 != '' THEN
|
||||
SET debug_sync = d2;
|
||||
END IF;
|
||||
RETURN x;
|
||||
END
|
||||
||
|
||||
SET sql_log_bin=1;
|
||||
SET @old_format=@@GLOBAL.binlog_format;
|
||||
SET GLOBAL binlog_format=statement;
|
||||
SET GLOBAL slave_parallel_threads=0;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
include/start_slave.inc
|
||||
SET debug_sync='now WAIT_FOR ready1';
|
||||
SET gtid_domain_id=2;
|
||||
INSERT INTO t2 VALUES (foo(11,
|
||||
'commit_before_enqueue SIGNAL ready3 WAIT_FOR cont3',
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL ready4 WAIT_FOR cont4'));
|
||||
SET gtid_domain_id=0;
|
||||
SELECT * FROM t2 WHERE a >= 10 ORDER BY a;
|
||||
a
|
||||
10
|
||||
11
|
||||
SET debug_sync='now WAIT_FOR ready3';
|
||||
SET debug_sync='now SIGNAL cont3';
|
||||
SET debug_sync='now WAIT_FOR ready4';
|
||||
SET debug_sync='now SIGNAL cont1';
|
||||
SET debug_sync='now WAIT_FOR ready2';
|
||||
SET debug_sync='now SIGNAL cont4';
|
||||
SELECT * FROM t2 WHERE a >= 10 ORDER BY a;
|
||||
a
|
||||
10
|
||||
11
|
||||
show binlog events in 'slave-bin.000002' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002
|
||||
slave-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
slave-bin.000002 # Query # # use `test`; INSERT INTO t2 VALUES (foo(11,
|
||||
'commit_before_enqueue SIGNAL ready3 WAIT_FOR cont3',
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL ready4 WAIT_FOR cont4'))
|
||||
slave-bin.000002 # Xid # # COMMIT /* XID */
|
||||
slave-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
slave-bin.000002 # Query # # use `test`; INSERT INTO t2 VALUES (foo(10,
|
||||
'commit_before_enqueue SIGNAL ready1 WAIT_FOR cont1',
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL ready2'))
|
||||
slave-bin.000002 # Xid # # COMMIT /* XID */
|
||||
FLUSH LOGS;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=0;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
SET debug_sync='RESET';
|
||||
include/start_slave.inc
|
||||
*** Test that group-committed transactions on the master can replicate in parallel on the slave. ***
|
||||
FLUSH LOGS;
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7);
|
||||
BEGIN;
|
||||
INSERT INTO t3 VALUES (2,102);
|
||||
BEGIN;
|
||||
INSERT INTO t3 VALUES (4,104);
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
|
||||
SET binlog_format=statement;
|
||||
INSERT INTO t3 VALUES (2, foo(12,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
||||
''));
|
||||
SET debug_sync='now WAIT_FOR master_queued1';
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
|
||||
SET binlog_format=statement;
|
||||
INSERT INTO t3 VALUES (4, foo(14,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
||||
''));
|
||||
SET debug_sync='now WAIT_FOR master_queued2';
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3';
|
||||
SET binlog_format=statement;
|
||||
INSERT INTO t3 VALUES (6, foo(16,
|
||||
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
||||
''));
|
||||
SET debug_sync='now WAIT_FOR master_queued3';
|
||||
SET debug_sync='now SIGNAL master_cont1';
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 1
|
||||
2 12
|
||||
3 3
|
||||
4 14
|
||||
5 5
|
||||
6 16
|
||||
7 7
|
||||
show binlog events in 'master-bin.000002' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000002 # Binlog_checkpoint # # master-bin.000002
|
||||
master-bin.000002 # Gtid # # GTID #-#-#
|
||||
master-bin.000002 # Query # # use `test`; CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB
|
||||
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7)
|
||||
master-bin.000002 # Xid # # COMMIT /* XID */
|
||||
master-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (2, foo(12,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
||||
''))
|
||||
master-bin.000002 # Xid # # COMMIT /* XID */
|
||||
master-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (4, foo(14,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
||||
''))
|
||||
master-bin.000002 # Xid # # COMMIT /* XID */
|
||||
master-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (6, foo(16,
|
||||
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
||||
''))
|
||||
master-bin.000002 # Xid # # COMMIT /* XID */
|
||||
SET debug_sync='now WAIT_FOR slave_queued3';
|
||||
ROLLBACK;
|
||||
SET debug_sync='now WAIT_FOR slave_queued1';
|
||||
ROLLBACK;
|
||||
SET debug_sync='now WAIT_FOR slave_queued2';
|
||||
SET debug_sync='now SIGNAL slave_cont1';
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 1
|
||||
2 12
|
||||
3 3
|
||||
4 14
|
||||
5 5
|
||||
6 16
|
||||
7 7
|
||||
show binlog events in 'slave-bin.000003' from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000003 # Binlog_checkpoint # # slave-bin.000003
|
||||
slave-bin.000003 # Gtid # # GTID #-#-#
|
||||
slave-bin.000003 # Query # # use `test`; CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB
|
||||
slave-bin.000003 # Gtid # # BEGIN GTID #-#-#
|
||||
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7)
|
||||
slave-bin.000003 # Xid # # COMMIT /* XID */
|
||||
slave-bin.000003 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (2, foo(12,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
||||
''))
|
||||
slave-bin.000003 # Xid # # COMMIT /* XID */
|
||||
slave-bin.000003 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (4, foo(14,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
||||
''))
|
||||
slave-bin.000003 # Xid # # COMMIT /* XID */
|
||||
slave-bin.000003 # Gtid # # BEGIN GTID #-#-# cid=#
|
||||
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (6, foo(16,
|
||||
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
||||
''))
|
||||
slave-bin.000003 # Xid # # COMMIT /* XID */
|
||||
*** Test STOP SLAVE in parallel mode ***
|
||||
include/stop_slave.inc
|
||||
SET binlog_direct_non_transactional_updates=0;
|
||||
SET sql_log_bin=0;
|
||||
CALL mtr.add_suppression("Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction");
|
||||
SET sql_log_bin=1;
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (20);
|
||||
INSERT INTO t1 VALUES (20);
|
||||
INSERT INTO t2 VALUES (21);
|
||||
INSERT INTO t3 VALUES (20, 20);
|
||||
COMMIT;
|
||||
INSERT INTO t3 VALUES(21, 21);
|
||||
INSERT INTO t3 VALUES(22, 22);
|
||||
SET binlog_format=@old_format;
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (21);
|
||||
START SLAVE;
|
||||
STOP SLAVE;
|
||||
ROLLBACK;
|
||||
include/wait_for_slave_to_stop.inc
|
||||
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
||||
a
|
||||
20
|
||||
SELECT * FROM t2 WHERE a >= 20 ORDER BY a;
|
||||
a
|
||||
20
|
||||
21
|
||||
SELECT * FROM t3 WHERE a >= 20 ORDER BY a;
|
||||
a b
|
||||
20 20
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
||||
a
|
||||
20
|
||||
SELECT * FROM t2 WHERE a >= 20 ORDER BY a;
|
||||
a
|
||||
20
|
||||
21
|
||||
SELECT * FROM t3 WHERE a >= 20 ORDER BY a;
|
||||
a b
|
||||
20 20
|
||||
21 21
|
||||
22 22
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL binlog_format=@old_format;
|
||||
SET GLOBAL slave_parallel_threads=0;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
include/start_slave.inc
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
|
||||
include/start_slave.inc
|
||||
DROP function foo;
|
||||
DROP TABLE t1,t2,t3;
|
||||
include/rpl_end.inc
|
@ -1 +0,0 @@
|
||||
--loose-debug=+d,incident_database_resync_on_replace
|
@ -7,12 +7,19 @@ CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT * FROM t1;
|
||||
|
||||
let $debug_save= `SELECT @@GLOBAL.debug`;
|
||||
SET GLOBAL debug_dbug= '+d,incident_database_resync_on_replace,*';
|
||||
|
||||
# This will generate an incident log event and store it in the binary
|
||||
# log before the replace statement.
|
||||
REPLACE INTO t1 VALUES (4);
|
||||
--save_master_pos
|
||||
SELECT * FROM t1;
|
||||
|
||||
--disable_query_log
|
||||
eval SET GLOBAL debug_dbug= '$debug_save';
|
||||
--enable_query_log
|
||||
|
||||
connection slave;
|
||||
# Wait until SQL thread stops with error LOST_EVENT on master
|
||||
call mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master.* 1590");
|
||||
|
353
mysql-test/suite/rpl/t/rpl_parallel.test
Normal file
353
mysql-test/suite/rpl/t/rpl_parallel.test
Normal file
@ -0,0 +1,353 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--let $rpl_topology=1->2
|
||||
--source include/rpl_init.inc
|
||||
|
||||
# Test various aspects of parallel replication.
|
||||
|
||||
--connection server_2
|
||||
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
|
||||
--error ER_SLAVE_MUST_STOP
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
--echo *** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
||||
|
||||
--connection server_1
|
||||
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a int PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
--sync_with_master
|
||||
|
||||
# Block the table t1 to simulate a replicated query taking a long time.
|
||||
--connect (con_temp1,127.0.0.1,root,,test,$SERVER_MYPORT_2,)
|
||||
LOCK TABLE t1 WRITE;
|
||||
|
||||
--connection server_1
|
||||
SET gtid_domain_id=1;
|
||||
# This query will be blocked on the slave until UNLOCK TABLES.
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SET gtid_domain_id=0;
|
||||
# These t2 queries can be replicated in parallel with the prior t1 query, as
|
||||
# they are in a separate replication domain.
|
||||
INSERT INTO t2 VALUES (2);
|
||||
INSERT INTO t2 VALUES (3);
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (4);
|
||||
INSERT INTO t2 VALUES (5);
|
||||
COMMIT;
|
||||
INSERT INTO t2 VALUES (6);
|
||||
|
||||
--connection server_2
|
||||
--let $wait_condition= SELECT COUNT(*) = 6 FROM t2
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT * FROM t2 ORDER by a;
|
||||
|
||||
--connection con_temp1
|
||||
SELECT * FROM t1;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--connection server_2
|
||||
--let $wait_condition= SELECT COUNT(*) = 2 FROM t1
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
|
||||
--echo *** Test two transactions in different domains committed in opposite order on slave but in a single group commit. ***
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_1
|
||||
# Use a stored function to inject a debug_sync into the appropriate THD.
|
||||
# The function does nothing on the master, and on the slave it injects the
|
||||
# desired debug_sync action(s).
|
||||
SET sql_log_bin=0;
|
||||
--delimiter ||
|
||||
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
||||
RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
RETURN x;
|
||||
END
|
||||
||
|
||||
--delimiter ;
|
||||
SET sql_log_bin=1;
|
||||
|
||||
SET @old_format= @@SESSION.binlog_format;
|
||||
SET binlog_format='statement';
|
||||
SET gtid_domain_id=1;
|
||||
INSERT INTO t2 VALUES (foo(10,
|
||||
'commit_before_enqueue SIGNAL ready1 WAIT_FOR cont1',
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL ready2'));
|
||||
|
||||
--connection server_2
|
||||
FLUSH LOGS;
|
||||
--source include/wait_for_binlog_checkpoint.inc
|
||||
SET sql_log_bin=0;
|
||||
--delimiter ||
|
||||
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
||||
RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
IF d1 != '' THEN
|
||||
SET debug_sync = d1;
|
||||
END IF;
|
||||
IF d2 != '' THEN
|
||||
SET debug_sync = d2;
|
||||
END IF;
|
||||
RETURN x;
|
||||
END
|
||||
||
|
||||
--delimiter ;
|
||||
SET sql_log_bin=1;
|
||||
SET @old_format=@@GLOBAL.binlog_format;
|
||||
SET GLOBAL binlog_format=statement;
|
||||
# We need to restart all parallel threads for the new global setting to
|
||||
# be copied to the session-level values.
|
||||
SET GLOBAL slave_parallel_threads=0;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
--source include/start_slave.inc
|
||||
|
||||
# First make sure the first insert is ready to commit, but not queued yet.
|
||||
SET debug_sync='now WAIT_FOR ready1';
|
||||
|
||||
--connection server_1
|
||||
SET gtid_domain_id=2;
|
||||
INSERT INTO t2 VALUES (foo(11,
|
||||
'commit_before_enqueue SIGNAL ready3 WAIT_FOR cont3',
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL ready4 WAIT_FOR cont4'));
|
||||
SET gtid_domain_id=0;
|
||||
SELECT * FROM t2 WHERE a >= 10 ORDER BY a;
|
||||
|
||||
--connection server_2
|
||||
# Now wait for the second insert to queue itself as the leader, and then
|
||||
# wait for more commits to queue up.
|
||||
SET debug_sync='now WAIT_FOR ready3';
|
||||
SET debug_sync='now SIGNAL cont3';
|
||||
SET debug_sync='now WAIT_FOR ready4';
|
||||
# Now allow the first insert to queue up to participate in group commit.
|
||||
SET debug_sync='now SIGNAL cont1';
|
||||
SET debug_sync='now WAIT_FOR ready2';
|
||||
# Finally allow the second insert to proceed and do the group commit.
|
||||
SET debug_sync='now SIGNAL cont4';
|
||||
|
||||
--let $wait_condition= SELECT COUNT(*) = 2 FROM t2 WHERE a >= 10
|
||||
--source include/wait_condition.inc
|
||||
SELECT * FROM t2 WHERE a >= 10 ORDER BY a;
|
||||
# The two INSERT transactions should have been committed in opposite order,
|
||||
# but in the same group commit (seen by precense of cid=# in the SHOW
|
||||
# BINLOG output).
|
||||
--let $binlog_file= slave-bin.000002
|
||||
--source include/show_binlog_events.inc
|
||||
FLUSH LOGS;
|
||||
--source include/wait_for_binlog_checkpoint.inc
|
||||
|
||||
# Restart all the slave parallel worker threads, to clear all debug_sync actions.
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=0;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
SET debug_sync='RESET';
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
--echo *** Test that group-committed transactions on the master can replicate in parallel on the slave. ***
|
||||
--connection server_1
|
||||
FLUSH LOGS;
|
||||
--source include/wait_for_binlog_checkpoint.inc
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
# Create some sentinel rows so that the rows inserted in parallel fall into
|
||||
# separate gaps and do not cause gap lock conflicts.
|
||||
INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7);
|
||||
--save_master_pos
|
||||
--connection server_2
|
||||
--sync_with_master
|
||||
|
||||
# We want to test that the transactions can execute out-of-order on
|
||||
# the slave, but still end up committing in-order, and in a single
|
||||
# group commit.
|
||||
#
|
||||
# The idea is to group-commit three transactions together on the master:
|
||||
# A, B, and C. On the slave, C will execute the insert first, then A,
|
||||
# and then B. But B manages to complete before A has time to commit, so
|
||||
# all three end up committing together.
|
||||
#
|
||||
# So we start by setting up some row locks that will block transactions
|
||||
# A and B from executing, allowing C to run first.
|
||||
|
||||
--connection con_temp1
|
||||
BEGIN;
|
||||
INSERT INTO t3 VALUES (2,102);
|
||||
--connect (con_temp2,127.0.0.1,root,,test,$SERVER_MYPORT_2,)
|
||||
BEGIN;
|
||||
INSERT INTO t3 VALUES (4,104);
|
||||
|
||||
# On the master, queue three INSERT transactions as a single group commit.
|
||||
--connect (con_temp3,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
|
||||
SET binlog_format=statement;
|
||||
send INSERT INTO t3 VALUES (2, foo(12,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
||||
''));
|
||||
|
||||
--connection server_1
|
||||
SET debug_sync='now WAIT_FOR master_queued1';
|
||||
|
||||
--connect (con_temp4,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
|
||||
SET binlog_format=statement;
|
||||
send INSERT INTO t3 VALUES (4, foo(14,
|
||||
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
||||
''));
|
||||
|
||||
--connection server_1
|
||||
SET debug_sync='now WAIT_FOR master_queued2';
|
||||
|
||||
--connect (con_temp5,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3';
|
||||
SET binlog_format=statement;
|
||||
send INSERT INTO t3 VALUES (6, foo(16,
|
||||
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
||||
''));
|
||||
|
||||
--connection server_1
|
||||
SET debug_sync='now WAIT_FOR master_queued3';
|
||||
SET debug_sync='now SIGNAL master_cont1';
|
||||
|
||||
--connection con_temp3
|
||||
REAP;
|
||||
--connection con_temp4
|
||||
REAP;
|
||||
--connection con_temp5
|
||||
REAP;
|
||||
|
||||
--connection server_1
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
--let $binlog_file= master-bin.000002
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
# First, wait until insert 3 is ready to queue up for group commit, but is
|
||||
# waiting for insert 2 to commit before it can do so itself.
|
||||
--connection server_2
|
||||
SET debug_sync='now WAIT_FOR slave_queued3';
|
||||
|
||||
# Next, let insert 1 proceed, and allow it to queue up as the group commit
|
||||
# leader, but let it wait for insert 2 to also queue up before proceeding.
|
||||
--connection con_temp1
|
||||
ROLLBACK;
|
||||
--connection server_2
|
||||
SET debug_sync='now WAIT_FOR slave_queued1';
|
||||
|
||||
# Now let insert 2 proceed and queue up.
|
||||
--connection con_temp2
|
||||
ROLLBACK;
|
||||
--connection server_2
|
||||
SET debug_sync='now WAIT_FOR slave_queued2';
|
||||
# And finally, we can let insert 1 proceed and do the group commit with all
|
||||
# three insert transactions together.
|
||||
SET debug_sync='now SIGNAL slave_cont1';
|
||||
|
||||
# Wait for the commit to complete and check that all three transactions
|
||||
# group-committed together (will be seen in the binlog as all three having
|
||||
# cid=# on their GTID event).
|
||||
--let $wait_condition= SELECT COUNT(*) = 3 FROM t3 WHERE a IN (2,4,6)
|
||||
--source include/wait_condition.inc
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
--let $binlog_file= slave-bin.000003
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
|
||||
--echo *** Test STOP SLAVE in parallel mode ***
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_1
|
||||
# Set up a couple of transactions. The first will be blocked halfway
|
||||
# through on a lock, and while it is blocked we initiate STOP SLAVE.
|
||||
# We then test that the halfway-initiated transaction is allowed to
|
||||
# complete, but no subsequent ones.
|
||||
# We have to use statement-based mode and set
|
||||
# binlog_direct_non_transactional_updates=0; otherwise the binlog will
|
||||
# be split into two event groups, one for the MyISAM part and one for the
|
||||
# InnoDB part.
|
||||
SET binlog_direct_non_transactional_updates=0;
|
||||
SET sql_log_bin=0;
|
||||
CALL mtr.add_suppression("Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction");
|
||||
SET sql_log_bin=1;
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (20);
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES (20);
|
||||
--disable_warnings
|
||||
INSERT INTO t2 VALUES (21);
|
||||
INSERT INTO t3 VALUES (20, 20);
|
||||
COMMIT;
|
||||
INSERT INTO t3 VALUES(21, 21);
|
||||
INSERT INTO t3 VALUES(22, 22);
|
||||
SET binlog_format=@old_format;
|
||||
--save_master_pos
|
||||
|
||||
# Start a connection that will block the replicated transaction halfway.
|
||||
--connection con_temp1
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (21);
|
||||
|
||||
--connection server_2
|
||||
START SLAVE;
|
||||
# Wait for the MyISAM change to be visible, after which replication will wait
|
||||
# for con_temp1 to roll back.
|
||||
--let $wait_condition= SELECT COUNT(*) = 1 FROM t1 WHERE a=20
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection con_temp2
|
||||
# Initiate slave stop. It will have to wait for the current event group
|
||||
# to complete.
|
||||
send STOP SLAVE;
|
||||
|
||||
--connection con_temp1
|
||||
ROLLBACK;
|
||||
|
||||
--connection con_temp2
|
||||
reap;
|
||||
|
||||
--connection server_2
|
||||
--source include/wait_for_slave_to_stop.inc
|
||||
# We should see the first transaction applied, but not the two others.
|
||||
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
||||
SELECT * FROM t2 WHERE a >= 20 ORDER BY a;
|
||||
SELECT * FROM t3 WHERE a >= 20 ORDER BY a;
|
||||
|
||||
--source include/start_slave.inc
|
||||
--sync_with_master
|
||||
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
||||
SELECT * FROM t2 WHERE a >= 20 ORDER BY a;
|
||||
SELECT * FROM t3 WHERE a >= 20 ORDER BY a;
|
||||
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL binlog_format=@old_format;
|
||||
SET GLOBAL slave_parallel_threads=0;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
|
||||
--source include/start_slave.inc
|
||||
|
||||
--connection server_1
|
||||
DROP function foo;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--source include/rpl_end.inc
|
@ -0,0 +1,13 @@
|
||||
SET @save_binlog_commit_wait_count= @@GLOBAL.binlog_commit_wait_count;
|
||||
SELECT @@GLOBAL.binlog_commit_wait_count as 'must be zero because of default';
|
||||
must be zero because of default
|
||||
0
|
||||
SELECT @@SESSION.binlog_commit_wait_count as 'no session var';
|
||||
ERROR HY000: Variable 'binlog_commit_wait_count' is a GLOBAL variable
|
||||
SET GLOBAL binlog_commit_wait_count= 0;
|
||||
SET GLOBAL binlog_commit_wait_count= DEFAULT;
|
||||
SET GLOBAL binlog_commit_wait_count= 10;
|
||||
SELECT @@GLOBAL.binlog_commit_wait_count;
|
||||
@@GLOBAL.binlog_commit_wait_count
|
||||
10
|
||||
SET GLOBAL binlog_commit_wait_count = @save_binlog_commit_wait_count;
|
@ -0,0 +1,13 @@
|
||||
SET @save_binlog_commit_wait_usec= @@GLOBAL.binlog_commit_wait_usec;
|
||||
SELECT @@GLOBAL.binlog_commit_wait_usec as 'check default';
|
||||
check default
|
||||
100000
|
||||
SELECT @@SESSION.binlog_commit_wait_usec as 'no session var';
|
||||
ERROR HY000: Variable 'binlog_commit_wait_usec' is a GLOBAL variable
|
||||
SET GLOBAL binlog_commit_wait_usec= 0;
|
||||
SET GLOBAL binlog_commit_wait_usec= DEFAULT;
|
||||
SET GLOBAL binlog_commit_wait_usec= 10000;
|
||||
SELECT @@GLOBAL.binlog_commit_wait_usec;
|
||||
@@GLOBAL.binlog_commit_wait_usec
|
||||
10000
|
||||
SET GLOBAL binlog_commit_wait_usec = @save_binlog_commit_wait_usec;
|
@ -0,0 +1,13 @@
|
||||
SET @save_slave_parallel_max_queued= @@GLOBAL.slave_parallel_max_queued;
|
||||
SELECT @@GLOBAL.slave_parallel_max_queued as 'Check default';
|
||||
Check default
|
||||
131072
|
||||
SELECT @@SESSION.slave_parallel_max_queued as 'no session var';
|
||||
ERROR HY000: Variable 'slave_parallel_max_queued' is a GLOBAL variable
|
||||
SET GLOBAL slave_parallel_max_queued= 0;
|
||||
SET GLOBAL slave_parallel_max_queued= DEFAULT;
|
||||
SET GLOBAL slave_parallel_max_queued= 65536;
|
||||
SELECT @@GLOBAL.slave_parallel_max_queued;
|
||||
@@GLOBAL.slave_parallel_max_queued
|
||||
65536
|
||||
SET GLOBAL slave_parallel_max_queued = @save_slave_parallel_max_queued;
|
@ -0,0 +1,13 @@
|
||||
SET @save_slave_parallel_threads= @@GLOBAL.slave_parallel_threads;
|
||||
SELECT @@GLOBAL.slave_parallel_threads as 'must be zero because of default';
|
||||
must be zero because of default
|
||||
0
|
||||
SELECT @@SESSION.slave_parallel_threads as 'no session var';
|
||||
ERROR HY000: Variable 'slave_parallel_threads' is a GLOBAL variable
|
||||
SET GLOBAL slave_parallel_threads= 0;
|
||||
SET GLOBAL slave_parallel_threads= DEFAULT;
|
||||
SET GLOBAL slave_parallel_threads= 10;
|
||||
SELECT @@GLOBAL.slave_parallel_threads;
|
||||
@@GLOBAL.slave_parallel_threads
|
||||
10
|
||||
SET GLOBAL slave_parallel_threads = @save_slave_parallel_threads;
|
@ -0,0 +1,14 @@
|
||||
--source include/not_embedded.inc
|
||||
|
||||
SET @save_binlog_commit_wait_count= @@GLOBAL.binlog_commit_wait_count;
|
||||
|
||||
SELECT @@GLOBAL.binlog_commit_wait_count as 'must be zero because of default';
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SELECT @@SESSION.binlog_commit_wait_count as 'no session var';
|
||||
|
||||
SET GLOBAL binlog_commit_wait_count= 0;
|
||||
SET GLOBAL binlog_commit_wait_count= DEFAULT;
|
||||
SET GLOBAL binlog_commit_wait_count= 10;
|
||||
SELECT @@GLOBAL.binlog_commit_wait_count;
|
||||
|
||||
SET GLOBAL binlog_commit_wait_count = @save_binlog_commit_wait_count;
|
@ -0,0 +1,14 @@
|
||||
--source include/not_embedded.inc
|
||||
|
||||
SET @save_binlog_commit_wait_usec= @@GLOBAL.binlog_commit_wait_usec;
|
||||
|
||||
SELECT @@GLOBAL.binlog_commit_wait_usec as 'check default';
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SELECT @@SESSION.binlog_commit_wait_usec as 'no session var';
|
||||
|
||||
SET GLOBAL binlog_commit_wait_usec= 0;
|
||||
SET GLOBAL binlog_commit_wait_usec= DEFAULT;
|
||||
SET GLOBAL binlog_commit_wait_usec= 10000;
|
||||
SELECT @@GLOBAL.binlog_commit_wait_usec;
|
||||
|
||||
SET GLOBAL binlog_commit_wait_usec = @save_binlog_commit_wait_usec;
|
@ -0,0 +1,14 @@
|
||||
--source include/not_embedded.inc
|
||||
|
||||
SET @save_slave_parallel_max_queued= @@GLOBAL.slave_parallel_max_queued;
|
||||
|
||||
SELECT @@GLOBAL.slave_parallel_max_queued as 'Check default';
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SELECT @@SESSION.slave_parallel_max_queued as 'no session var';
|
||||
|
||||
SET GLOBAL slave_parallel_max_queued= 0;
|
||||
SET GLOBAL slave_parallel_max_queued= DEFAULT;
|
||||
SET GLOBAL slave_parallel_max_queued= 65536;
|
||||
SELECT @@GLOBAL.slave_parallel_max_queued;
|
||||
|
||||
SET GLOBAL slave_parallel_max_queued = @save_slave_parallel_max_queued;
|
@ -0,0 +1,14 @@
|
||||
--source include/not_embedded.inc
|
||||
|
||||
SET @save_slave_parallel_threads= @@GLOBAL.slave_parallel_threads;
|
||||
|
||||
SELECT @@GLOBAL.slave_parallel_threads as 'must be zero because of default';
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SELECT @@SESSION.slave_parallel_threads as 'no session var';
|
||||
|
||||
SET GLOBAL slave_parallel_threads= 0;
|
||||
SET GLOBAL slave_parallel_threads= DEFAULT;
|
||||
SET GLOBAL slave_parallel_threads= 10;
|
||||
SELECT @@GLOBAL.slave_parallel_threads;
|
||||
|
||||
SET GLOBAL slave_parallel_threads = @save_slave_parallel_threads;
|
Reference in New Issue
Block a user