# # Bug #23070734 CONCURRENT TRUNCATE TABLES CAUSE STALLS # SET @ahi= @@global.innodb_adaptive_hash_index; SET GLOBAL innodb_adaptive_hash_index=OFF; SET GLOBAL innodb_adaptive_hash_index=ON; Test_1 :- Check if DDL operations are possible on table being truncated. Also check if DDL operations on other tables succeed. create table t1 (f1 int,f2 int,key(f2),f3 int) engine=innodb row_format=redundant; create index idx1 on t1(f3); create table t2 (f1 int,f2 int,key(f2),f3 int) engine=innodb row_format=redundant; create table t3 (f1 int,f2 int,key(f2)) engine=innodb row_format=redundant; insert into t1 values (10,20,30),(30,40,50),(50,60,70); insert into t1 select * from t1; insert into t1 select * from t1; insert into t1 select * from t1; insert into t2 values (10,20,30),(30,40,50),(50,60,70); insert into t2 select * from t2; insert into t2 select * from t2; insert into t2 select * from t2; insert into t3 values (10,20),(30,40),(50,50); insert into t3 select * from t3; insert into t3 select * from t3; SET session lock_wait_timeout = 1; connect con1,localhost,root,,; SET DEBUG_SYNC= 'buffer_pool_scan SIGNAL started WAIT_FOR finish_scan'; truncate table t1; connection default; SET DEBUG_SYNC= 'now WAIT_FOR started'; Check Analyze table. Gives lock time out error. analyze table t1; Table Op Msg_type Msg_text test.t1 analyze Error Lock wait timeout exceeded; try restarting transaction test.t1 analyze status Operation failed Check if we can turn off auto recalculation. alter table t1 STATS_AUTO_RECALC=0; ERROR HY000: Lock wait timeout exceeded; try restarting transaction Check if we can turn off persistent stats on the table alter table t1 STATS_PERSISTENT=0; ERROR HY000: Lock wait timeout exceeded; try restarting transaction Check if DML is possible on table being truncated insert into t1 values (10,89,99); ERROR HY000: Lock wait timeout exceeded; try restarting transaction Check if DDL is possible on table being truncated alter table t1 add column f4 int; ERROR HY000: Lock wait timeout exceeded; try restarting transaction check if table can be created with the same name create table t1 (bd int) engine=innodb; Got one of the listed errors check if index can be created on table being truncated create index idx1 on t1(f1); ERROR HY000: Lock wait timeout exceeded; try restarting transaction Check if DROP of table is possible during truncate drop table t1; ERROR HY000: Lock wait timeout exceeded; try restarting transaction Check if select is possible during truncate select * from t1; ERROR HY000: Lock wait timeout exceeded; try restarting transaction select * from t2 where t2.f1=t1.f1; ERROR 42S22: Unknown column 't1.f1' in 'where clause' Check concurrent truncate operation on table; truncate table t1; ERROR HY000: Lock wait timeout exceeded; try restarting transaction Check concurrent selects and inserts on the other table insert into t3 values (10,20),(30,40),(50,50); select * from t3 where f1=40; f1 f2 Concurrent truncate on other tables truncate table t2; Concurrent alters on the other tables alter table t2 add column f4 int; check if index can be created on the other table create index idx1 on t2(f3); Check if we can turn off persistent stats off entire instance SET GLOBAL innodb_stats_persistent=off; connect con2,localhost,root,,; set global innodb_adaptive_hash_index=off; connection default; SET DEBUG_SYNC= 'now SIGNAL finish_scan'; connection con1; disconnect con1; connection con2; disconnect con2; connection default; SET DEBUG_SYNC= 'RESET'; SET GLOBAL innodb_adaptive_hash_index=@ahi; drop table t1,t2,t3;