mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 e5c4c0842d
			
		
	
	
	e5c4c0842d
	
	
	
		
			
			opt_calc_index_goodness(): Correct an inaccurate condition. We can very well use a clustered index of a table that is subject to online rebuild. But we must not choose an index that has not been committed (it is a secondary index that was not fully created) or that is corrupted or not a normal B-tree index. opt_search_plan_for_table(): Remove some redundant code, now that opt_calc_index_goodness() checks against corrupted indexes. The test case allows this code to be exercised. The main observation in the following: ./mtr --rr innodb.stats_persistent rr replay var/log/mysqld.1.rr/latest-trace should be that when opt_search_plan_for_table() is being invoked by dict_stats_update_persistent() on the being-altered statistics table in the 2nd call after ha_innobase::inplace_alter_table(), and the fix in opt_calc_index_goodness() is absent, it would choose the code path if (n_fields == 0), that is, a full table scan, instead of searching for the record. The GDB commands to execute in "rr replay" would be as follows: break ha_innobase::inplace_alter_table continue break opt_search_plan_for_table continue continue next next … Reviewed by: Vladislav Lesin
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			736 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			736 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| --source include/have_innodb.inc
 | |
| --source include/have_debug.inc
 | |
| --source include/have_debug_sync.inc
 | |
| --source include/count_sessions.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-23991 dict_table_stats_lock() has unnecessarily long scope
 | |
| --echo #
 | |
| CREATE TABLE t1(a INT) ENGINE=INNODB STATS_PERSISTENT=1;
 | |
| 
 | |
| SET DEBUG_SYNC='dict_stats_update_persistent SIGNAL stop WAIT_FOR go';
 | |
| --send ANALYZE TABLE t1
 | |
| 
 | |
| --connect(con1, localhost, root)
 | |
| SET DEBUG_SYNC='now WAIT_FOR stop';
 | |
| 
 | |
| --replace_column 1 SUM
 | |
| SELECT SUM(DATA_LENGTH+INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
 | |
| 
 | |
| SET DEBUG_SYNC='now SIGNAL go';
 | |
| --disconnect con1
 | |
| 
 | |
| --connection default
 | |
| --reap
 | |
| SET DEBUG_SYNC= 'RESET';
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --source include/wait_until_count_sessions.inc
 |