mariadb/mysql-test/suite/innodb/r/innodb_force_recovery.result
Marko Mäkelä 13076351f1 MDEV-37152: Reimplement innodb_buffer_pool_read_requests
Let us remove the thread-local variable mariadb_stats and introduce
trx_t::pages_accessed, trx_t::active_handler_stats for more
efficiently maintaining some statistics inside InnoDB.

buf_pool.stat.n_page_gets: Reimplemented as Atomic_counter<ulint>.
This will no longer track some accesses in the background where
!current_thd() || !thd_to_trx(current_thd).

trx_t::free(), trx_t::commit_cleanup(): Apply pages_accessed
to buf_pool.stat.n_page_gets.

buf_read_ahead_report(): Report a completed read-ahead batch.

ha_innobase::estimate_rows_upper_bound(): Do not bother updating
trx_t::op_info around some quick arithmetics.

ha_innobase::records_in_range(): Do invoke mariadb_set_stats.
This will change some ANALYZE FORMAT=JSON SELECT results of the test
main.rowid_filter_innodb.

Reviewed by: Vladislav Lesin
Tested by: Saahil Alam
2025-09-29 14:13:27 +03:00

131 lines
4 KiB
Text

create table t1(f1 int not null, f2 int not null, index idx(f2))engine=innodb;
create table t2(f1 int primary key, f2 int, index idx(f2))engine=innodb;
insert into t1 values(1, 2);
insert into t2 values(1, 2);
SET GLOBAL innodb_fast_shutdown = 0;
# restart: --innodb-force-recovery=4
select variable_name,variable_value from information_schema.global_status
WHERE variable_name LIKE 'innodb_buffer_pool_%_requests';
variable_name variable_value
INNODB_BUFFER_POOL_READ_REQUESTS 0
INNODB_BUFFER_POOL_WRITE_REQUESTS 0
select * from t1;
f1 f2
1 2
select variable_name from information_schema.global_status
WHERE variable_name LIKE 'innodb_buffer_pool_%_requests' and variable_value>0;
variable_name
INNODB_BUFFER_POOL_READ_REQUESTS
begin;
insert into t1 values(2, 3);
rollback;
select variable_name from information_schema.global_status
WHERE variable_name LIKE 'innodb_buffer_pool_%_requests' and variable_value>0;
variable_name
INNODB_BUFFER_POOL_READ_REQUESTS
INNODB_BUFFER_POOL_WRITE_REQUESTS
alter table t1 add f3 int not null, algorithm=copy;
alter table t1 add f4 int not null, algorithm=inplace;
drop index idx on t1;
update t1 set f1=3 where f2=2;
create table t3(f1 int not null)engine=innodb;
drop table t3;
rename table t1 to t3;
rename table t3 to t1;
truncate table t1;
show tables;
Tables_in_test
t1
t2
# restart: --innodb-force-recovery=5
select * from t2;
f1 f2
1 2
insert into t2 values(2, 3);
ERROR HY000: Running in read-only mode
alter table t2 add f3 int not null, algorithm=copy;
ERROR HY000: Can't create table `test`.`t2` (errno: 165 "Table is read only")
alter table t2 add f3 int not null, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Running in read-only mode. Try ALGORITHM=COPY
drop index idx on t2;
ERROR HY000: Can't create table `test`.`t2` (errno: 165 "Table is read only")
update t2 set f1=3 where f2=2;
ERROR HY000: Running in read-only mode
create table t3(f1 int not null)engine=innodb;
ERROR HY000: Can't create table `test`.`t3` (errno: 165 "Table is read only")
drop table t3;
ERROR HY000: Table 't3' is read only
rename table t2 to t3;
ERROR HY000: Error on rename of './test/t2' to './test/t3' (errno: 165 "Table is read only")
truncate table t2;
ERROR HY000: Table 't2' is read only
drop table t2;
ERROR HY000: Table 't2' is read only
create schema db;
drop schema db;
show tables;
Tables_in_test
t1
t2
# restart: --innodb-force-recovery=6
select * from t2;
f1 f2
1 2
insert into t2 values(2, 3);
ERROR HY000: Table 't2' is read only
alter table t2 add f3 int not null, algorithm=copy;
ERROR HY000: Table 't2' is read only
alter table t2 add f3 int not null, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Running in read-only mode. Try ALGORITHM=COPY
drop index idx on t2;
ERROR HY000: Table 't2' is read only
update t2 set f1=3 where f2=2;
ERROR HY000: Table 't2' is read only
create table t3(f1 int not null)engine=innodb;
ERROR HY000: Can't create table `test`.`t3` (errno: 165 "Table is read only")
drop table t1;
ERROR HY000: Table 't1' is read only
rename table t2 to t3;
ERROR HY000: Error on rename of './test/t2' to './test/t3' (errno: 165 "Table is read only")
truncate table t2;
ERROR HY000: Table 't2' is read only
drop table t2;
ERROR HY000: Table 't2' is read only
show tables;
Tables_in_test
t1
t2
# restart: --innodb-force-recovery=2
select * from t2;
f1 f2
1 2
begin;
update t2 set f2=3;
connect con1,localhost,root,,;
# Force a redo log flush of the above uncommitted UPDATE
SET GLOBAL innodb_flush_log_at_trx_commit=1;
drop table t1;
disconnect con1;
connection default;
# Kill the server
# restart: --innodb-force-recovery=3
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
select * from t2;
f1 f2
1 3
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
select * from t2;
f1 f2
1 2
SET SESSION innodb_lock_wait_timeout=1;
insert into t2 values(1,2);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
insert into t2 values(9,10);
# restart
select * from t2;
f1 f2
1 2
9 10
drop table t2;
show tables;
Tables_in_test