mariadb/mysql-test/suite
Marko Mäkelä 0ba6aaf030 MDEV-11415 Remove excessive undo logging during ALTER TABLE…ALGORITHM=COPY
If a crash occurs during ALTER TABLE…ALGORITHM=COPY, InnoDB would spend
a lot of time rolling back writes to the intermediate copy of the table.
To reduce the amount of busy work done, a work-around was introduced in
commit fd069e2bb3 in MySQL 4.1.8 and 5.0.2,
to commit the transaction after every 10,000 inserted rows.

A proper fix would have been to disable the undo logging altogether and
to simply drop the intermediate copy of the table on subsequent server
startup. This is what happens in MariaDB 10.3 with MDEV-14717,MDEV-14585.
In MariaDB 10.2, the intermediate copy of the table would be left behind
with a name starting with the string #sql.

This is a backport of a bug fix from MySQL 8.0.0 to MariaDB,
contributed by jixianliang <271365745@qq.com>.

Unlike recent MySQL, MariaDB supports ALTER IGNORE. For that operation
InnoDB must for now keep the undo logging enabled, so that the latest
row can be rolled back in case of an error.

In Galera cluster, the LOAD DATA statement will retain the existing
behaviour and commit the transaction after every 10,000 rows if
the parameter wsrep_load_data_splitting=ON is set. The logic to do
so (the wsrep_load_data_split() function and the call
handler::extra(HA_EXTRA_FAKE_START_STMT)) are joint work
by Ji Xianliang and Marko Mäkelä.

The original fix:

Author: Thirunarayanan Balathandayuthapani <thirunarayanan.balathandayuth@oracle.com>
Date:   Wed Dec 2 16:09:15 2015 +0530

Bug#17479594 AVOID INTERMEDIATE COMMIT WHILE DOING ALTER TABLE ALGORITHM=COPY

Problem:

During ALTER TABLE, we commit and restart the transaction for every
10,000 rows, so that the rollback after recovery would not take so long.

Fix:

Suppress the undo logging during copy alter operation. If fts_index is
present then insert directly into fts auxiliary table rather
than doing at commit time.

ha_innobase::num_write_row: Remove the variable.

ha_innobase::write_row(): Remove the hack for committing every 10000 rows.

row_lock_table_for_mysql(): Remove the extra 2 parameters.

lock_get_src_table(), lock_is_table_exclusive(): Remove.

Reviewed-by: Marko Mäkelä <marko.makela@oracle.com>
Reviewed-by: Shaohua Wang <shaohua.wang@oracle.com>
Reviewed-by: Jon Olav Hauglid <jon.hauglid@oracle.com>
2018-01-30 20:24:23 +02:00
..
archive Merge branch '10.1' into 10.2 2017-08-17 11:38:34 +02:00
binlog Merge branch '10.1' into 10.2 2017-11-21 19:47:46 +01:00
binlog_encryption search_pattern_in_file.inc changes 2017-03-31 19:28:58 +02:00
csv Merge 10.1 into 10.2 2017-05-22 09:46:51 +03:00
encryption MDEV-14909 MariaDB 10.2 refuses to start up after clean shutdown of MariaDB 10.3 2018-01-10 13:18:02 +02:00
engines Merge branch '10.1' into 10.2 2017-09-22 02:27:00 +02:00
federated MDEV-14272 Mariadb crashes with signal 11 when using federatedx engine and galera 2017-12-28 02:13:25 +01:00
funcs_1 un-disable a bunch of funcs_1 tests 2017-08-14 19:45:59 +02:00
funcs_2 Merge branch 'bb-10.2-serg-merge' into 10.2 2017-02-11 09:45:34 +01:00
galera Fix some wrong test result 2018-01-30 14:56:33 +02:00
galera_3nodes Merge remote-tracking branch 'origin/10.1' into bb-10.2-vicentiu 2017-12-28 19:27:00 +02:00
gcol MDEV-13568 gcol.innodb_virtual_debug_purge failed in buildbot with wrong result 2018-01-03 11:39:17 +02:00
handler
heap MDEV-7635: Update tests to adapt to the new default sql_mode 2017-02-10 06:30:42 -05:00
innodb MDEV-11415 Remove excessive undo logging during ALTER TABLE…ALGORITHM=COPY 2018-01-30 20:24:23 +02:00
innodb_fts Adjust the innodb_fts.sync and innodb_fts.sync_block tests for MariaDB 2017-10-27 10:36:20 +03:00
innodb_gis MDEV-14209 innodb_gis.rtree_debug produces huge server error logs 2018-01-29 23:02:12 +02:00
innodb_undo Adapt the innodb_undo tests from MySQL 5.7 2017-04-26 23:03:28 +03:00
innodb_zip MDEV-13626: Merge InnoDB test cases from MySQL 5.7 (part 6) 2018-01-15 15:40:28 +02:00
jp MDEV-7635: Update tests to adapt to the new default sql_mode 2017-02-10 06:30:42 -05:00
json MDEV-13324 JSON_SET returns NULL instead of object. 2017-09-12 14:40:18 +04:00
large_tests MDEV-11002 large_tests.rpl_slave_net_timeout fails due to connection logging 2017-06-21 21:07:20 +03:00
maria Fixed MDEV-14326 engine ARIA with row_format=FIXED is broken 2018-01-18 15:19:32 +02:00
mariabackup Merge 10.1 into 10.2 2018-01-11 12:05:57 +02:00
mtr/t
mtr2
multi_source MDEV-9544 Fix test case for 10.2 2017-06-10 12:57:59 +05:30
optimizer_unfixed_bugs MDEV-7635: Update tests to adapt to the new default sql_mode 2017-02-10 06:30:42 -05:00
parts Disable warnings in partion_alter_myisam 2018-01-01 19:38:58 +02:00
percona
perfschema Merge 10.1 to 10.2 2017-12-19 16:48:28 +02:00
perfschema_stress
plugins Merge remote-tracking branch 'origin/10.1' into 10.2 2017-12-22 12:23:39 +02:00
roles Merge remote-tracking branch 'origin/10.1' into 10.2 2017-12-22 12:23:39 +02:00
rpl MDEV-14721 Big transaction events get lost on semisync master when 2018-01-27 14:35:54 +02:00
storage_engine MDEV-14607 storage_engine-rocksdb.type_bit_indexes fails after latest pushes 2017-12-13 00:29:44 +02:00
stress
sys_vars MDEV-14130 InnoDB messages should not refer to the MySQL 5.7 manual 2018-01-10 13:53:44 +02:00
unit update libmariadb, enable C/C unit tests 2017-03-30 09:27:03 +02:00
vcol Ensure that table->vcol_set is properly restored if used 2018-01-01 14:44:20 +02:00
wsrep Merge 10.1 into 10.2 2017-08-31 09:30:40 +03:00