From 14685b10dffb8dd6045b7b4cceab05301606f5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 25 Oct 2023 09:11:58 +0300 Subject: [PATCH] MDEV-32050: Deprecate&ignore innodb_purge_rseg_truncate_frequency The motivation of introducing the parameter innodb_purge_rseg_truncate_frequency in mysql/mysql-server@28bbd66ea5f6acf80fcb381057bb7ca5b7b188d2 and mysql/mysql-server@8fc2120fed11d2498ecb3635d87f414c76985fce seems to have been to avoid stalls due to freeing undo log pages or truncating undo log tablespaces. In MariaDB Server, innodb_undo_log_truncate=ON should be a much lighter operation than in MySQL, because it will not involve any log checkpoint. Another source of performance stalls should be trx_purge_truncate_rseg_history(), which is shrinking the history list by freeing the undo log pages whose undo records have been purged. To alleviate that, we will introduce a purge_truncation_task that will offload this from the purge_coordinator_task. In that way, the next innodb_purge_batch_size pages may be parsed and purged while the pages from the previous batch are being freed and the history list being shrunk. The processing of innodb_undo_log_truncate=ON will still remain the responsibility of the purge_coordinator_task. purge_coordinator_state::count: Remove. We will ignore innodb_purge_rseg_truncate_frequency, and act as if it had been set to 1 (the maximum shrinking frequency). purge_coordinator_state::do_purge(): Invoke an asynchronous task purge_truncation_callback() to free the undo log pages. purge_sys_t::iterator::free_history(): Free those undo log pages that have been processed. This used to be a part of trx_purge_truncate_history(). purge_sys_t::clone_end_view(): Take a new value of purge_sys.head as a parameter, so that it will be updated while holding exclusive purge_sys.latch. This is needed for race-free access to the field in purge_truncation_callback(). Reviewed by: Vladislav Lesin --- extra/mariabackup/xtrabackup.cc | 4 +- .../encryption/t/innodb-bad-key-change.opt | 1 - .../encryption/t/innodb-bad-key-change2.opt | 1 - .../encryption/t/innodb-bad-key-change4.opt | 1 - .../encryption/t/innodb-compressed-blob.opt | 1 - .../t/innodb-encryption-disable.opt | 1 - .../encryption/t/innodb-force-corrupt.opt | 1 - .../suite/encryption/t/innodb-missing-key.opt | 1 - .../suite/encryption/t/innodb-redo-badkey.opt | 1 - .../suite/gcol/r/gcol_partition_innodb.result | 3 - mysql-test/suite/gcol/r/gcol_purge.result | 3 - mysql-test/suite/gcol/r/gcol_update.result | 3 - .../gcol/r/innodb_virtual_debug_purge.result | 3 - .../suite/gcol/r/innodb_virtual_index.result | 3 - .../suite/gcol/r/innodb_virtual_purge.result | 3 - .../suite/gcol/t/gcol_partition_innodb.test | 3 - mysql-test/suite/gcol/t/gcol_purge.test | 3 - mysql-test/suite/gcol/t/gcol_update.test | 5 -- .../gcol/t/innodb_virtual_debug_purge.test | 3 - .../suite/gcol/t/innodb_virtual_index.test | 5 -- .../suite/gcol/t/innodb_virtual_purge.test | 5 -- .../suite/innodb/include/wait_all_purged.inc | 1 - mysql-test/suite/innodb/r/alter_kill.result | 1 - .../innodb/r/cursor-restore-locking.result | 3 - mysql-test/suite/innodb/r/dml_purge.result | 4 - mysql-test/suite/innodb/r/foreign_key.result | 6 -- .../suite/innodb/r/gap_lock_split.result | 3 - .../innodb/r/index_merge_threshold.result | 3 - mysql-test/suite/innodb/r/innodb-16k.result | 3 - mysql-test/suite/innodb/r/innodb-32k.result | 1 - .../innodb/r/innodb-system-table-view.result | 3 - .../suite/innodb/r/innodb_bug14147491.result | 1 - .../suite/innodb/r/innodb_bug84958.result | 3 - .../innodb/r/innodb_stats_persistent.result | 3 - .../suite/innodb/r/instant_alter,4k.rdiff | 3 +- .../suite/innodb/r/instant_alter.result | 3 - .../suite/innodb/r/instant_alter_bugs.result | 5 -- .../suite/innodb/r/instant_alter_crash.result | 4 - .../suite/innodb/r/instant_alter_debug.result | 3 - .../r/instant_alter_purge,release.rdiff | 3 +- .../suite/innodb/r/instant_alter_purge.result | 3 - .../innodb/r/instant_alter_rollback.result | 3 - .../innodb/r/page_id_innochecksum.result | 1 - mysql-test/suite/innodb/r/purge.result | 3 - .../suite/innodb/r/purge_secondary.result | 3 - mysql-test/suite/innodb/r/scrub.result | 1 - mysql-test/suite/innodb/r/scrub_debug.result | 3 - .../suite/innodb/r/truncate_crash.result | 3 - .../suite/innodb/r/trx_id_future.result | 1 - mysql-test/suite/innodb/r/undo_log.result | 3 - .../suite/innodb/r/undo_space_dblwr.result | 1 - .../suite/innodb/r/undo_truncate.result | 2 - .../innodb/r/undo_truncate_recover.result | 1 - mysql-test/suite/innodb/t/alter_kill.test | 1 - .../innodb/t/cursor-restore-locking.test | 3 - mysql-test/suite/innodb/t/dml_purge.test | 5 -- mysql-test/suite/innodb/t/foreign_key.test | 8 -- mysql-test/suite/innodb/t/gap_lock_split.test | 4 - .../suite/innodb/t/index_merge_threshold.test | 4 - mysql-test/suite/innodb/t/innodb-16k.test | 3 - mysql-test/suite/innodb/t/innodb-32k.test | 2 - .../innodb/t/innodb-system-table-view.test | 3 - .../suite/innodb/t/innodb_bug14147491.test | 1 - .../suite/innodb/t/innodb_bug84958.test | 3 - .../innodb/t/innodb_stats_persistent.test | 3 - mysql-test/suite/innodb/t/instant_alter.test | 3 - .../suite/innodb/t/instant_alter_bugs.test | 7 -- .../suite/innodb/t/instant_alter_crash.test | 6 -- .../suite/innodb/t/instant_alter_debug.test | 5 -- .../suite/innodb/t/instant_alter_purge.test | 3 - .../innodb/t/instant_alter_rollback.test | 3 - .../suite/innodb/t/page_id_innochecksum.test | 1 - mysql-test/suite/innodb/t/purge.test | 4 - .../suite/innodb/t/purge_secondary.test | 6 -- mysql-test/suite/innodb/t/scrub.test | 1 - mysql-test/suite/innodb/t/scrub_debug.test | 3 - mysql-test/suite/innodb/t/table_flags.test | 1 - mysql-test/suite/innodb/t/truncate_crash.test | 3 - mysql-test/suite/innodb/t/trx_id_future.test | 1 - mysql-test/suite/innodb/t/undo_log.test | 3 - .../suite/innodb/t/undo_space_dblwr.test | 1 - mysql-test/suite/innodb/t/undo_truncate.test | 2 - .../suite/innodb/t/undo_truncate_recover.test | 1 - .../suite/innodb_fts/r/crash_recovery.result | 3 - .../suite/innodb_fts/t/crash_recovery.test | 4 - .../suite/innodb_gis/r/rtree_add_index.result | 3 - .../suite/innodb_gis/r/rtree_compress.result | 3 - .../suite/innodb_gis/r/rtree_purge.result | 3 - .../suite/innodb_gis/r/rtree_undo.result | 3 - .../suite/innodb_gis/t/rtree_add_index.test | 4 - .../suite/innodb_gis/t/rtree_compress.test | 4 - .../suite/innodb_gis/t/rtree_purge.test | 4 - mysql-test/suite/innodb_gis/t/rtree_undo.test | 5 -- mysql-test/suite/innodb_zip/r/blob.result | 3 - mysql-test/suite/innodb_zip/t/blob.test | 4 - .../unencrypted_page_compressed.result | 1 - .../unencrypted_page_compressed.test | 1 - ...purge_rseg_truncate_frequency_basic.result | 19 +++++ .../sys_vars/r/sysvars_innodb,32bit.rdiff | 2 +- .../suite/sys_vars/r/sysvars_innodb.result | 2 +- .../suite/versioning/r/delete_history.result | 3 - .../suite/versioning/t/delete_history.test | 5 -- storage/innobase/handler/ha_innodb.cc | 5 +- storage/innobase/include/trx0purge.h | 11 ++- storage/innobase/srv/srv0srv.cc | 23 +++++- storage/innobase/trx/trx0purge.cc | 82 +++++++++++-------- storage/innobase/trx/trx0undo.cc | 4 +- 107 files changed, 102 insertions(+), 331 deletions(-) diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index 6e31d6034e9..ef63f914343 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -1868,7 +1868,7 @@ static int prepare_export() IF_WIN("\"","") "\"%s\" --mysqld \"%s\"" " --defaults-extra-file=./backup-my.cnf --defaults-group-suffix=%s --datadir=." " --innodb --innodb-fast-shutdown=0 --loose-partition" - " --innodb_purge_rseg_truncate_frequency=1 --innodb-buffer-pool-size=%llu" + " --innodb-buffer-pool-size=%llu" " --console --skip-log-error --skip-log-bin --bootstrap %s< " BOOTSTRAP_FILENAME IF_WIN("\"",""), mariabackup_exe, @@ -1882,7 +1882,7 @@ static int prepare_export() IF_WIN("\"","") "\"%s\" --mysqld" " --defaults-file=./backup-my.cnf --defaults-group-suffix=%s --datadir=." " --innodb --innodb-fast-shutdown=0 --loose-partition" - " --innodb_purge_rseg_truncate_frequency=1 --innodb-buffer-pool-size=%llu" + " --innodb-buffer-pool-size=%llu" " --console --log-error= --skip-log-bin --bootstrap %s< " BOOTSTRAP_FILENAME IF_WIN("\"",""), mariabackup_exe, diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change.opt b/mysql-test/suite/encryption/t/innodb-bad-key-change.opt index d3f298d3335..d14f3bcbe59 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change.opt +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change.opt @@ -1,2 +1 @@ ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change2.opt b/mysql-test/suite/encryption/t/innodb-bad-key-change2.opt index d3f298d3335..d14f3bcbe59 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change2.opt +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change2.opt @@ -1,2 +1 @@ ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change4.opt b/mysql-test/suite/encryption/t/innodb-bad-key-change4.opt index d20d3b60913..ce4c31a5b34 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change4.opt +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change4.opt @@ -2,5 +2,4 @@ --loose-innodb-buffer-page --loose-innodb-buffer-page-lru --innodb-defragment=1 ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-compressed-blob.opt b/mysql-test/suite/encryption/t/innodb-compressed-blob.opt index 061212b3034..f44dcb1ef80 100644 --- a/mysql-test/suite/encryption/t/innodb-compressed-blob.opt +++ b/mysql-test/suite/encryption/t/innodb-compressed-blob.opt @@ -2,5 +2,4 @@ --innodb-tablespaces-encryption --innodb-encrypt-tables=on --innodb-encryption-threads=4 ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-encryption-disable.opt b/mysql-test/suite/encryption/t/innodb-encryption-disable.opt index d3f298d3335..d14f3bcbe59 100644 --- a/mysql-test/suite/encryption/t/innodb-encryption-disable.opt +++ b/mysql-test/suite/encryption/t/innodb-encryption-disable.opt @@ -1,2 +1 @@ ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-force-corrupt.opt b/mysql-test/suite/encryption/t/innodb-force-corrupt.opt index d3f298d3335..d14f3bcbe59 100644 --- a/mysql-test/suite/encryption/t/innodb-force-corrupt.opt +++ b/mysql-test/suite/encryption/t/innodb-force-corrupt.opt @@ -1,2 +1 @@ ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-missing-key.opt b/mysql-test/suite/encryption/t/innodb-missing-key.opt index 5e144bc2d3c..6a8ee144418 100644 --- a/mysql-test/suite/encryption/t/innodb-missing-key.opt +++ b/mysql-test/suite/encryption/t/innodb-missing-key.opt @@ -2,5 +2,4 @@ --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 --innodb-tablespaces-encryption ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/encryption/t/innodb-redo-badkey.opt b/mysql-test/suite/encryption/t/innodb-redo-badkey.opt index 2de0bdb3241..0efdc8a705d 100644 --- a/mysql-test/suite/encryption/t/innodb-redo-badkey.opt +++ b/mysql-test/suite/encryption/t/innodb-redo-badkey.opt @@ -3,5 +3,4 @@ --innodb-tablespaces-encryption --innodb-encryption-threads=2 --innodb-default-encryption-key-id=4 ---innodb-purge-rseg-truncate-frequency=1 --skip-innodb-fast-shutdown diff --git a/mysql-test/suite/gcol/r/gcol_partition_innodb.result b/mysql-test/suite/gcol/r/gcol_partition_innodb.result index e61c0a26417..2bff33054a2 100644 --- a/mysql-test/suite/gcol/r/gcol_partition_innodb.result +++ b/mysql-test/suite/gcol/r/gcol_partition_innodb.result @@ -1,6 +1,4 @@ SET @@session.default_storage_engine = 'InnoDB'; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; drop table if exists t1; # Case 1. Partitioning by RANGE based on a non-stored generated column. CREATE TABLE t1 ( @@ -135,4 +133,3 @@ DROP FUNCTION IF EXISTS f1; DROP TRIGGER IF EXISTS trg1; DROP TRIGGER IF EXISTS trg2; set sql_warnings = 0; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/gcol/r/gcol_purge.result b/mysql-test/suite/gcol/r/gcol_purge.result index a130485f219..e16cf0dff54 100644 --- a/mysql-test/suite/gcol/r/gcol_purge.result +++ b/mysql-test/suite/gcol/r/gcol_purge.result @@ -1,6 +1,4 @@ -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; SET @save_dbug=@@GLOBAL.debug_dbug; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE t1(f1 INT NOT NULL, f2 int not null, f3 int generated always as (f2 * 2) VIRTUAL, primary key(f1), INDEX (f3))ENGINE=InnoDB; @@ -22,6 +20,5 @@ commit; disconnect con1; disconnect con2; connection default; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; SET GLOBAL debug_dbug=@save_dbug; DROP TABLE t1; diff --git a/mysql-test/suite/gcol/r/gcol_update.result b/mysql-test/suite/gcol/r/gcol_update.result index 720ff533bac..35e0b3e8219 100644 --- a/mysql-test/suite/gcol/r/gcol_update.result +++ b/mysql-test/suite/gcol/r/gcol_update.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; connect purge_control,localhost,root; START TRANSACTION WITH CONSISTENT SNAPSHOT; connection default; @@ -39,4 +37,3 @@ InnoDB 0 transactions not purged disconnect purge_control; connection default; drop table t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result b/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result index 89711a2d8bb..63ea5b1d418 100644 --- a/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result +++ b/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result @@ -1,7 +1,5 @@ set default_storage_engine=innodb; set @old_dbug=@@global.debug_dbug; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET @saved_stats_persistent = @@GLOBAL.innodb_stats_persistent; SET GLOBAL innodb_stats_persistent = OFF; CREATE TABLE `t` ( @@ -204,5 +202,4 @@ disconnect truncate; connection default; DROP TABLE t1, t2; set debug_sync=reset; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; SET GLOBAL innodb_stats_persistent = @saved_stats_persistent; diff --git a/mysql-test/suite/gcol/r/innodb_virtual_index.result b/mysql-test/suite/gcol/r/innodb_virtual_index.result index b0c29da2f22..637d142b4cd 100644 --- a/mysql-test/suite/gcol/r/innodb_virtual_index.result +++ b/mysql-test/suite/gcol/r/innodb_virtual_index.result @@ -1,6 +1,4 @@ SET default_storage_engine= innodb; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; # # Bug 21922176 - PREBUILT->SEARCH_TUPLE CREATED WITHOUT INCLUDING # THE NUMBER OF VIRTUAL COLUMNS @@ -194,7 +192,6 @@ ALTER TABLE t1 ADD COLUMN col7a INT GENERATED ALWAYS AS (col1 % col2) VIRTUAL, ADD UNIQUE index idx (col1), algorithm=inplace; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions. Try ALGORITHM=COPY DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; # # Bug 27122803 - BACKPORT FIX FOR BUG 25899959 TO MYSQL-5.7 # diff --git a/mysql-test/suite/gcol/r/innodb_virtual_purge.result b/mysql-test/suite/gcol/r/innodb_virtual_purge.result index 1fcbd05f354..7951bd0ee6b 100644 --- a/mysql-test/suite/gcol/r/innodb_virtual_purge.result +++ b/mysql-test/suite/gcol/r/innodb_virtual_purge.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; # # Bug#21869656 UNDO LOG DOES NOT CONTAIN ENOUGH INFORMATION # ON INDEXED VIRTUAL COLUMNS @@ -173,4 +171,3 @@ CHECK TABLE t EXTENDED; Table Op Msg_type Msg_text test.t check status OK DROP TABLE t; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/gcol/t/gcol_partition_innodb.test b/mysql-test/suite/gcol/t/gcol_partition_innodb.test index 75e2f80af20..a8765970749 100644 --- a/mysql-test/suite/gcol/t/gcol_partition_innodb.test +++ b/mysql-test/suite/gcol/t/gcol_partition_innodb.test @@ -30,8 +30,6 @@ # Set the session storage engine --source include/have_innodb.inc eval SET @@session.default_storage_engine = 'InnoDB'; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; ##### Workarounds for known open engine specific bugs # none @@ -63,4 +61,3 @@ DROP TABLE t1; #------------------------------------------------------------------------------# # Cleanup --source suite/gcol/inc/gcol_cleanup.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/gcol/t/gcol_purge.test b/mysql-test/suite/gcol/t/gcol_purge.test index 8fff375cdc2..cfe20c4ad25 100644 --- a/mysql-test/suite/gcol/t/gcol_purge.test +++ b/mysql-test/suite/gcol/t/gcol_purge.test @@ -1,9 +1,7 @@ --source include/have_innodb.inc --source include/have_debug.inc -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; SET @save_dbug=@@GLOBAL.debug_dbug; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE t1(f1 INT NOT NULL, f2 int not null, f3 int generated always as (f2 * 2) VIRTUAL, primary key(f1), INDEX (f3))ENGINE=InnoDB; @@ -31,6 +29,5 @@ commit; disconnect con1; disconnect con2; connection default; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; SET GLOBAL debug_dbug=@save_dbug; DROP TABLE t1; diff --git a/mysql-test/suite/gcol/t/gcol_update.test b/mysql-test/suite/gcol/t/gcol_update.test index 8652ce7a638..2076632f28e 100644 --- a/mysql-test/suite/gcol/t/gcol_update.test +++ b/mysql-test/suite/gcol/t/gcol_update.test @@ -1,8 +1,5 @@ --source include/have_innodb.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - connect (purge_control,localhost,root); START TRANSACTION WITH CONSISTENT SNAPSHOT; @@ -63,5 +60,3 @@ disconnect purge_control; connection default; drop table t1; - -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test b/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test index da49a5b6b43..09fba0285c7 100644 --- a/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test +++ b/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test @@ -6,8 +6,6 @@ set default_storage_engine=innodb; set @old_dbug=@@global.debug_dbug; # Ensure that the history list length will actually be decremented by purge. -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET @saved_stats_persistent = @@GLOBAL.innodb_stats_persistent; SET GLOBAL innodb_stats_persistent = OFF; @@ -267,5 +265,4 @@ DROP TABLE t1, t2; --source include/wait_until_count_sessions.inc set debug_sync=reset; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; SET GLOBAL innodb_stats_persistent = @saved_stats_persistent; diff --git a/mysql-test/suite/gcol/t/innodb_virtual_index.test b/mysql-test/suite/gcol/t/innodb_virtual_index.test index d0e1951842e..83d9a6bdae5 100644 --- a/mysql-test/suite/gcol/t/innodb_virtual_index.test +++ b/mysql-test/suite/gcol/t/innodb_virtual_index.test @@ -3,10 +3,6 @@ SET default_storage_engine= innodb; -# Ensure that the history list length will actually be decremented by purge. -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - --echo # --echo # Bug 21922176 - PREBUILT->SEARCH_TUPLE CREATED WITHOUT INCLUDING --echo # THE NUMBER OF VIRTUAL COLUMNS @@ -226,7 +222,6 @@ ALTER TABLE t1 ADD COLUMN col7a INT GENERATED ALWAYS AS (col1 % col2) VIRTUAL, ADD UNIQUE index idx (col1), algorithm=inplace; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; --echo # --echo # Bug 27122803 - BACKPORT FIX FOR BUG 25899959 TO MYSQL-5.7 diff --git a/mysql-test/suite/gcol/t/innodb_virtual_purge.test b/mysql-test/suite/gcol/t/innodb_virtual_purge.test index 3db1b8757ff..99c7267c88b 100644 --- a/mysql-test/suite/gcol/t/innodb_virtual_purge.test +++ b/mysql-test/suite/gcol/t/innodb_virtual_purge.test @@ -1,10 +1,6 @@ --source include/have_innodb.inc --source include/count_sessions.inc -# Ensure that the history list length will actually be decremented by purge. -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - --echo # --echo # Bug#21869656 UNDO LOG DOES NOT CONTAIN ENOUGH INFORMATION --echo # ON INDEXED VIRTUAL COLUMNS @@ -187,4 +183,3 @@ CHECK TABLE t EXTENDED; DROP TABLE t; --source include/wait_until_count_sessions.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/include/wait_all_purged.inc b/mysql-test/suite/innodb/include/wait_all_purged.inc index e3a506c7622..e374a7c09f3 100644 --- a/mysql-test/suite/innodb/include/wait_all_purged.inc +++ b/mysql-test/suite/innodb/include/wait_all_purged.inc @@ -1,5 +1,4 @@ # Wait for everything to be purged. -# The user should have set innodb_purge_rseg_truncate_frequency=1. --disable_query_log if (!$wait_all_purged) diff --git a/mysql-test/suite/innodb/r/alter_kill.result b/mysql-test/suite/innodb/r/alter_kill.result index 36b582c6d76..ef13e996703 100644 --- a/mysql-test/suite/innodb/r/alter_kill.result +++ b/mysql-test/suite/innodb/r/alter_kill.result @@ -2,7 +2,6 @@ # Bug#16720368 INNODB CRASHES ON BROKEN #SQL*.IBD FILE AT STARTUP # SET GLOBAL innodb_file_per_table=1; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE bug16720368_1 (a INT PRIMARY KEY) ENGINE=InnoDB; connect con1,localhost,root; CREATE TABLE bug16720368 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; diff --git a/mysql-test/suite/innodb/r/cursor-restore-locking.result b/mysql-test/suite/innodb/r/cursor-restore-locking.result index 6259cfd58ca..d834146e44e 100644 --- a/mysql-test/suite/innodb/r/cursor-restore-locking.result +++ b/mysql-test/suite/innodb/r/cursor-restore-locking.result @@ -1,5 +1,3 @@ -SET @save_freq=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE t (a int PRIMARY KEY, b int NOT NULL UNIQUE) engine = InnoDB, STATS_PERSISTENT=0; InnoDB 0 transactions not purged connect prevent_purge,localhost,root,,; @@ -40,4 +38,3 @@ disconnect con_del_2; connection default; SET DEBUG_SYNC = 'RESET'; DROP TABLE t; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_freq; diff --git a/mysql-test/suite/innodb/r/dml_purge.result b/mysql-test/suite/innodb/r/dml_purge.result index 75a5f0fec6c..2b345089f8f 100644 --- a/mysql-test/suite/innodb/r/dml_purge.result +++ b/mysql-test/suite/innodb/r/dml_purge.result @@ -1,10 +1,7 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; # # MDEV-12288 Reset DB_TRX_ID when the history is removed, # to speed up MVCC # -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t1(a INT PRIMARY KEY, b INT NOT NULL) ROW_FORMAT=REDUNDANT ENGINE=InnoDB; InnoDB 0 transactions not purged @@ -49,4 +46,3 @@ a b c 1 2 NULL 3 -3 NULL DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/foreign_key.result b/mysql-test/suite/innodb/r/foreign_key.result index a439f6d7981..d2cb413eba2 100644 --- a/mysql-test/suite/innodb/r/foreign_key.result +++ b/mysql-test/suite/innodb/r/foreign_key.result @@ -165,8 +165,6 @@ ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fail ALTER TABLE child FORCE; DELETE FROM parent; DROP TABLE child,parent; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SELECT unique_constraint_name FROM information_schema.referential_constraints WHERE table_name = 't2'; unique_constraint_name @@ -730,7 +728,6 @@ CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; # # MDEV-17187 table doesn't exist in engine after ALTER other tables # with CONSTRAINTs @@ -1034,8 +1031,6 @@ DROP TABLE IF EXISTS t2, t1; # # MDEV-30531 Corrupt index(es) on busy table when using FOREIGN KEY # -SET @freq=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE collections ( id int(11) unsigned NOT NULL AUTO_INCREMENT, collectionhash varchar(255) NOT NULL DEFAULT '0', @@ -1061,7 +1056,6 @@ CHECK TABLE binaries, collections EXTENDED; Table Op Msg_type Msg_text test.binaries check status OK test.collections check status OK -SET GLOBAL innodb_purge_rseg_truncate_frequency=@freq; disconnect con1; DROP TABLE binaries, collections; # End of 10.6 tests diff --git a/mysql-test/suite/innodb/r/gap_lock_split.result b/mysql-test/suite/innodb/r/gap_lock_split.result index 7c10d8eed94..e607eda3dc9 100644 --- a/mysql-test/suite/innodb/r/gap_lock_split.result +++ b/mysql-test/suite/innodb/r/gap_lock_split.result @@ -1,5 +1,3 @@ -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE t1(id INT PRIMARY key, val VARCHAR(16000)) ENGINE=InnoDB STATS_PERSISTENT=0; INSERT INTO t1 (id,val) SELECT 2*seq,'x' FROM seq_0_to_1023; @@ -29,4 +27,3 @@ disconnect con1; connection default; COMMIT; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; diff --git a/mysql-test/suite/innodb/r/index_merge_threshold.result b/mysql-test/suite/innodb/r/index_merge_threshold.result index 989d31e90b1..41897b80a4e 100644 --- a/mysql-test/suite/innodb/r/index_merge_threshold.result +++ b/mysql-test/suite/innodb/r/index_merge_threshold.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE tab(a BIGINT PRIMARY KEY,c1 TINYTEXT,c2 TEXT,c3 MEDIUMTEXT, c4 TINYBLOB,c5 BLOB,c6 MEDIUMBLOB,c7 LONGBLOB) ENGINE=InnoDB; CREATE INDEX index1 ON tab(c1(255)) COMMENT 'Check index level merge MERGE_THRESHOLD=51'; @@ -1309,4 +1307,3 @@ name count_reset index_page_merge_attempts 2 index_page_merge_successful 2 DROP TABLE tab1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/innodb-16k.result b/mysql-test/suite/innodb/r/innodb-16k.result index d46bea183c9..3d62a2f802c 100644 --- a/mysql-test/suite/innodb/r/innodb-16k.result +++ b/mysql-test/suite/innodb/r/innodb-16k.result @@ -9,9 +9,7 @@ variable_value # Each row format has its own amount of overhead that # varies depending on number of fields and other overhead. SET SESSION innodb_strict_mode = ON; -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; SET @save_level=@@GLOBAL.innodb_compression_level; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET GLOBAL innodb_compression_level=1; CREATE TABLE t1 ( c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200), @@ -506,7 +504,6 @@ ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII; INSERT INTO t1 VALUES(REPEAT('A',512)),(REPEAT('B',512)); DROP TABLE t1; InnoDB 0 transactions not purged -SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; SET GLOBAL innodb_compression_level=@save_level; DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge; DROP TABLE tlong; diff --git a/mysql-test/suite/innodb/r/innodb-32k.result b/mysql-test/suite/innodb/r/innodb-32k.result index 7dd1df8cfc5..b64ff332084 100644 --- a/mysql-test/suite/innodb/r/innodb-32k.result +++ b/mysql-test/suite/innodb/r/innodb-32k.result @@ -1,4 +1,3 @@ -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; call mtr.add_suppression("Innodb: Cannot add field.*row size is"); # Test 1) Show the page size from Information Schema SELECT variable_value FROM information_schema.global_status diff --git a/mysql-test/suite/innodb/r/innodb-system-table-view.result b/mysql-test/suite/innodb/r/innodb-system-table-view.result index 580ed08e424..c770d106bdc 100644 --- a/mysql-test/suite/innodb/r/innodb-system-table-view.result +++ b/mysql-test/suite/innodb/r/innodb-system-table-view.result @@ -1,5 +1,3 @@ -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SELECT table_id INTO @table_stats_id FROM information_schema.innodb_sys_tables WHERE name = 'mysql/innodb_table_stats'; SELECT table_id INTO @index_stats_id FROM information_schema.innodb_sys_tables @@ -168,7 +166,6 @@ name num_rows ref_count test/parent 1 2 DROP TABLE child; DROP TABLE parent; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; # # MDEV-29479 I_S.INNODB_SYS_TABLESPACES doesn't have # temporary tablespace information diff --git a/mysql-test/suite/innodb/r/innodb_bug14147491.result b/mysql-test/suite/innodb/r/innodb_bug14147491.result index 533eaeafeb8..9d2b8e1dfe3 100644 --- a/mysql-test/suite/innodb/r/innodb_bug14147491.result +++ b/mysql-test/suite/innodb/r/innodb_bug14147491.result @@ -1,5 +1,4 @@ # Ensure that purge will not crash on the table after we corrupt it. -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET GLOBAL innodb_fast_shutdown=0; # Create and populate the table to be corrupted set global innodb_file_per_table=ON; diff --git a/mysql-test/suite/innodb/r/innodb_bug84958.result b/mysql-test/suite/innodb/r/innodb_bug84958.result index 9a4129647b9..3375efb9184 100644 --- a/mysql-test/suite/innodb/r/innodb_bug84958.result +++ b/mysql-test/suite/innodb/r/innodb_bug84958.result @@ -4,8 +4,6 @@ # # Set up the test with a procedure and a function. # -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency= 1; CREATE PROCEDURE insert_n(start int, end int) BEGIN DECLARE i INT DEFAULT start; @@ -84,7 +82,6 @@ test.t1 check status OK # disconnect con2; disconnect con3; -SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; DROP TABLE t1; DROP PROCEDURE insert_n; DROP FUNCTION num_pages_get; diff --git a/mysql-test/suite/innodb/r/innodb_stats_persistent.result b/mysql-test/suite/innodb/r/innodb_stats_persistent.result index e25ab2a8a24..a691ab19b30 100644 --- a/mysql-test/suite/innodb/r/innodb_stats_persistent.result +++ b/mysql-test/suite/innodb/r/innodb_stats_persistent.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET @saved_include_delete_marked = @@GLOBAL.innodb_stats_include_delete_marked; SET GLOBAL innodb_stats_include_delete_marked = ON; SET @saved_traditional = @@GLOBAL.innodb_stats_traditional; @@ -105,4 +103,3 @@ DROP TABLE t1,t2; SET GLOBAL innodb_stats_include_delete_marked = @saved_include_delete_marked; SET GLOBAL innodb_stats_traditional = @saved_traditional; SET GLOBAL innodb_stats_modified_counter = @saved_modified_counter; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/instant_alter,4k.rdiff b/mysql-test/suite/innodb/r/instant_alter,4k.rdiff index a885eb260d6..ab12a24663e 100644 --- a/mysql-test/suite/innodb/r/instant_alter,4k.rdiff +++ b/mysql-test/suite/innodb/r/instant_alter,4k.rdiff @@ -312,12 +312,11 @@ connection default; InnoDB 0 transactions not purged DROP TABLE t1,t2,t3,t4,big; -@@ -2836,7 +2868,7 @@ +@@ -2836,6 +2868,6 @@ FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; instants -209 +211 - SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; SET GLOBAL innodb_instant_alter_column_allowed = @saved_allowance; # diff --git a/mysql-test/suite/innodb/r/instant_alter.result b/mysql-test/suite/innodb/r/instant_alter.result index 4a67e04205b..898981ef125 100644 --- a/mysql-test/suite/innodb/r/instant_alter.result +++ b/mysql-test/suite/innodb/r/instant_alter.result @@ -52,8 +52,6 @@ connect analyze, localhost, root; connection default; SET timestamp = 42; SET time_zone='+03:00'; -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET @old_instant= (SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'); @@ -2873,7 +2871,6 @@ FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; instants 209 -SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; SET GLOBAL innodb_instant_alter_column_allowed = @saved_allowance; # # MDEV-18266: Changing an index comment unnecessarily rebuilds index diff --git a/mysql-test/suite/innodb/r/instant_alter_bugs.result b/mysql-test/suite/innodb/r/instant_alter_bugs.result index f56938550ac..feacaa6b40d 100644 --- a/mysql-test/suite/innodb/r/instant_alter_bugs.result +++ b/mysql-test/suite/innodb/r/instant_alter_bugs.result @@ -1,5 +1,3 @@ -SET @save_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; # # MDEV-17821 Assertion `!page_rec_is_supremum(rec)' failed # in btr_pcur_store_position @@ -208,7 +206,6 @@ DROP TABLE t1; # MDEV-23801 Assertion index->table->instant... failed # in btr_pcur_store_position() # -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t ( pk int auto_increment, c01 char(255) not null default repeat('a',255), @@ -232,7 +229,6 @@ INSERT INTO t () VALUES (),(); ROLLBACK; DELETE FROM t; InnoDB 0 transactions not purged -SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; CREATE TABLE tt ENGINE=InnoDB AS SELECT c FROM t; DROP TABLE t, tt; # End of 10.3 tests @@ -489,7 +485,6 @@ ALTER TABLE t1 ADD COLUMN(f2 INT NOT NULL, f3 INT NOT NULL, f4 INT NOT NULL, f5 INT NOT NULL), CHANGE COLUMN f1 f1 CHAR(10) DEFAULT NULL; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; # # MDEV-26420 Buffer overflow on instant ADD/DROP of generated column # diff --git a/mysql-test/suite/innodb/r/instant_alter_crash.result b/mysql-test/suite/innodb/r/instant_alter_crash.result index 7855aa24264..c6f7d3898be 100644 --- a/mysql-test/suite/innodb/r/instant_alter_crash.result +++ b/mysql-test/suite/innodb/r/instant_alter_crash.result @@ -20,7 +20,6 @@ COMMIT; # Kill the server disconnect ddl; # restart -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SELECT * FROM t1; id c2 0 2 @@ -46,8 +45,6 @@ COMMIT; # Kill the server disconnect ddl; # restart -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SELECT * FROM t1; id c2 0 3 @@ -76,7 +73,6 @@ COMMIT; # Kill the server disconnect ddl; # restart -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; FOUND 3 /\[Note\] InnoDB: Rolled back recovered transaction / in mysqld.1.err SELECT * FROM t1; id c2 diff --git a/mysql-test/suite/innodb/r/instant_alter_debug.result b/mysql-test/suite/innodb/r/instant_alter_debug.result index 7c378aa62e3..1bd362f35b5 100644 --- a/mysql-test/suite/innodb/r/instant_alter_debug.result +++ b/mysql-test/suite/innodb/r/instant_alter_debug.result @@ -1,5 +1,3 @@ -SET @save_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET @old_instant= (SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'); @@ -523,7 +521,6 @@ test.t1 check status OK DROP TABLE t1; SET DEBUG_SYNC=RESET; # End of 10.5 tests -SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; SELECT variable_value-@old_instant instants FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; diff --git a/mysql-test/suite/innodb/r/instant_alter_purge,release.rdiff b/mysql-test/suite/innodb/r/instant_alter_purge,release.rdiff index 8722b724c6e..23f6c9154ef 100644 --- a/mysql-test/suite/innodb/r/instant_alter_purge,release.rdiff +++ b/mysql-test/suite/innodb/r/instant_alter_purge,release.rdiff @@ -1,6 +1,6 @@ --- instant_alter_purge.result +++ instant_alter_purge,release.result -@@ -32,16 +32,11 @@ +@@ -32,15 +32,10 @@ START TRANSACTION WITH CONSISTENT SNAPSHOT; connection default; DELETE FROM t1; @@ -16,4 +16,3 @@ connection default; -SET DEBUG_SYNC=RESET; DROP TABLE t1; - SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/instant_alter_purge.result b/mysql-test/suite/innodb/r/instant_alter_purge.result index 261356bad12..61cffc9aec5 100644 --- a/mysql-test/suite/innodb/r/instant_alter_purge.result +++ b/mysql-test/suite/innodb/r/instant_alter_purge.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; InnoDB 0 transactions not purged # # MDEV-17793 Crash in purge after instant DROP and emptying the table @@ -22,4 +20,3 @@ ALTER TABLE t1 DROP extra; disconnect prevent_purge; InnoDB 0 transactions not purged DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/instant_alter_rollback.result b/mysql-test/suite/innodb/r/instant_alter_rollback.result index b51e067c647..dd427b625c1 100644 --- a/mysql-test/suite/innodb/r/instant_alter_rollback.result +++ b/mysql-test/suite/innodb/r/instant_alter_rollback.result @@ -47,11 +47,8 @@ CREATE TABLE foo(a INT PRIMARY KEY) ENGINE=InnoDB; # Kill the server disconnect to_be_killed; # restart -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; DROP TABLE foo; InnoDB 0 transactions not purged -SET GLOBAL innodb_purge_rseg_truncate_frequency=@saved_frequency; SELECT * FROM empty; id c2 d1 SELECT * FROM once; diff --git a/mysql-test/suite/innodb/r/page_id_innochecksum.result b/mysql-test/suite/innodb/r/page_id_innochecksum.result index 7a5f44b21e6..7915a7babbe 100644 --- a/mysql-test/suite/innodb/r/page_id_innochecksum.result +++ b/mysql-test/suite/innodb/r/page_id_innochecksum.result @@ -3,7 +3,6 @@ create table t1(f1 int not null)engine=innodb; insert into t1 values(1), (2), (3); # Change the page offset FOUND 1 /page id mismatch/ in result.log -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; InnoDB 0 transactions not purged drop table t1; call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd': Page read from tablespace is corrupted\\."); diff --git a/mysql-test/suite/innodb/r/purge.result b/mysql-test/suite/innodb/r/purge.result index a71d0afdcbe..ed14fad74b1 100644 --- a/mysql-test/suite/innodb/r/purge.result +++ b/mysql-test/suite/innodb/r/purge.result @@ -1,5 +1,3 @@ -SET @save_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; # Bug #12429576 - Test an assertion failure on purge. CREATE TABLE t1_purge ( A int, @@ -118,4 +116,3 @@ t12963823 CREATE TABLE `t12963823` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC InnoDB 0 transactions not purged DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge, t12637786, t12963823; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; diff --git a/mysql-test/suite/innodb/r/purge_secondary.result b/mysql-test/suite/innodb/r/purge_secondary.result index 6c0612c7cfe..9801e985486 100644 --- a/mysql-test/suite/innodb/r/purge_secondary.result +++ b/mysql-test/suite/innodb/r/purge_secondary.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t1 ( a SERIAL, b CHAR(255) NOT NULL DEFAULT '', c BOOLEAN DEFAULT false, l LINESTRING NOT NULL DEFAULT ST_linefromtext('linestring(448 -689, @@ -169,4 +167,3 @@ page 5: N_RECS=0x0001 UNLOCK TABLES; DROP TABLE t1; # End of 10.3 tests -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/scrub.result b/mysql-test/suite/innodb/r/scrub.result index 0d977bc9e3a..4b976c32be3 100644 --- a/mysql-test/suite/innodb/r/scrub.result +++ b/mysql-test/suite/innodb/r/scrub.result @@ -1,6 +1,5 @@ SET GLOBAL innodb_file_per_table=OFF, -innodb_purge_rseg_truncate_frequency=1, innodb_immediate_scrub_data_uncompressed=ON; CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT NOT NULL, INDEX(f1), diff --git a/mysql-test/suite/innodb/r/scrub_debug.result b/mysql-test/suite/innodb/r/scrub_debug.result index 5fbf1250b21..1e60fb73dad 100644 --- a/mysql-test/suite/innodb/r/scrub_debug.result +++ b/mysql-test/suite/innodb/r/scrub_debug.result @@ -1,7 +1,5 @@ SET @save_debug=@@GLOBAL.INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG; SET @save_scrub=@@GLOBAL.INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED; -SET @save_freq=@@GLOBAL.INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY; -SET GLOBAL INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY=1; SET GLOBAL INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED=1; SET GLOBAL INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=2; CREATE TABLE t1(f1 INT AUTO_INCREMENT PRIMARY KEY, @@ -19,4 +17,3 @@ UNLOCK TABLES; DROP TABLE t1; SET GLOBAL INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=@save_debug; SET GLOBAL INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED=@save_scrub; -SET GLOBAL INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY = @save_freq; diff --git a/mysql-test/suite/innodb/r/truncate_crash.result b/mysql-test/suite/innodb/r/truncate_crash.result index ae3e6f6f4bf..5e7380e3286 100644 --- a/mysql-test/suite/innodb/r/truncate_crash.result +++ b/mysql-test/suite/innodb/r/truncate_crash.result @@ -8,10 +8,7 @@ connection default; SET DEBUG_SYNC='now WAIT_FOR c'; # restart disconnect wait; -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; InnoDB 0 transactions not purged -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; SELECT COUNT(*) FROM t1; COUNT(*) 0 diff --git a/mysql-test/suite/innodb/r/trx_id_future.result b/mysql-test/suite/innodb/r/trx_id_future.result index 4f88b1d4783..c9beb17b81c 100644 --- a/mysql-test/suite/innodb/r/trx_id_future.result +++ b/mysql-test/suite/innodb/r/trx_id_future.result @@ -2,7 +2,6 @@ # Bug #20445525 ADD A CONSISTENCY CHECK AGAINST DB_TRX_ID BEING # IN THE FUTURE # -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE t1(a INT) row_format=redundant engine=innoDB; INSERT INTO t1 VALUES(1); InnoDB 0 transactions not purged diff --git a/mysql-test/suite/innodb/r/undo_log.result b/mysql-test/suite/innodb/r/undo_log.result index cda3b190ede..6e377951960 100644 --- a/mysql-test/suite/innodb/r/undo_log.result +++ b/mysql-test/suite/innodb/r/undo_log.result @@ -144,8 +144,6 @@ CHECK TABLE test_tab; Table Op Msg_type Msg_text test.test_tab check status OK DROP TABLE test_tab; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TEMPORARY TABLE t2(i INT)ENGINE=InnoDB; CREATE TABLE t1(i TEXT NOT NULL) ENGINE=INNODB; BEGIN; @@ -156,4 +154,3 @@ ROLLBACK; InnoDB 0 transactions not purged DROP TABLE t1; DROP TABLE t2; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/r/undo_space_dblwr.result b/mysql-test/suite/innodb/r/undo_space_dblwr.result index 7954c426341..d6822b20eb7 100644 --- a/mysql-test/suite/innodb/r/undo_space_dblwr.result +++ b/mysql-test/suite/innodb/r/undo_space_dblwr.result @@ -4,7 +4,6 @@ Variable_name Value innodb_doublewrite ON create table t1(f1 int not null, f2 int not null)engine=innodb; insert into t1 values (1, 1); -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; InnoDB 0 transactions not purged set GLOBAL innodb_log_checkpoint_now=1; # Make the first page dirty for undo tablespace diff --git a/mysql-test/suite/innodb/r/undo_truncate.result b/mysql-test/suite/innodb/r/undo_truncate.result index 48b184f07c7..7a0125650e5 100644 --- a/mysql-test/suite/innodb/r/undo_truncate.result +++ b/mysql-test/suite/innodb/r/undo_truncate.result @@ -1,5 +1,4 @@ SET GLOBAL innodb_undo_log_truncate = 0; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; === information_schema.innodb_sys_tablespaces and innodb_sys_datafiles === Space_Name Page_Size Zip_Size Path innodb_undo001 DEFAULT DEFAULT MYSQLD_DATADIR//undo001 @@ -33,7 +32,6 @@ connection con2; commit; disconnect con2; connection default; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET GLOBAL innodb_max_purge_lag_wait=0; set global innodb_fast_shutdown=0; # restart diff --git a/mysql-test/suite/innodb/r/undo_truncate_recover.result b/mysql-test/suite/innodb/r/undo_truncate_recover.result index 909771e6a17..f9f020d12b3 100644 --- a/mysql-test/suite/innodb/r/undo_truncate_recover.result +++ b/mysql-test/suite/innodb/r/undo_truncate_recover.result @@ -1,5 +1,4 @@ SET GLOBAL innodb_undo_log_truncate = 1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; create table t1(keyc int primary key, c char(100)) engine = innodb; begin; commit; diff --git a/mysql-test/suite/innodb/t/alter_kill.test b/mysql-test/suite/innodb/t/alter_kill.test index 8f7e6371919..3e0152ec458 100644 --- a/mysql-test/suite/innodb/t/alter_kill.test +++ b/mysql-test/suite/innodb/t/alter_kill.test @@ -27,7 +27,6 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`bug16720368` is corrupted"); -- echo # SET GLOBAL innodb_file_per_table=1; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE bug16720368_1 (a INT PRIMARY KEY) ENGINE=InnoDB; diff --git a/mysql-test/suite/innodb/t/cursor-restore-locking.test b/mysql-test/suite/innodb/t/cursor-restore-locking.test index b65d3773ba2..0f90055ff8b 100644 --- a/mysql-test/suite/innodb/t/cursor-restore-locking.test +++ b/mysql-test/suite/innodb/t/cursor-restore-locking.test @@ -3,8 +3,6 @@ source include/have_debug.inc; source include/have_debug_sync.inc; -SET @save_freq=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; CREATE TABLE t (a int PRIMARY KEY, b int NOT NULL UNIQUE) engine = InnoDB, STATS_PERSISTENT=0; --source include/wait_all_purged.inc @@ -86,5 +84,4 @@ INSERT INTO t VALUES(30, 20); # trx_4 SET DEBUG_SYNC = 'RESET'; DROP TABLE t; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_freq; --source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/t/dml_purge.test b/mysql-test/suite/innodb/t/dml_purge.test index c13ff22572b..463ae3908b9 100644 --- a/mysql-test/suite/innodb/t/dml_purge.test +++ b/mysql-test/suite/innodb/t/dml_purge.test @@ -2,16 +2,12 @@ let INNODB_PAGE_SIZE=`select @@innodb_page_size`; let MYSQLD_DATADIR=`select @@datadir`; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; --echo # --echo # MDEV-12288 Reset DB_TRX_ID when the history is removed, --echo # to speed up MVCC --echo # -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - CREATE TABLE t1(a INT PRIMARY KEY, b INT NOT NULL) ROW_FORMAT=REDUNDANT ENGINE=InnoDB; --source include/wait_all_purged.inc @@ -80,4 +76,3 @@ EOF UNLOCK TABLES; SELECT * FROM t1; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/t/foreign_key.test b/mysql-test/suite/innodb/t/foreign_key.test index 31ab5168d06..8e98af3fc53 100644 --- a/mysql-test/suite/innodb/t/foreign_key.test +++ b/mysql-test/suite/innodb/t/foreign_key.test @@ -138,9 +138,6 @@ ALTER TABLE child FORCE; DELETE FROM parent; DROP TABLE child,parent; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - SELECT unique_constraint_name FROM information_schema.referential_constraints WHERE table_name = 't2'; @@ -737,7 +734,6 @@ disconnect con1; --source include/wait_all_purged.inc CHECK TABLE t1; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; --echo # --echo # MDEV-17187 table doesn't exist in engine after ALTER other tables @@ -1080,9 +1076,6 @@ DROP TABLE IF EXISTS t2, t1; --echo # MDEV-30531 Corrupt index(es) on busy table when using FOREIGN KEY --echo # -SET @freq=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - CREATE TABLE collections ( id int(11) unsigned NOT NULL AUTO_INCREMENT, collectionhash varchar(255) NOT NULL DEFAULT '0', @@ -1111,7 +1104,6 @@ REPLACE INTO binaries (id) VALUES (NULL); SET GLOBAL innodb_max_purge_lag_wait=0; CHECK TABLE binaries, collections EXTENDED; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@freq; --disconnect con1 diff --git a/mysql-test/suite/innodb/t/gap_lock_split.test b/mysql-test/suite/innodb/t/gap_lock_split.test index e8202615c3f..c67e693fc0b 100644 --- a/mysql-test/suite/innodb/t/gap_lock_split.test +++ b/mysql-test/suite/innodb/t/gap_lock_split.test @@ -3,9 +3,6 @@ --source include/have_debug.inc --source include/have_debug_sync.inc -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - CREATE TABLE t1(id INT PRIMARY key, val VARCHAR(16000)) ENGINE=InnoDB STATS_PERSISTENT=0; INSERT INTO t1 (id,val) SELECT 2*seq,'x' FROM seq_0_to_1023; @@ -44,4 +41,3 @@ disconnect con1; connection default; COMMIT; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; diff --git a/mysql-test/suite/innodb/t/index_merge_threshold.test b/mysql-test/suite/innodb/t/index_merge_threshold.test index a587e10db6c..a60ecf51dca 100644 --- a/mysql-test/suite/innodb/t/index_merge_threshold.test +++ b/mysql-test/suite/innodb/t/index_merge_threshold.test @@ -13,9 +13,6 @@ --source include/have_innodb_16k.inc --source include/have_partition.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - # Check index merge threshold by create index on all datatypes CREATE TABLE tab(a BIGINT PRIMARY KEY,c1 TINYTEXT,c2 TEXT,c3 MEDIUMTEXT, @@ -189,4 +186,3 @@ CREATE INDEX index1 ON tab1(b(750)) COMMENT 'MERGE_THRESHOLD=45'; --source suite/innodb/include/innodb_merge_threshold_secondary.inc DROP TABLE tab1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/t/innodb-16k.test b/mysql-test/suite/innodb/t/innodb-16k.test index 56109543ee4..8bec62544c3 100644 --- a/mysql-test/suite/innodb/t/innodb-16k.test +++ b/mysql-test/suite/innodb/t/innodb-16k.test @@ -16,9 +16,7 @@ SELECT variable_value FROM information_schema.global_status --echo # varies depending on number of fields and other overhead. SET SESSION innodb_strict_mode = ON; -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; SET @save_level=@@GLOBAL.innodb_compression_level; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET GLOBAL innodb_compression_level=1; # Compressed table: compressBound() for the s390x DFLTCC instruction @@ -458,7 +456,6 @@ DROP TABLE t1; --source include/wait_all_purged.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; SET GLOBAL innodb_compression_level=@save_level; DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge; diff --git a/mysql-test/suite/innodb/t/innodb-32k.test b/mysql-test/suite/innodb/t/innodb-32k.test index 07c6c10d013..496977c1bda 100644 --- a/mysql-test/suite/innodb/t/innodb-32k.test +++ b/mysql-test/suite/innodb/t/innodb-32k.test @@ -3,8 +3,6 @@ --source include/have_innodb.inc --source include/have_innodb_32k.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - call mtr.add_suppression("Innodb: Cannot add field.*row size is"); let $MYSQLD_DATADIR= `select @@datadir`; diff --git a/mysql-test/suite/innodb/t/innodb-system-table-view.test b/mysql-test/suite/innodb/t/innodb-system-table-view.test index ea620b398e5..659c42f0e09 100644 --- a/mysql-test/suite/innodb/t/innodb-system-table-view.test +++ b/mysql-test/suite/innodb/t/innodb-system-table-view.test @@ -4,8 +4,6 @@ --source include/innodb_page_size_small.inc -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; LET $MYSQLD_DATADIR = `select @@datadir`; LET $INNODB_PAGE_SIZE = `select @@innodb_page_size`; @@ -140,7 +138,6 @@ WHERE name LIKE "%parent"; DROP TABLE child; DROP TABLE parent; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; --echo # --echo # MDEV-29479 I_S.INNODB_SYS_TABLESPACES doesn't have diff --git a/mysql-test/suite/innodb/t/innodb_bug14147491.test b/mysql-test/suite/innodb/t/innodb_bug14147491.test index 3c37f1b7cce..10f3c98be9e 100644 --- a/mysql-test/suite/innodb/t/innodb_bug14147491.test +++ b/mysql-test/suite/innodb/t/innodb_bug14147491.test @@ -16,7 +16,6 @@ call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); --enable_query_log --echo # Ensure that purge will not crash on the table after we corrupt it. -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET GLOBAL innodb_fast_shutdown=0; --echo # Create and populate the table to be corrupted diff --git a/mysql-test/suite/innodb/t/innodb_bug84958.test b/mysql-test/suite/innodb/t/innodb_bug84958.test index b42f7bd639e..d4159dcc485 100644 --- a/mysql-test/suite/innodb/t/innodb_bug84958.test +++ b/mysql-test/suite/innodb/t/innodb_bug84958.test @@ -6,8 +6,6 @@ --echo # --source include/have_innodb.inc -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency= 1; DELIMITER ~~; CREATE PROCEDURE insert_n(start int, end int) @@ -90,7 +88,6 @@ CHECK TABLE t1; --echo # disconnect con2; disconnect con3; -SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; DROP TABLE t1; DROP PROCEDURE insert_n; DROP FUNCTION num_pages_get; diff --git a/mysql-test/suite/innodb/t/innodb_stats_persistent.test b/mysql-test/suite/innodb/t/innodb_stats_persistent.test index f79ae37e8de..a8a311a60c9 100644 --- a/mysql-test/suite/innodb/t/innodb_stats_persistent.test +++ b/mysql-test/suite/innodb/t/innodb_stats_persistent.test @@ -1,8 +1,6 @@ --source include/have_innodb.inc --source include/have_sequence.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; SET @saved_include_delete_marked = @@GLOBAL.innodb_stats_include_delete_marked; SET GLOBAL innodb_stats_include_delete_marked = ON; SET @saved_traditional = @@GLOBAL.innodb_stats_traditional; @@ -84,4 +82,3 @@ DROP TABLE t1,t2; SET GLOBAL innodb_stats_include_delete_marked = @saved_include_delete_marked; SET GLOBAL innodb_stats_traditional = @saved_traditional; SET GLOBAL innodb_stats_modified_counter = @saved_modified_counter; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/t/instant_alter.test b/mysql-test/suite/innodb/t/instant_alter.test index 8e333e3bb72..5b6d3f874c1 100644 --- a/mysql-test/suite/innodb/t/instant_alter.test +++ b/mysql-test/suite/innodb/t/instant_alter.test @@ -44,8 +44,6 @@ connect analyze, localhost, root; connection default; SET timestamp = 42; SET time_zone='+03:00'; -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET @old_instant= (SELECT variable_value FROM information_schema.global_status @@ -906,7 +904,6 @@ DROP TABLE t1; SELECT variable_value-@old_instant instants FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; -SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; SET GLOBAL innodb_instant_alter_column_allowed = @saved_allowance; --echo # diff --git a/mysql-test/suite/innodb/t/instant_alter_bugs.test b/mysql-test/suite/innodb/t/instant_alter_bugs.test index 5c3c39d44e0..81d36849abd 100644 --- a/mysql-test/suite/innodb/t/instant_alter_bugs.test +++ b/mysql-test/suite/innodb/t/instant_alter_bugs.test @@ -1,8 +1,5 @@ --source include/have_innodb.inc -SET @save_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - --echo # --echo # MDEV-17821 Assertion `!page_rec_is_supremum(rec)' failed --echo # in btr_pcur_store_position @@ -217,8 +214,6 @@ DROP TABLE t1; --echo # in btr_pcur_store_position() --echo # -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - CREATE TABLE t ( pk int auto_increment, c01 char(255) not null default repeat('a',255), @@ -245,7 +240,6 @@ ROLLBACK; DELETE FROM t; --source include/wait_all_purged.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; CREATE TABLE tt ENGINE=InnoDB AS SELECT c FROM t; DROP TABLE t, tt; @@ -524,7 +518,6 @@ ALTER TABLE t1 ADD COLUMN(f2 INT NOT NULL, f3 INT NOT NULL, f4 INT NOT NULL, f5 INT NOT NULL), CHANGE COLUMN f1 f1 CHAR(10) DEFAULT NULL; DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; --echo # --echo # MDEV-26420 Buffer overflow on instant ADD/DROP of generated column diff --git a/mysql-test/suite/innodb/t/instant_alter_crash.test b/mysql-test/suite/innodb/t/instant_alter_crash.test index 37cdb2862ad..b687664dbcc 100644 --- a/mysql-test/suite/innodb/t/instant_alter_crash.test +++ b/mysql-test/suite/innodb/t/instant_alter_crash.test @@ -36,7 +36,6 @@ COMMIT; disconnect ddl; --source include/start_mysqld.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SELECT * FROM t1; SELECT * FROM t2; BEGIN; @@ -64,9 +63,6 @@ COMMIT; disconnect ddl; --source include/start_mysqld.inc -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - SELECT * FROM t1; SELECT * FROM t2; BEGIN; @@ -94,8 +90,6 @@ COMMIT; disconnect ddl; --source include/start_mysqld.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; let SEARCH_PATTERN= \[Note\] InnoDB: Rolled back recovered transaction ; -- source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/instant_alter_debug.test b/mysql-test/suite/innodb/t/instant_alter_debug.test index 11d6961f918..2b34d829738 100644 --- a/mysql-test/suite/innodb/t/instant_alter_debug.test +++ b/mysql-test/suite/innodb/t/instant_alter_debug.test @@ -3,9 +3,6 @@ --source include/have_debug_sync.inc --source include/have_sequence.inc -SET @save_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - SET @old_instant= (SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'); @@ -607,8 +604,6 @@ SET DEBUG_SYNC=RESET; --echo # End of 10.5 tests -SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency; - SELECT variable_value-@old_instant instants FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; diff --git a/mysql-test/suite/innodb/t/instant_alter_purge.test b/mysql-test/suite/innodb/t/instant_alter_purge.test index 88a56141a1f..445cae4d03e 100644 --- a/mysql-test/suite/innodb/t/instant_alter_purge.test +++ b/mysql-test/suite/innodb/t/instant_alter_purge.test @@ -4,8 +4,6 @@ if ($have_debug) { --source include/have_debug_sync.inc } -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; --source include/wait_all_purged.inc --echo # @@ -34,4 +32,3 @@ disconnect prevent_purge; let $wait_all_purged= 0; --source include/wait_all_purged.inc DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/t/instant_alter_rollback.test b/mysql-test/suite/innodb/t/instant_alter_rollback.test index cfece7e0738..a4608001a25 100644 --- a/mysql-test/suite/innodb/t/instant_alter_rollback.test +++ b/mysql-test/suite/innodb/t/instant_alter_rollback.test @@ -60,11 +60,8 @@ CREATE TABLE foo(a INT PRIMARY KEY) ENGINE=InnoDB; disconnect to_be_killed; --source include/start_mysqld.inc -SET @saved_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; DROP TABLE foo; --source include/wait_all_purged.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=@saved_frequency; SELECT * FROM empty; SELECT * FROM once; diff --git a/mysql-test/suite/innodb/t/page_id_innochecksum.test b/mysql-test/suite/innodb/t/page_id_innochecksum.test index 2a2c14844fa..902d2aba2af 100644 --- a/mysql-test/suite/innodb/t/page_id_innochecksum.test +++ b/mysql-test/suite/innodb/t/page_id_innochecksum.test @@ -63,7 +63,6 @@ let SEARCH_PATTERN=page id mismatch; --remove_file $resultlog let $restart_parameters=--innodb-force-recovery=1; --source include/start_mysqld.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; --source include/wait_all_purged.inc drop table t1; call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd': Page read from tablespace is corrupted\\."); diff --git a/mysql-test/suite/innodb/t/purge.test b/mysql-test/suite/innodb/t/purge.test index 63312e50fd8..97c0fb86105 100644 --- a/mysql-test/suite/innodb/t/purge.test +++ b/mysql-test/suite/innodb/t/purge.test @@ -1,9 +1,6 @@ --source include/have_innodb.inc --source include/have_innodb_16k.inc -SET @save_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; - --echo # Bug #12429576 - Test an assertion failure on purge. CREATE TABLE t1_purge ( A int, @@ -114,4 +111,3 @@ SHOW CREATE TABLE t12963823; -- source include/wait_all_purged.inc DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge, t12637786, t12963823; -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; diff --git a/mysql-test/suite/innodb/t/purge_secondary.test b/mysql-test/suite/innodb/t/purge_secondary.test index a7f75f56b53..4e664109e8b 100644 --- a/mysql-test/suite/innodb/t/purge_secondary.test +++ b/mysql-test/suite/innodb/t/purge_secondary.test @@ -5,10 +5,6 @@ call mtr.add_suppression("InnoDB: Difficult to find free blocks in the buffer pool"); --enable_query_log -# Ensure that the history list length will actually be decremented by purge. -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - CREATE TABLE t1 ( a SERIAL, b CHAR(255) NOT NULL DEFAULT '', c BOOLEAN DEFAULT false, l LINESTRING NOT NULL DEFAULT ST_linefromtext('linestring(448 -689, @@ -174,5 +170,3 @@ UNLOCK TABLES; DROP TABLE t1; --echo # End of 10.3 tests - -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/t/scrub.test b/mysql-test/suite/innodb/t/scrub.test index a2f4e5757f5..1c38637984a 100644 --- a/mysql-test/suite/innodb/t/scrub.test +++ b/mysql-test/suite/innodb/t/scrub.test @@ -4,7 +4,6 @@ SET GLOBAL innodb_file_per_table=OFF, - innodb_purge_rseg_truncate_frequency=1, innodb_immediate_scrub_data_uncompressed=ON; CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT NOT NULL, INDEX(f1), diff --git a/mysql-test/suite/innodb/t/scrub_debug.test b/mysql-test/suite/innodb/t/scrub_debug.test index 141b0f0c5ba..a1f0b38e3ae 100644 --- a/mysql-test/suite/innodb/t/scrub_debug.test +++ b/mysql-test/suite/innodb/t/scrub_debug.test @@ -4,9 +4,7 @@ SET @save_debug=@@GLOBAL.INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG; SET @save_scrub=@@GLOBAL.INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED; -SET @save_freq=@@GLOBAL.INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY; -SET GLOBAL INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY=1; SET GLOBAL INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED=1; SET GLOBAL INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=2; let $MYSQLD_DATADIR=`select @@datadir`; @@ -28,4 +26,3 @@ UNLOCK TABLES; DROP TABLE t1; SET GLOBAL INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=@save_debug; SET GLOBAL INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED=@save_scrub; -SET GLOBAL INNODB_PURGE_RSEG_TRUNCATE_FREQUENCY = @save_freq; diff --git a/mysql-test/suite/innodb/t/table_flags.test b/mysql-test/suite/innodb/t/table_flags.test index 6b2e6ee3ea6..34204ae11f4 100644 --- a/mysql-test/suite/innodb/t/table_flags.test +++ b/mysql-test/suite/innodb/t/table_flags.test @@ -34,7 +34,6 @@ let bugdir= $MYSQLTEST_VARDIR/tmp/table_flags; --let $d=--innodb-data-home-dir=$bugdir --innodb-log-group-home-dir=$bugdir --let $d=$d --innodb-data-file-path=ibdata1:1M:autoextend --let $d=$d --innodb-undo-tablespaces=0 ---let $d=$d --innodb-purge-rseg-truncate-frequency=1 --let $d=$d --skip-innodb-fast-shutdown --let $restart_noprint=1 --let $restart_parameters=$d --innodb-stats-persistent=0 diff --git a/mysql-test/suite/innodb/t/truncate_crash.test b/mysql-test/suite/innodb/t/truncate_crash.test index 27b8feea8a4..c5156b4b3fd 100644 --- a/mysql-test/suite/innodb/t/truncate_crash.test +++ b/mysql-test/suite/innodb/t/truncate_crash.test @@ -17,10 +17,7 @@ SET DEBUG_SYNC='now WAIT_FOR c'; --source include/restart_mysqld.inc disconnect wait; -SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; --source include/wait_all_purged.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency; --replace_result 2 0 SELECT COUNT(*) FROM t1; diff --git a/mysql-test/suite/innodb/t/trx_id_future.test b/mysql-test/suite/innodb/t/trx_id_future.test index 18077549cf6..1aeb1372eed 100644 --- a/mysql-test/suite/innodb/t/trx_id_future.test +++ b/mysql-test/suite/innodb/t/trx_id_future.test @@ -6,7 +6,6 @@ --source include/have_innodb.inc --source include/not_embedded.inc -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; let PAGE_SIZE=`select @@innodb_page_size`; CREATE TABLE t1(a INT) row_format=redundant engine=innoDB; diff --git a/mysql-test/suite/innodb/t/undo_log.test b/mysql-test/suite/innodb/t/undo_log.test index 150d50c2e75..2dbc9191f33 100644 --- a/mysql-test/suite/innodb/t/undo_log.test +++ b/mysql-test/suite/innodb/t/undo_log.test @@ -141,8 +141,6 @@ SELECT COUNT(*) FROM test_tab; CHECK TABLE test_tab; DROP TABLE test_tab; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TEMPORARY TABLE t2(i INT)ENGINE=InnoDB; CREATE TABLE t1(i TEXT NOT NULL) ENGINE=INNODB; BEGIN; @@ -153,4 +151,3 @@ ROLLBACK; --source include/wait_all_purged.inc DROP TABLE t1; DROP TABLE t2; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb/t/undo_space_dblwr.test b/mysql-test/suite/innodb/t/undo_space_dblwr.test index c746f37ead7..b6fd6738a1c 100644 --- a/mysql-test/suite/innodb/t/undo_space_dblwr.test +++ b/mysql-test/suite/innodb/t/undo_space_dblwr.test @@ -9,7 +9,6 @@ show variables like 'innodb_doublewrite'; create table t1(f1 int not null, f2 int not null)engine=innodb; insert into t1 values (1, 1); -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; --source include/wait_all_purged.inc set GLOBAL innodb_log_checkpoint_now=1; diff --git a/mysql-test/suite/innodb/t/undo_truncate.test b/mysql-test/suite/innodb/t/undo_truncate.test index 496eccb002e..4abcae9a267 100644 --- a/mysql-test/suite/innodb/t/undo_truncate.test +++ b/mysql-test/suite/innodb/t/undo_truncate.test @@ -13,7 +13,6 @@ call mtr.add_suppression("InnoDB: Trying to delete tablespace.*pending operation --enable_query_log SET GLOBAL innodb_undo_log_truncate = 0; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; LET $MYSQLD_DATADIR = `select @@datadir`; LET $INNODB_PAGE_SIZE = `select @@innodb_page_size`; @@ -53,7 +52,6 @@ connection default; let $trx_before= `SHOW ENGINE INNODB STATUS`; let $trx_before= `select substr('$trx_before',9)+2`; -SET GLOBAL innodb_purge_rseg_truncate_frequency=1; SET GLOBAL innodb_max_purge_lag_wait=0; set global innodb_fast_shutdown=0; --source include/restart_mysqld.inc diff --git a/mysql-test/suite/innodb/t/undo_truncate_recover.test b/mysql-test/suite/innodb/t/undo_truncate_recover.test index e499ff3dfbe..8f55bafeeb6 100644 --- a/mysql-test/suite/innodb/t/undo_truncate_recover.test +++ b/mysql-test/suite/innodb/t/undo_truncate_recover.test @@ -13,7 +13,6 @@ --source include/not_embedded.inc SET GLOBAL innodb_undo_log_truncate = 1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err; diff --git a/mysql-test/suite/innodb_fts/r/crash_recovery.result b/mysql-test/suite/innodb_fts/r/crash_recovery.result index 83e5ddaea90..c6fc9dfaab9 100644 --- a/mysql-test/suite/innodb_fts/r/crash_recovery.result +++ b/mysql-test/suite/innodb_fts/r/crash_recovery.result @@ -33,10 +33,7 @@ connection default; disconnect ddl1; disconnect ddl2; disconnect ddl3; -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; InnoDB 0 transactions not purged -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; CHECK TABLE t1,t2,t3; Table Op Msg_type Msg_text test.t1 check status OK diff --git a/mysql-test/suite/innodb_fts/t/crash_recovery.test b/mysql-test/suite/innodb_fts/t/crash_recovery.test index cb53de4d595..dd8a07f8de9 100644 --- a/mysql-test/suite/innodb_fts/t/crash_recovery.test +++ b/mysql-test/suite/innodb_fts/t/crash_recovery.test @@ -111,13 +111,9 @@ disconnect ddl1; disconnect ddl2; disconnect ddl3; -# Ensure that the history list length will actually be decremented by purge. -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; # Wait for purge, so that any #sql-ib.ibd files from the previous kill # will be deleted. source ../../innodb/include/wait_all_purged.inc; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; CHECK TABLE t1,t2,t3; DROP TABLE t1,t2,t3; diff --git a/mysql-test/suite/innodb_gis/r/rtree_add_index.result b/mysql-test/suite/innodb_gis/r/rtree_add_index.result index dbd804b18bd..ba552e278d4 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_add_index.result +++ b/mysql-test/suite/innodb_gis/r/rtree_add_index.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t1 (g MULTIPOINT NOT NULL) ENGINE=InnoDB; INSERT INTO t1 VALUES (''); connect purge_control,localhost,root; @@ -10,4 +8,3 @@ ALTER TABLE t1 ADD SPATIAL INDEX (g); disconnect purge_control; InnoDB 0 transactions not purged DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/r/rtree_compress.result b/mysql-test/suite/innodb_gis/r/rtree_compress.result index a88f8b9fa9b..fce42319b55 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_compress.result +++ b/mysql-test/suite/innodb_gis/r/rtree_compress.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb ROW_FORMAT=COMPRESSED; insert into t1 values(1, Point(1,1)); insert into t1 values(2, Point(2,2)); @@ -51,4 +49,3 @@ count(*) SET debug_dbug = @saved_dbug; InnoDB 0 transactions not purged drop table t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/r/rtree_purge.result b/mysql-test/suite/innodb_gis/r/rtree_purge.result index 38c4f484504..4c39cc988c6 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_purge.result +++ b/mysql-test/suite/innodb_gis/r/rtree_purge.result @@ -1,8 +1,5 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; create table t ( b point not null,d point not null, spatial key (d),spatial key (b) ) engine=innodb; InnoDB 0 transactions not purged drop table t; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/r/rtree_undo.result b/mysql-test/suite/innodb_gis/r/rtree_undo.result index 589ccc3ff9a..d0e1564133f 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_undo.result +++ b/mysql-test/suite/innodb_gis/r/rtree_undo.result @@ -1,5 +1,3 @@ -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; connect control_purge,localhost,root,,; connection default; CREATE TABLE t1 ( @@ -136,4 +134,3 @@ SPATIAL KEY (g6) ) ENGINE=InnoDB; DROP TABLE t1,t2; disconnect control_purge; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/t/rtree_add_index.test b/mysql-test/suite/innodb_gis/t/rtree_add_index.test index cbc82f62a70..81755124a20 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_add_index.test +++ b/mysql-test/suite/innodb_gis/t/rtree_add_index.test @@ -1,8 +1,5 @@ --source include/have_innodb.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - CREATE TABLE t1 (g MULTIPOINT NOT NULL) ENGINE=InnoDB; INSERT INTO t1 VALUES (''); @@ -17,4 +14,3 @@ ALTER TABLE t1 ADD SPATIAL INDEX (g); disconnect purge_control; --source ../../innodb/include/wait_all_purged.inc DROP TABLE t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/t/rtree_compress.test b/mysql-test/suite/innodb_gis/t/rtree_compress.test index a3d1e883a45..e667ec8e9f0 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_compress.test +++ b/mysql-test/suite/innodb_gis/t/rtree_compress.test @@ -10,9 +10,6 @@ # Valgrind takes too much time on PB2 even in the --big-test runs. --source include/not_valgrind.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb ROW_FORMAT=COMPRESSED; # Insert enough values to let R-tree split. @@ -61,4 +58,3 @@ SET debug_dbug = @saved_dbug; # Clean up. drop table t1; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/t/rtree_purge.test b/mysql-test/suite/innodb_gis/t/rtree_purge.test index fc5ce2e14bc..cab86aa668f 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_purge.test +++ b/mysql-test/suite/innodb_gis/t/rtree_purge.test @@ -6,9 +6,6 @@ # This test often times out with MSAN --source include/not_msan.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - create table t ( b point not null,d point not null, spatial key (d),spatial key (b) ) engine=innodb; @@ -29,4 +26,3 @@ dec $n; # Clean up. drop table t; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_gis/t/rtree_undo.test b/mysql-test/suite/innodb_gis/t/rtree_undo.test index 2ae309a8f7e..962ff780fa0 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_undo.test +++ b/mysql-test/suite/innodb_gis/t/rtree_undo.test @@ -6,9 +6,6 @@ --source include/innodb_row_format.inc --source include/count_sessions.inc -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - connect (control_purge,localhost,root,,); connection default; @@ -100,5 +97,3 @@ dec $index; disconnect control_purge; --source include/wait_until_count_sessions.inc - -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_zip/r/blob.result b/mysql-test/suite/innodb_zip/r/blob.result index bfe96b8a869..df3a49ed777 100644 --- a/mysql-test/suite/innodb_zip/r/blob.result +++ b/mysql-test/suite/innodb_zip/r/blob.result @@ -2,8 +2,6 @@ # MDEV-21259 Assertion 'w != NORMAL || mach_read_from_4(ptr) != val' # failed in mtr_t::write(), btr_free_externally_stored_field() # -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t1 (c TEXT, f2 INT PRIMARY KEY, f3 INT UNIQUE) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; SET @level= @@GLOBAL.innodb_compression_level; @@ -18,4 +16,3 @@ disconnect prevent_purge; InnoDB 0 transactions not purged DROP TABLE t1; SET GLOBAL innodb_compression_level = @level; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/innodb_zip/t/blob.test b/mysql-test/suite/innodb_zip/t/blob.test index b85cf7313d0..4f9117f73ef 100644 --- a/mysql-test/suite/innodb_zip/t/blob.test +++ b/mysql-test/suite/innodb_zip/t/blob.test @@ -5,9 +5,6 @@ --echo # failed in mtr_t::write(), btr_free_externally_stored_field() --echo # -SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency; -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; - CREATE TABLE t1 (c TEXT, f2 INT PRIMARY KEY, f3 INT UNIQUE) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; @@ -26,4 +23,3 @@ REPLACE INTO t1 SELECT * FROM t1; DROP TABLE t1; SET GLOBAL innodb_compression_level = @level; -SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency; diff --git a/mysql-test/suite/mariabackup/unencrypted_page_compressed.result b/mysql-test/suite/mariabackup/unencrypted_page_compressed.result index 7edf66b027a..d995d1be364 100644 --- a/mysql-test/suite/mariabackup/unencrypted_page_compressed.result +++ b/mysql-test/suite/mariabackup/unencrypted_page_compressed.result @@ -1,5 +1,4 @@ call mtr.add_suppression("InnoDB: Table `test`.`t1` has an unreadable root page"); -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB page_compressed=yes; insert into t1(b, c) values("mariadb", "mariabackup"); InnoDB 0 transactions not purged diff --git a/mysql-test/suite/mariabackup/unencrypted_page_compressed.test b/mysql-test/suite/mariabackup/unencrypted_page_compressed.test index ce5c94a1c57..247a210a0e7 100644 --- a/mysql-test/suite/mariabackup/unencrypted_page_compressed.test +++ b/mysql-test/suite/mariabackup/unencrypted_page_compressed.test @@ -1,5 +1,4 @@ call mtr.add_suppression("InnoDB: Table `test`.`t1` has an unreadable root page"); -SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB page_compressed=yes; insert into t1(b, c) values("mariadb", "mariabackup"); --source ../innodb/include/wait_all_purged.inc diff --git a/mysql-test/suite/sys_vars/r/innodb_purge_rseg_truncate_frequency_basic.result b/mysql-test/suite/sys_vars/r/innodb_purge_rseg_truncate_frequency_basic.result index 65387032dc6..8b5ae0fae3e 100644 --- a/mysql-test/suite/sys_vars/r/innodb_purge_rseg_truncate_frequency_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_purge_rseg_truncate_frequency_basic.result @@ -4,7 +4,11 @@ SELECT @global_start_value; 128 '#--------------------FN_DYNVARS_046_01------------------------#' SET @@global.innodb_purge_rseg_truncate_frequency = 1; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SET @@global.innodb_purge_rseg_truncate_frequency = DEFAULT; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 128 @@ -17,31 +21,41 @@ SELECT @@innodb_purge_rseg_truncate_frequency; SELECT local.innodb_purge_rseg_truncate_frequency; ERROR 42S02: Unknown table 'local' in field list SET global innodb_purge_rseg_truncate_frequency = 1; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 1 '#--------------------FN_DYNVARS_046_03------------------------#' SET @@global.innodb_purge_rseg_truncate_frequency = 1; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 1 SET @@global.innodb_purge_rseg_truncate_frequency = 1; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 1 SET @@global.innodb_purge_rseg_truncate_frequency = 128; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 128 '#--------------------FN_DYNVARS_046_05-------------------------#' SET @@global.innodb_purge_rseg_truncate_frequency = -1; Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release Warning 1292 Truncated incorrect innodb_purge_rseg_truncate_fr... value: '-1' SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 1 SET @@global.innodb_purge_rseg_truncate_frequency = -1024; Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release Warning 1292 Truncated incorrect innodb_purge_rseg_truncate_fr... value: '-1024' SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency @@ -98,16 +112,21 @@ SELECT @@global.innodb_purge_rseg_truncate_frequency; 1 '#---------------------FN_DYNVARS_046_08----------------------#' SET @@global.innodb_purge_rseg_truncate_frequency = TRUE; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 1 SET @@global.innodb_purge_rseg_truncate_frequency = FALSE; Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release Warning 1292 Truncated incorrect innodb_purge_rseg_truncate_fr... value: '0' SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 1 SET @@global.innodb_purge_rseg_truncate_frequency = @global_start_value; +Warnings: +Warning 1287 '@@innodb_purge_rseg_truncate_frequency' is deprecated and will be removed in a future release SELECT @@global.innodb_purge_rseg_truncate_frequency; @@global.innodb_purge_rseg_truncate_frequency 128 diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff index 7a524ba2c16..0442b2873dd 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff @@ -320,7 +320,7 @@ VARIABLE_SCOPE GLOBAL -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT Dictates rate at which UNDO records are purged. Value N means purge rollback segment(s) on every Nth iteration of purge invocation + VARIABLE_COMMENT Deprecated parameter with no effect NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 @@ -1393,7 +1393,7 @@ diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result index 79f6dccefe3..5b728cee272 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result @@ -1308,7 +1308,7 @@ SESSION_VALUE NULL DEFAULT_VALUE 128 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT Dictates rate at which UNDO records are purged. Value N means purge rollback segment(s) on every Nth iteration of purge invocation +VARIABLE_COMMENT Deprecated parameter with no effect NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 NUMERIC_BLOCK_SIZE 0 diff --git a/mysql-test/suite/versioning/r/delete_history.result b/mysql-test/suite/versioning/r/delete_history.result index d07c71ee9f5..16af01a5f0b 100644 --- a/mysql-test/suite/versioning/r/delete_history.result +++ b/mysql-test/suite/versioning/r/delete_history.result @@ -1,5 +1,3 @@ -set @saved_frequency= @@global.innodb_purge_rseg_truncate_frequency; -set global innodb_purge_rseg_truncate_frequency= 1; call mtr.add_suppression("need more HISTORY partitions"); create table t (a int); delete history from t before system_time now(); @@ -210,7 +208,6 @@ insert into t1 values (1, 'c'); delete from t1; alter table t1 add fulltext key(ftx); drop table t1; -set global innodb_purge_rseg_truncate_frequency= @saved_frequency; # # MDEV-28201 Server crashes upon SHOW ANALYZE/EXPLAIN FORMAT=JSON # diff --git a/mysql-test/suite/versioning/t/delete_history.test b/mysql-test/suite/versioning/t/delete_history.test index 042670bcfec..d3f7e1172f1 100644 --- a/mysql-test/suite/versioning/t/delete_history.test +++ b/mysql-test/suite/versioning/t/delete_history.test @@ -2,9 +2,6 @@ --source include/have_partition.inc --source suite/versioning/engines.inc -set @saved_frequency= @@global.innodb_purge_rseg_truncate_frequency; -set global innodb_purge_rseg_truncate_frequency= 1; - call mtr.add_suppression("need more HISTORY partitions"); create table t (a int); @@ -215,8 +212,6 @@ delete from t1; alter table t1 add fulltext key(ftx); drop table t1; -set global innodb_purge_rseg_truncate_frequency= @saved_frequency; - --echo # --echo # MDEV-28201 Server crashes upon SHOW ANALYZE/EXPLAIN FORMAT=JSON --echo # diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index f2bb09b9174..c356c4b9862 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -19378,9 +19378,8 @@ static MYSQL_SYSVAR_ULONGLONG(max_undo_log_size, srv_max_undo_log_size, static MYSQL_SYSVAR_ULONG(purge_rseg_truncate_frequency, srv_purge_rseg_truncate_frequency, - PLUGIN_VAR_OPCMDARG, - "Dictates rate at which UNDO records are purged. Value N means" - " purge rollback segment(s) on every Nth iteration of purge invocation", + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_DEPRECATED, + "Deprecated parameter with no effect", NULL, NULL, 128, 1, 128, 0); static void innodb_undo_log_truncate_update(THD *thd, struct st_mysql_sys_var*, diff --git a/storage/innobase/include/trx0purge.h b/storage/innobase/include/trx0purge.h index 79b5c294e2a..29b1295dd4f 100644 --- a/storage/innobase/include/trx0purge.h +++ b/storage/innobase/include/trx0purge.h @@ -161,6 +161,9 @@ public: return undo_no <= other.undo_no; } + /** Free the undo pages up to this. */ + dberr_t free_history() const; + /** trx_t::no of the committed transaction */ trx_id_t trx_no; /** The record number within the committed transaction's undo @@ -172,7 +175,8 @@ public: committed transaction. */ iterator tail; /** The head of the purge queue; any older undo logs of committed - transactions may be discarded (history list truncation). */ + transactions may be discarded (history list truncation). + Protected by latch. */ iterator head; /*-----------------------------*/ bool next_stored; /*!< whether rseg holds the next record @@ -316,8 +320,9 @@ public: latch.wr_unlock(); } - /** Update end_view at the end of a purge batch. */ - inline void clone_end_view(); + /** Update end_view at the end of a purge batch. + @param head the new head of the purge queue */ + inline void clone_end_view(const iterator &head); struct view_guard { diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 4bd7df09fdc..4d813cbea48 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -509,7 +509,6 @@ struct purge_coordinator_state size_t m_history_length; Atomic_counter m_running; private: - ulint count; ulint n_use_threads; ulint n_threads; @@ -1284,6 +1283,13 @@ bool srv_any_background_activity() static void purge_worker_callback(void*); static void purge_coordinator_callback(void*); +static void purge_truncation_callback(void*) +{ + purge_sys.latch.rd_lock(SRW_LOCK_CALL); + const purge_sys_t::iterator head= purge_sys.head; + purge_sys.latch.rd_unlock(); + head.free_history(); +} static tpool::task_group purge_task_group; tpool::waitable_task purge_worker_task(purge_worker_callback, nullptr, @@ -1291,6 +1297,9 @@ tpool::waitable_task purge_worker_task(purge_worker_callback, nullptr, static tpool::task_group purge_coordinator_task_group(1); static tpool::waitable_task purge_coordinator_task (purge_coordinator_callback, nullptr, &purge_coordinator_task_group); +static tpool::task_group purge_truncation_task_group(1); +static tpool::waitable_task purge_truncation_task + (purge_truncation_callback, nullptr, &purge_truncation_task_group); static tpool::timer *purge_coordinator_timer; @@ -1693,15 +1702,20 @@ fewer_threads: if (!history_size) { srv_dml_needed_delay= 0; + purge_truncation_task.wait(); trx_purge_truncate_history(); } else { ulint n_pages_handled= trx_purge(n_use_threads, history_size); - if (!(++count % srv_purge_rseg_truncate_frequency) || - purge_sys.truncate.current || - (srv_shutdown_state != SRV_SHUTDOWN_NONE && srv_fast_shutdown == 0)) + if (purge_sys.truncate.current || + srv_shutdown_state != SRV_SHUTDOWN_NONE) + { + purge_truncation_task.wait(); trx_purge_truncate_history(); + } + else + srv_thread_pool->submit_task(&purge_truncation_task); if (n_pages_handled) continue; } @@ -1881,6 +1895,7 @@ static void srv_shutdown_purge_tasks() purge_thds.pop_front(); } n_purge_thds= 0; + purge_truncation_task.wait(); } /**********************************************************************//** diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index a606d3852ad..f8d97c1a14a 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -124,9 +124,15 @@ TRANSACTIONAL_INLINE inline bool TrxUndoRsegsIterator::set_next() #endif } - /* Only the purge coordinator task will access this object + /* Only the purge_coordinator_task will access this object purge_sys.rseg_iter, or any of purge_sys.hdr_page_no, - purge_sys.tail, purge_sys.head, or modify purge_sys.view. */ + purge_sys.tail. + The field purge_sys.head and purge_sys.view are only modified by + purge_sys_t::clone_end_view() + in the purge_coordinator_task + while holding exclusive purge_sys.latch. + The purge_sys.head may be read by + purge_truncation_callback(). */ ut_ad(last_trx_no == m_rsegs.trx_no); ut_a(purge_sys.hdr_page_no != FIL_NULL); ut_a(purge_sys.tail.trx_no <= last_trx_no); @@ -539,6 +545,24 @@ static void trx_purge_cleanse_purge_queue(const fil_space_t& space) mysql_mutex_unlock(&purge_sys.pq_mutex); } +dberr_t purge_sys_t::iterator::free_history() const +{ + for (auto &rseg : trx_sys.rseg_array) + if (rseg.space) + { + ut_ad(rseg.is_persistent()); + log_free_check(); + rseg.latch.wr_lock(SRW_LOCK_CALL); + dberr_t err= + trx_purge_truncate_rseg_history(rseg, *this, !rseg.is_referenced() && + purge_sys.sees(rseg.needs_purge)); + rseg.latch.wr_unlock(); + if (err) + return err; + } + return DB_SUCCESS; +} + #if defined __GNUC__ && __GNUC__ == 4 && !defined __clang__ # if defined __arm__ || defined __aarch64__ /* Work around an internal compiler error in GCC 4.8.5 */ @@ -547,7 +571,8 @@ __attribute__((optimize(0))) #endif /** Remove unnecessary history data from rollback segments. NOTE that when this -function is called, the caller (purge_coordinator_callback) +function is called, the caller +(purge_coordinator_callback or purge_truncation_callback) must not have any latches on undo log pages! */ TRANSACTIONAL_TARGET void trx_purge_truncate_history() @@ -563,22 +588,7 @@ TRANSACTIONAL_TARGET void trx_purge_truncate_history() head.undo_no= 0; } - dberr_t err= DB_SUCCESS; - for (auto &rseg : trx_sys.rseg_array) - if (rseg.space) - { - ut_ad(rseg.is_persistent()); - log_free_check(); - rseg.latch.wr_lock(SRW_LOCK_CALL); - if (dberr_t e= - trx_purge_truncate_rseg_history(rseg, head, - !rseg.is_referenced() && - purge_sys.sees(rseg.needs_purge))) - err= e; - rseg.latch.wr_unlock(); - } - - if (err != DB_SUCCESS || srv_undo_tablespaces_active < 2) + if (head.free_history() != DB_SUCCESS || srv_undo_tablespaces_active < 2) return; while (srv_undo_log_truncate) @@ -782,6 +792,7 @@ not_free: if trx_t::commit_empty() had been executed in the past, possibly before this server had been started up. */ + dberr_t err; buf_block_t *rblock= trx_rseg_header_create(&space, &rseg - trx_sys.rseg_array, trx_sys.get_max_trx_id(), @@ -1101,9 +1112,8 @@ trx_purge_fetch_next_rec( /** Run a purge batch. @param n_purge_threads number of purge threads -@return number of undo log pages handled in the batch */ -static -ulint +@return new purge_sys.head and the number of undo log pages handled */ +static std::pair trx_purge_attach_undo_recs(ulint n_purge_threads) { que_thr_t* thr; @@ -1113,7 +1123,7 @@ trx_purge_attach_undo_recs(ulint n_purge_threads) ut_a(n_purge_threads > 0); ut_a(UT_LIST_GET_LEN(purge_sys.query->thrs) >= n_purge_threads); - purge_sys.head = purge_sys.tail; + purge_sys_t::iterator head = purge_sys.tail; #ifdef UNIV_DEBUG i = 0; @@ -1142,7 +1152,7 @@ trx_purge_attach_undo_recs(ulint n_purge_threads) to a per purge node vector. */ thr = UT_LIST_GET_FIRST(purge_sys.query->thrs); - ut_ad(purge_sys.head <= purge_sys.tail); + ut_ad(head <= purge_sys.tail); i = 0; @@ -1155,8 +1165,8 @@ trx_purge_attach_undo_recs(ulint n_purge_threads) /* Track the max {trx_id, undo_no} for truncating the UNDO logs once we have purged the records. */ - if (purge_sys.head <= purge_sys.tail) { - purge_sys.head = purge_sys.tail; + if (head <= purge_sys.tail) { + head = purge_sys.tail; } /* Fetch the next record, and advance the purge_sys.tail. */ @@ -1195,9 +1205,9 @@ trx_purge_attach_undo_recs(ulint n_purge_threads) } } - ut_ad(purge_sys.head <= purge_sys.tail); + ut_ad(head <= purge_sys.tail); - return(n_pages_handled); + return std::make_pair(head, n_pages_handled); } extern tpool::waitable_task purge_worker_task; @@ -1221,7 +1231,8 @@ static void trx_purge_wait_for_workers_to_complete() } /** Update end_view at the end of a purge batch. */ -TRANSACTIONAL_INLINE void purge_sys_t::clone_end_view() +TRANSACTIONAL_INLINE +void purge_sys_t::clone_end_view(const purge_sys_t::iterator &head) { /* This is only invoked only by the purge coordinator, which is the only thread that can modify our inputs head, tail, view. @@ -1234,6 +1245,7 @@ TRANSACTIONAL_INLINE void purge_sys_t::clone_end_view() #else transactional_lock_guard g(end_latch); #endif + this->head= head; end_view= view; end_view.clamp_low_limit_id(trx_no); #ifdef SUX_LOCK_GENERIC @@ -1248,8 +1260,6 @@ Run a purge batch. @return number of undo log pages handled in the batch */ TRANSACTIONAL_TARGET ulint trx_purge(ulint n_tasks, ulint history_size) { - ulint n_pages_handled; - ut_ad(n_tasks > 0); purge_sys.clone_oldest_view(); @@ -1261,10 +1271,10 @@ TRANSACTIONAL_TARGET ulint trx_purge(ulint n_tasks, ulint history_size) #endif /* UNIV_DEBUG */ /* Fetch the UNDO recs that need to be purged. */ - n_pages_handled = trx_purge_attach_undo_recs(n_tasks); + const auto n = trx_purge_attach_undo_recs(n_tasks); { - ulint delay = n_pages_handled ? srv_max_purge_lag : 0; + ulint delay = n.second ? srv_max_purge_lag : 0; if (UNIV_UNLIKELY(delay)) { if (delay >= history_size) { no_throttle: @@ -1297,10 +1307,10 @@ TRANSACTIONAL_TARGET ulint trx_purge(ulint n_tasks, ulint history_size) trx_purge_wait_for_workers_to_complete(); - purge_sys.clone_end_view(); + purge_sys.clone_end_view(n.first); MONITOR_INC_VALUE(MONITOR_PURGE_INVOKED, 1); - MONITOR_INC_VALUE(MONITOR_PURGE_N_PAGE_HANDLED, n_pages_handled); + MONITOR_INC_VALUE(MONITOR_PURGE_N_PAGE_HANDLED, n.second); - return(n_pages_handled); + return n.second; } diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc index 12e2d54b608..6827d693345 100644 --- a/storage/innobase/trx/trx0undo.cc +++ b/storage/innobase/trx/trx0undo.cc @@ -1256,8 +1256,8 @@ trx_undo_reuse_cached(trx_t* trx, trx_rseg_t* rseg, trx_undo_t** pundo, ut_ad(rseg == trx->rsegs.m_redo.rseg); if (rseg->needs_purge <= trx->id) { - /* trx_purge_truncate_history() compares - rseg->needs_purge <= head.trx_no + /* trx_purge_truncate_history() checks + purge_sys.sees(rseg.needs_purge) so we need to compensate for that. The rseg->needs_purge after crash recovery would be at least trx->id + 1,