From 4f4373fe31542342849e1261f661b1c7795475a2 Mon Sep 17 00:00:00 2001 From: Eric Herman Date: Wed, 26 Aug 2015 10:02:06 +0200 Subject: [PATCH 1/4] Add eviction count for table cache lru cleanup (innobase) This is a port of dveeden's work: https://github.com/dveeden/mysql-server/commit/e9d00e859e3854bf8f71873caa69c060e670350b (Mostly changes in linenumbers, a bit of whitespace fix-up.) --- storage/innobase/include/srv0mon.h | 1 + storage/innobase/srv/srv0mon.cc | 5 +++++ storage/innobase/srv/srv0srv.cc | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/storage/innobase/include/srv0mon.h b/storage/innobase/include/srv0mon.h index 79a8a5bf848..89247917147 100644 --- a/storage/innobase/include/srv0mon.h +++ b/storage/innobase/include/srv0mon.h @@ -378,6 +378,7 @@ enum monitor_id_t { MONITOR_SRV_MEM_VALIDATE_MICROSECOND, MONITOR_SRV_PURGE_MICROSECOND, MONITOR_SRV_DICT_LRU_MICROSECOND, + MONITOR_SRV_DICT_LRU_EVICT_COUNT, MONITOR_SRV_CHECKPOINT_MICROSECOND, MONITOR_OVLD_SRV_DBLWR_WRITES, MONITOR_OVLD_SRV_DBLWR_PAGES_WRITTEN, diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc index 0bcc876f591..7226139ebeb 100644 --- a/storage/innobase/srv/srv0mon.cc +++ b/storage/innobase/srv/srv0mon.cc @@ -1196,6 +1196,11 @@ static monitor_info_t innodb_counter_info[] = MONITOR_NONE, MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_MICROSECOND}, + {"innodb_dict_lru_count", "server", + "Number of tables evicted from DICT LRU list", + MONITOR_NONE, + MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT}, + {"innodb_checkpoint_usec", "server", "Time (in microseconds) spent by master thread to do checkpoint", MONITOR_NONE, diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index df7cb656d8c..b0b43953171 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -2274,6 +2274,7 @@ srv_master_do_active_tasks(void) { ib_time_t cur_time = ut_time(); ullint counter_time = ut_time_us(NULL); + ulint n_evicted = 0; /* First do the tasks that we are suppose to do at each invocation of this function. */ @@ -2334,7 +2335,9 @@ srv_master_do_active_tasks(void) if (cur_time % SRV_MASTER_DICT_LRU_INTERVAL == 0) { srv_main_thread_op_info = "enforcing dict cache limit"; - srv_master_evict_from_table_cache(50); + n_evicted = srv_master_evict_from_table_cache(50); + MONITOR_INC_VALUE( + MONITOR_SRV_DICT_LRU_EVICT_COUNT, n_evicted); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_DICT_LRU_MICROSECOND, counter_time); } From df32920ba00a2b3615f3b6ed06d5bf4581fa254c Mon Sep 17 00:00:00 2001 From: Eric Herman Date: Wed, 26 Aug 2015 10:26:19 +0200 Subject: [PATCH 2/4] Add eviction count for table cache lru cleanup (xtradb) --- storage/xtradb/include/srv0mon.h | 1 + storage/xtradb/srv/srv0mon.cc | 5 +++++ storage/xtradb/srv/srv0srv.cc | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/storage/xtradb/include/srv0mon.h b/storage/xtradb/include/srv0mon.h index 094eb0de610..249e7b2c41e 100644 --- a/storage/xtradb/include/srv0mon.h +++ b/storage/xtradb/include/srv0mon.h @@ -379,6 +379,7 @@ enum monitor_id_t { MONITOR_SRV_MEM_VALIDATE_MICROSECOND, MONITOR_SRV_PURGE_MICROSECOND, MONITOR_SRV_DICT_LRU_MICROSECOND, + MONITOR_SRV_DICT_LRU_EVICT_COUNT, MONITOR_SRV_CHECKPOINT_MICROSECOND, MONITOR_OVLD_SRV_DBLWR_WRITES, MONITOR_OVLD_SRV_DBLWR_PAGES_WRITTEN, diff --git a/storage/xtradb/srv/srv0mon.cc b/storage/xtradb/srv/srv0mon.cc index 547d6c8c90b..4a260d8100f 100644 --- a/storage/xtradb/srv/srv0mon.cc +++ b/storage/xtradb/srv/srv0mon.cc @@ -1196,6 +1196,11 @@ static monitor_info_t innodb_counter_info[] = MONITOR_NONE, MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_MICROSECOND}, + {"innodb_dict_lru_count", "server", + "Number of tables evicted from DICT LRU list", + MONITOR_NONE, + MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT}, + {"innodb_checkpoint_usec", "server", "Time (in microseconds) spent by master thread to do checkpoint", MONITOR_NONE, diff --git a/storage/xtradb/srv/srv0srv.cc b/storage/xtradb/srv/srv0srv.cc index 5dfb3a35bb9..12bd82f9158 100644 --- a/storage/xtradb/srv/srv0srv.cc +++ b/storage/xtradb/srv/srv0srv.cc @@ -2881,6 +2881,7 @@ srv_master_do_active_tasks(void) { ib_time_t cur_time = ut_time(); ullint counter_time = ut_time_us(NULL); + ulint n_evicted = 0; /* First do the tasks that we are suppose to do at each invocation of this function. */ @@ -2941,7 +2942,9 @@ srv_master_do_active_tasks(void) if (cur_time % SRV_MASTER_DICT_LRU_INTERVAL == 0) { srv_main_thread_op_info = "enforcing dict cache limit"; - srv_master_evict_from_table_cache(50); + n_evicted = srv_master_evict_from_table_cache(50); + MONITOR_INC_VALUE( + MONITOR_SRV_DICT_LRU_EVICT_COUNT, n_evicted); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_DICT_LRU_MICROSECOND, counter_time); } From b7abdcf5c7389d1b4b5b3acfcae15373861e03b8 Mon Sep 17 00:00:00 2001 From: Eric Herman Date: Wed, 26 Aug 2015 11:48:19 +0200 Subject: [PATCH 3/4] Add lru evict count for the idle loop (innobase) port of work by dveeden: https://github.com/dveeden/mysql-server/commit/555ca34958a8ed191f34eeb2333e0d7c30e12fce --- storage/innobase/include/srv0mon.h | 3 ++- storage/innobase/srv/srv0mon.cc | 11 ++++++++--- storage/innobase/srv/srv0srv.cc | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/storage/innobase/include/srv0mon.h b/storage/innobase/include/srv0mon.h index 89247917147..5964f2c4819 100644 --- a/storage/innobase/include/srv0mon.h +++ b/storage/innobase/include/srv0mon.h @@ -378,7 +378,8 @@ enum monitor_id_t { MONITOR_SRV_MEM_VALIDATE_MICROSECOND, MONITOR_SRV_PURGE_MICROSECOND, MONITOR_SRV_DICT_LRU_MICROSECOND, - MONITOR_SRV_DICT_LRU_EVICT_COUNT, + MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE, + MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE, MONITOR_SRV_CHECKPOINT_MICROSECOND, MONITOR_OVLD_SRV_DBLWR_WRITES, MONITOR_OVLD_SRV_DBLWR_PAGES_WRITTEN, diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc index 7226139ebeb..d8254c2b8ed 100644 --- a/storage/innobase/srv/srv0mon.cc +++ b/storage/innobase/srv/srv0mon.cc @@ -1196,10 +1196,15 @@ static monitor_info_t innodb_counter_info[] = MONITOR_NONE, MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_MICROSECOND}, - {"innodb_dict_lru_count", "server", - "Number of tables evicted from DICT LRU list", + {"innodb_dict_lru_count_active", "server", + "Number of tables evicted from DICT LRU list in the active loop", MONITOR_NONE, - MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT}, + MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE}, + + {"innodb_dict_lru_count_idle", "server", + "Number of tables evicted from DICT LRU list in the idle loop", + MONITOR_NONE, + MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE}, {"innodb_checkpoint_usec", "server", "Time (in microseconds) spent by master thread to do checkpoint", diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index b0b43953171..9dd062f3d37 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -2337,7 +2337,7 @@ srv_master_do_active_tasks(void) srv_main_thread_op_info = "enforcing dict cache limit"; n_evicted = srv_master_evict_from_table_cache(50); MONITOR_INC_VALUE( - MONITOR_SRV_DICT_LRU_EVICT_COUNT, n_evicted); + MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE, n_evicted); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_DICT_LRU_MICROSECOND, counter_time); } @@ -2369,6 +2369,7 @@ srv_master_do_idle_tasks(void) /*==========================*/ { ullint counter_time; + ulint n_evicted = 0; ++srv_main_idle_loops; @@ -2406,7 +2407,9 @@ srv_master_do_idle_tasks(void) } srv_main_thread_op_info = "enforcing dict cache limit"; - srv_master_evict_from_table_cache(100); + n_evicted = srv_master_evict_from_table_cache(100); + MONITOR_INC_VALUE( + MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE, n_evicted); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_DICT_LRU_MICROSECOND, counter_time); From f66ef6a05d151a884acbc861dbbe0288232317cd Mon Sep 17 00:00:00 2001 From: Eric Herman Date: Wed, 26 Aug 2015 11:50:47 +0200 Subject: [PATCH 4/4] Add lru evict count for the idle loop (xtradb) --- storage/xtradb/include/srv0mon.h | 3 ++- storage/xtradb/srv/srv0mon.cc | 11 ++++++++--- storage/xtradb/srv/srv0srv.cc | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/storage/xtradb/include/srv0mon.h b/storage/xtradb/include/srv0mon.h index 249e7b2c41e..37d14734c71 100644 --- a/storage/xtradb/include/srv0mon.h +++ b/storage/xtradb/include/srv0mon.h @@ -379,7 +379,8 @@ enum monitor_id_t { MONITOR_SRV_MEM_VALIDATE_MICROSECOND, MONITOR_SRV_PURGE_MICROSECOND, MONITOR_SRV_DICT_LRU_MICROSECOND, - MONITOR_SRV_DICT_LRU_EVICT_COUNT, + MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE, + MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE, MONITOR_SRV_CHECKPOINT_MICROSECOND, MONITOR_OVLD_SRV_DBLWR_WRITES, MONITOR_OVLD_SRV_DBLWR_PAGES_WRITTEN, diff --git a/storage/xtradb/srv/srv0mon.cc b/storage/xtradb/srv/srv0mon.cc index 4a260d8100f..0b2e29e5f68 100644 --- a/storage/xtradb/srv/srv0mon.cc +++ b/storage/xtradb/srv/srv0mon.cc @@ -1196,10 +1196,15 @@ static monitor_info_t innodb_counter_info[] = MONITOR_NONE, MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_MICROSECOND}, - {"innodb_dict_lru_count", "server", - "Number of tables evicted from DICT LRU list", + {"innodb_dict_lru_count_active", "server", + "Number of tables evicted from DICT LRU list in the active loop", MONITOR_NONE, - MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT}, + MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE}, + + {"innodb_dict_lru_count_idle", "server", + "Number of tables evicted from DICT LRU list in the idle loop", + MONITOR_NONE, + MONITOR_DEFAULT_START, MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE}, {"innodb_checkpoint_usec", "server", "Time (in microseconds) spent by master thread to do checkpoint", diff --git a/storage/xtradb/srv/srv0srv.cc b/storage/xtradb/srv/srv0srv.cc index 12bd82f9158..abe47e91339 100644 --- a/storage/xtradb/srv/srv0srv.cc +++ b/storage/xtradb/srv/srv0srv.cc @@ -2944,7 +2944,7 @@ srv_master_do_active_tasks(void) srv_main_thread_op_info = "enforcing dict cache limit"; n_evicted = srv_master_evict_from_table_cache(50); MONITOR_INC_VALUE( - MONITOR_SRV_DICT_LRU_EVICT_COUNT, n_evicted); + MONITOR_SRV_DICT_LRU_EVICT_COUNT_ACTIVE, n_evicted); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_DICT_LRU_MICROSECOND, counter_time); } @@ -2976,6 +2976,7 @@ srv_master_do_idle_tasks(void) /*==========================*/ { ullint counter_time; + ulint n_evicted = 0; ++srv_main_idle_loops; @@ -3013,7 +3014,9 @@ srv_master_do_idle_tasks(void) } srv_main_thread_op_info = "enforcing dict cache limit"; - srv_master_evict_from_table_cache(100); + n_evicted = srv_master_evict_from_table_cache(100); + MONITOR_INC_VALUE( + MONITOR_SRV_DICT_LRU_EVICT_COUNT_IDLE, n_evicted); MONITOR_INC_TIME_IN_MICRO_SECS( MONITOR_SRV_DICT_LRU_MICROSECOND, counter_time);