From a89ee3cd154a67df2231f034fd8339f9225dbe64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Sun, 17 Mar 2019 13:33:31 +0200 Subject: [PATCH] MDEV-18952 CHECK TABLE should use READ UNCOMMITED if innodb_force_recovery>=5 MDEV-15418 changed InnoDB to use the READ UNCOMMITTED isolation level when the transaction recovery is disabled by setting innodb_force_recovery to 5 or 6. Alas, CHECK TABLE would still internally use REPEATABLE READ. If the server was started without purge running into completion (and resetting all DB_TRX_ID thanks to MDEV-12288), this would cause errors about any DB_TRX_ID that had not been reset to 0. --- storage/innobase/handler/ha_innodb.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index a27e1df5dfa..f33527b156d 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -14512,8 +14512,11 @@ ha_innobase::check( /* We must run the index record counts at an isolation level >= READ COMMITTED, because a dirty read can see a wrong number of records in some index; to play safe, we use always - REPEATABLE READ here */ - m_prebuilt->trx->isolation_level = TRX_ISO_REPEATABLE_READ; + REPEATABLE READ here (except when undo logs are unavailable) */ + m_prebuilt->trx->isolation_level = srv_force_recovery + >= SRV_FORCE_NO_UNDO_LOG_SCAN + ? TRX_ISO_READ_UNCOMMITTED + : TRX_ISO_REPEATABLE_READ; ut_ad(!m_prebuilt->table->corrupted);