mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Replace the array of mutexes that used to protect dict_index_t::stat_n_diff_key_vals[] with an array of rw locks that protects all the stats related members in dict_table_t and all of its indexes. Approved by: Jimmy (rb://503)
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# http://bugs.mysql.com/53046
 | 
						|
# dict_update_statistics_low can still be run concurrently on same table
 | 
						|
#
 | 
						|
# This is a symbolic test, it would not fail if the bug is present.
 | 
						|
# Rather those SQL commands have been used during manual testing under
 | 
						|
# UNIV_DEBUG & UNIV_SYNC_DEBUG to test all changed codepaths for locking
 | 
						|
# correctness.
 | 
						|
#
 | 
						|
 | 
						|
-- source include/have_innodb_plugin.inc
 | 
						|
 | 
						|
CREATE TABLE bug53046_1 (c1 INT PRIMARY KEY) ENGINE=INNODB;
 | 
						|
CREATE TABLE bug53046_2 (c2 INT PRIMARY KEY,
 | 
						|
		 FOREIGN KEY (c2) REFERENCES bug53046_1(c1)
 | 
						|
		 ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=INNODB;
 | 
						|
 | 
						|
INSERT INTO bug53046_1 VALUES (1);
 | 
						|
let $i = 5;
 | 
						|
while ($i) {
 | 
						|
	eval INSERT INTO bug53046_1 SELECT c1+(SELECT MAX(c1) FROM bug53046_1)
 | 
						|
		FROM bug53046_1;
 | 
						|
	dec $i;
 | 
						|
}
 | 
						|
 | 
						|
INSERT INTO bug53046_2 VALUES (1), (2);
 | 
						|
 | 
						|
# CREATE TABLE innodb_table_monitor (a int) ENGINE=INNODB;
 | 
						|
# wait more than 1 minute and observe the mysqld output
 | 
						|
# DROP TABLE innodb_table_monitor;
 | 
						|
 | 
						|
ANALYZE TABLE bug53046_1;
 | 
						|
 | 
						|
# this prints create time and other nondeterministic data
 | 
						|
-- disable_result_log
 | 
						|
SHOW TABLE STATUS LIKE 'bug53046_1';
 | 
						|
-- enable_result_log
 | 
						|
 | 
						|
UPDATE bug53046_1 SET c1 = c1 - 1;
 | 
						|
 | 
						|
DELETE FROM bug53046_1;
 | 
						|
 | 
						|
INSERT INTO bug53046_1 VALUES (1);
 | 
						|
INSERT INTO bug53046_2 VALUES (1);
 | 
						|
TRUNCATE TABLE bug53046_2;
 | 
						|
 | 
						|
DROP TABLE bug53046_2;
 | 
						|
DROP TABLE bug53046_1;
 |