|  |  | @ -415,73 +415,6 @@ done: | 
			
		
	
		
			
				
					|  |  |  | 	export_vars.innodb_buffer_pool_load_incomplete = 0; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /*****************************************************************//**
 | 
			
		
	
		
			
				
					|  |  |  | Artificially delay the buffer pool loading if necessary. The idea of | 
			
		
	
		
			
				
					|  |  |  | this function is to prevent hogging the server with IO and slowing down | 
			
		
	
		
			
				
					|  |  |  | too much normal client queries. */ | 
			
		
	
		
			
				
					|  |  |  | UNIV_INLINE | 
			
		
	
		
			
				
					|  |  |  | void | 
			
		
	
		
			
				
					|  |  |  | buf_load_throttle_if_needed( | 
			
		
	
		
			
				
					|  |  |  | /*========================*/ | 
			
		
	
		
			
				
					|  |  |  | 	ulint*	last_check_time,	/*!< in/out: milliseconds since epoch
 | 
			
		
	
		
			
				
					|  |  |  | 					of the last time we did check if | 
			
		
	
		
			
				
					|  |  |  | 					throttling is needed, we do the check | 
			
		
	
		
			
				
					|  |  |  | 					every srv_io_capacity IO ops. */ | 
			
		
	
		
			
				
					|  |  |  | 	ulint*	last_activity_count, | 
			
		
	
		
			
				
					|  |  |  | 	ulint	n_io)			/*!< in: number of IO ops done since
 | 
			
		
	
		
			
				
					|  |  |  | 					buffer pool load has started */ | 
			
		
	
		
			
				
					|  |  |  | { | 
			
		
	
		
			
				
					|  |  |  | 	if (n_io % srv_io_capacity < srv_io_capacity - 1) { | 
			
		
	
		
			
				
					|  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	if (*last_check_time == 0 || *last_activity_count == 0) { | 
			
		
	
		
			
				
					|  |  |  | 		*last_check_time = ut_time_ms(); | 
			
		
	
		
			
				
					|  |  |  | 		*last_activity_count = srv_get_activity_count(); | 
			
		
	
		
			
				
					|  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	/* srv_io_capacity IO operations have been performed by buffer pool
 | 
			
		
	
		
			
				
					|  |  |  | 	load since the last time we were here. */ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	/* If no other activity, then keep going without any delay. */ | 
			
		
	
		
			
				
					|  |  |  | 	if (srv_get_activity_count() == *last_activity_count) { | 
			
		
	
		
			
				
					|  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	/* There has been other activity, throttle. */ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	ulint	now = ut_time_ms(); | 
			
		
	
		
			
				
					|  |  |  | 	ulint	elapsed_time = now - *last_check_time; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	/* Notice that elapsed_time is not the time for the last
 | 
			
		
	
		
			
				
					|  |  |  | 	srv_io_capacity IO operations performed by BP load. It is the | 
			
		
	
		
			
				
					|  |  |  | 	time elapsed since the last time we detected that there has been | 
			
		
	
		
			
				
					|  |  |  | 	other activity. This has a small and acceptable deficiency, e.g.: | 
			
		
	
		
			
				
					|  |  |  | 	1. BP load runs and there is no other activity. | 
			
		
	
		
			
				
					|  |  |  | 	2. Other activity occurs, we run N IO operations after that and | 
			
		
	
		
			
				
					|  |  |  | 	   enter here (where 0 <= N < srv_io_capacity). | 
			
		
	
		
			
				
					|  |  |  | 	3. last_check_time is very old and we do not sleep at this time, but | 
			
		
	
		
			
				
					|  |  |  | 	   only update last_check_time and last_activity_count. | 
			
		
	
		
			
				
					|  |  |  | 	4. We run srv_io_capacity more IO operations and call this function | 
			
		
	
		
			
				
					|  |  |  | 	   again. | 
			
		
	
		
			
				
					|  |  |  | 	5. There has been more other activity and thus we enter here. | 
			
		
	
		
			
				
					|  |  |  | 	6. Now last_check_time is recent and we sleep if necessary to prevent | 
			
		
	
		
			
				
					|  |  |  | 	   more than srv_io_capacity IO operations per second. | 
			
		
	
		
			
				
					|  |  |  | 	The deficiency is that we could have slept at 3., but for this we | 
			
		
	
		
			
				
					|  |  |  | 	would have to update last_check_time before the | 
			
		
	
		
			
				
					|  |  |  | 	"cur_activity_count == *last_activity_count" check and calling | 
			
		
	
		
			
				
					|  |  |  | 	ut_time_ms() that often may turn out to be too expensive. */ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	if (elapsed_time < 1000 /* 1 sec (1000 milli secs) */) { | 
			
		
	
		
			
				
					|  |  |  | 		std::this_thread::sleep_for( | 
			
		
	
		
			
				
					|  |  |  | 			std::chrono::milliseconds(1000 - elapsed_time)); | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	*last_check_time = ut_time_ms(); | 
			
		
	
		
			
				
					|  |  |  | 	*last_activity_count = srv_get_activity_count(); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /*****************************************************************//**
 | 
			
		
	
		
			
				
					|  |  |  | Perform a buffer pool load from the file specified by | 
			
		
	
		
			
				
					|  |  |  | innodb_buffer_pool_filename. If any errors occur then the value of | 
			
		
	
	
		
			
				
					|  |  | @ -631,9 +564,6 @@ buf_load() | 
			
		
	
		
			
				
					|  |  |  | 		std::sort(dump, dump + dump_n); | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	ulint		last_check_time = 0; | 
			
		
	
		
			
				
					|  |  |  | 	ulint		last_activity_cnt = 0; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	/* Avoid calling the expensive fil_space_t::get() for each
 | 
			
		
	
		
			
				
					|  |  |  | 	page within the same tablespace. dump[] is sorted by (space, page), | 
			
		
	
		
			
				
					|  |  |  | 	so all pages from a given tablespace are consecutive. */ | 
			
		
	
	
		
			
				
					|  |  | @ -707,9 +637,6 @@ buf_load() | 
			
		
	
		
			
				
					|  |  |  | 			return; | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		buf_load_throttle_if_needed( | 
			
		
	
		
			
				
					|  |  |  | 			&last_check_time, &last_activity_cnt, i); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | #ifdef UNIV_DEBUG
 | 
			
		
	
		
			
				
					|  |  |  | 		if ((i+1) >= srv_buf_pool_load_pages_abort) { | 
			
		
	
		
			
				
					|  |  |  | 			buf_load_abort_flag = true; | 
			
		
	
	
		
			
				
					|  |  | 
 |