# name : innodb_show_status_extend.patch # introduced : XtraDB based 5.5.8 # maintainer : Yasufumi # #!!! notice !!! # Any small change to this file in the main branch # should be done or reviewed by the maintainer! --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -641,6 +641,16 @@ trx_t* trx); /*!< in: transaction handle */ static SHOW_VAR innodb_status_variables[]= { + {"adaptive_hash_cells", + (char*) &export_vars.innodb_adaptive_hash_cells, SHOW_LONG}, + {"adaptive_hash_heap_buffers", + (char*) &export_vars.innodb_adaptive_hash_heap_buffers, SHOW_LONG}, + {"adaptive_hash_hash_searches", + (char*) &export_vars.innodb_adaptive_hash_hash_searches, SHOW_LONG}, + {"adaptive_hash_non_hash_searches", + (char*) &export_vars.innodb_adaptive_hash_non_hash_searches, SHOW_LONG}, + {"background_log_sync", + (char*) &export_vars.innodb_background_log_sync, SHOW_LONG}, {"buffer_pool_pages_data", (char*) &export_vars.innodb_buffer_pool_pages_data, SHOW_LONG}, {"buffer_pool_pages_dirty", @@ -655,8 +665,14 @@ {"buffer_pool_pages_latched", (char*) &export_vars.innodb_buffer_pool_pages_latched, SHOW_LONG}, #endif /* UNIV_DEBUG */ + {"buffer_pool_pages_made_not_young", + (char*) &export_vars.innodb_buffer_pool_pages_made_not_young, SHOW_LONG}, + {"buffer_pool_pages_made_young", + (char*) &export_vars.innodb_buffer_pool_pages_made_young, SHOW_LONG}, {"buffer_pool_pages_misc", (char*) &export_vars.innodb_buffer_pool_pages_misc, SHOW_LONG}, + {"buffer_pool_pages_old", + (char*) &export_vars.innodb_buffer_pool_pages_old, SHOW_LONG}, {"buffer_pool_pages_total", (char*) &export_vars.innodb_buffer_pool_pages_total, SHOW_LONG}, {"buffer_pool_read_ahead_rnd", @@ -673,6 +689,12 @@ (char*) &export_vars.innodb_buffer_pool_wait_free, SHOW_LONG}, {"buffer_pool_write_requests", (char*) &export_vars.innodb_buffer_pool_write_requests, SHOW_LONG}, + {"checkpoint_age", + (char*) &export_vars.innodb_checkpoint_age, SHOW_LONG}, + {"checkpoint_max_age", + (char*) &export_vars.innodb_checkpoint_max_age, SHOW_LONG}, + {"checkpoint_target_age", + (char*) &export_vars.innodb_checkpoint_target_age, SHOW_LONG}, {"data_fsyncs", (char*) &export_vars.innodb_data_fsyncs, SHOW_LONG}, {"data_pending_fsyncs", @@ -699,12 +721,66 @@ (char*) &export_vars.innodb_dict_tables, SHOW_LONG}, {"have_atomic_builtins", (char*) &export_vars.innodb_have_atomic_builtins, SHOW_BOOL}, + {"history_list_length", + (char*) &export_vars.innodb_history_list_length, SHOW_LONG}, + {"ibuf_discarded_delete_marks", + (char*) &export_vars.innodb_ibuf_discarded_delete_marks, SHOW_LONG}, + {"ibuf_discarded_deletes", + (char*) &export_vars.innodb_ibuf_discarded_deletes, SHOW_LONG}, + {"ibuf_discarded_inserts", + (char*) &export_vars.innodb_ibuf_discarded_inserts, SHOW_LONG}, + {"ibuf_free_list", + (char*) &export_vars.innodb_ibuf_free_list, SHOW_LONG}, + {"ibuf_merged_delete_marks", + (char*) &export_vars.innodb_ibuf_merged_delete_marks, SHOW_LONG}, + {"ibuf_merged_deletes", + (char*) &export_vars.innodb_ibuf_merged_deletes, SHOW_LONG}, + {"ibuf_merged_inserts", + (char*) &export_vars.innodb_ibuf_merged_inserts, SHOW_LONG}, + {"ibuf_merges", + (char*) &export_vars.innodb_ibuf_merges, SHOW_LONG}, + {"ibuf_segment_size", + (char*) &export_vars.innodb_ibuf_segment_size, SHOW_LONG}, + {"ibuf_size", + (char*) &export_vars.innodb_ibuf_size, SHOW_LONG}, {"log_waits", (char*) &export_vars.innodb_log_waits, SHOW_LONG}, {"log_write_requests", (char*) &export_vars.innodb_log_write_requests, SHOW_LONG}, {"log_writes", (char*) &export_vars.innodb_log_writes, SHOW_LONG}, + {"lsn_current", + (char*) &export_vars.innodb_lsn_current, SHOW_LONGLONG}, + {"lsn_flushed", + (char*) &export_vars.innodb_lsn_flushed, SHOW_LONGLONG}, + {"lsn_last_checkpoint", + (char*) &export_vars.innodb_lsn_last_checkpoint, SHOW_LONGLONG}, + {"master_thread_1_second_loops", + (char*) &export_vars.innodb_master_thread_1_second_loops, SHOW_LONG}, + {"master_thread_10_second_loops", + (char*) &export_vars.innodb_master_thread_10_second_loops, SHOW_LONG}, + {"master_thread_background_loops", + (char*) &export_vars.innodb_master_thread_background_loops, SHOW_LONG}, + {"master_thread_main_flush_loops", + (char*) &export_vars.innodb_master_thread_main_flush_loops, SHOW_LONG}, + {"master_thread_sleeps", + (char*) &export_vars.innodb_master_thread_sleeps, SHOW_LONG}, + {"max_trx_id", + (char*) &export_vars.innodb_max_trx_id, SHOW_LONGLONG}, + {"mem_adaptive_hash", + (char*) &export_vars.innodb_mem_adaptive_hash, SHOW_LONG}, + {"mem_dictionary", + (char*) &export_vars.innodb_mem_dictionary, SHOW_LONG}, + {"mem_total", + (char*) &export_vars.innodb_mem_total, SHOW_LONG}, + {"mutex_os_waits", + (char*) &export_vars.innodb_mutex_os_waits, SHOW_LONGLONG}, + {"mutex_spin_rounds", + (char*) &export_vars.innodb_mutex_spin_rounds, SHOW_LONGLONG}, + {"mutex_spin_waits", + (char*) &export_vars.innodb_mutex_spin_waits, SHOW_LONGLONG}, + {"oldest_view_low_limit_trx_id", + (char*) &export_vars.innodb_oldest_view_low_limit_trx_id, SHOW_LONGLONG}, {"os_log_fsyncs", (char*) &export_vars.innodb_os_log_fsyncs, SHOW_LONG}, {"os_log_pending_fsyncs", @@ -721,8 +797,14 @@ (char*) &export_vars.innodb_pages_read, SHOW_LONG}, {"pages_written", (char*) &export_vars.innodb_pages_written, SHOW_LONG}, + {"purge_trx_id", + (char*) &export_vars.innodb_purge_trx_id, SHOW_LONGLONG}, + {"purge_undo_no", + (char*) &export_vars.innodb_purge_undo_no, SHOW_LONGLONG}, {"row_lock_current_waits", (char*) &export_vars.innodb_row_lock_current_waits, SHOW_LONG}, + {"current_row_locks", + (char*) &export_vars.innodb_current_row_locks, SHOW_LONG}, {"row_lock_time", (char*) &export_vars.innodb_row_lock_time, SHOW_LONGLONG}, {"row_lock_time_avg", @@ -739,8 +821,20 @@ (char*) &export_vars.innodb_rows_read, SHOW_LONG}, {"rows_updated", (char*) &export_vars.innodb_rows_updated, SHOW_LONG}, + {"s_lock_os_waits", + (char*) &export_vars.innodb_s_lock_os_waits, SHOW_LONGLONG}, + {"s_lock_spin_rounds", + (char*) &export_vars.innodb_s_lock_spin_rounds, SHOW_LONGLONG}, + {"s_lock_spin_waits", + (char*) &export_vars.innodb_s_lock_spin_waits, SHOW_LONGLONG}, {"truncated_status_writes", (char*) &export_vars.innodb_truncated_status_writes, SHOW_LONG}, + {"x_lock_os_waits", + (char*) &export_vars.innodb_x_lock_os_waits, SHOW_LONGLONG}, + {"x_lock_spin_rounds", + (char*) &export_vars.innodb_x_lock_spin_rounds, SHOW_LONGLONG}, + {"x_lock_spin_waits", + (char*) &export_vars.innodb_x_lock_spin_waits, SHOW_LONGLONG}, {NullS, NullS, SHOW_LONG} }; --- a/storage/innobase/ibuf/ibuf0ibuf.c +++ b/storage/innobase/ibuf/ibuf0ibuf.c @@ -478,6 +478,45 @@ } /******************************************************************//** +Function to pass ibuf status variables */ +UNIV_INTERN +void +ibuf_export_ibuf_status( +/*====================*/ + ulint* size, + ulint* free_list, + ulint* segment_size, + ulint* merges, + ulint* merged_inserts, + ulint* merged_delete_marks, + ulint* merged_deletes, + ulint* discarded_inserts, + ulint* discarded_delete_marks, + ulint* discarded_deletes) +{ + *size + = ibuf->size; + *free_list + = ibuf->free_list_len; + *segment_size + = ibuf->seg_size; + *merges + = ibuf->n_merges; + *merged_inserts + = ibuf->n_merged_ops[IBUF_OP_INSERT]; + *merged_delete_marks + = ibuf->n_merged_ops[IBUF_OP_DELETE_MARK]; + *merged_deletes + = ibuf->n_merged_ops[IBUF_OP_DELETE]; + *discarded_inserts + = ibuf->n_discarded_ops[IBUF_OP_INSERT]; + *discarded_delete_marks + = ibuf->n_discarded_ops[IBUF_OP_DELETE_MARK]; + *discarded_deletes + = ibuf->n_discarded_ops[IBUF_OP_DELETE]; +} + +/******************************************************************//** Updates the size information of the ibuf, assuming the segment size has not changed. */ static --- a/storage/innobase/include/ibuf0ibuf.h +++ b/storage/innobase/include/ibuf0ibuf.h @@ -438,6 +438,22 @@ void ibuf_close(void); /*============*/ +/******************************************************************//** +Function to pass ibuf status variables */ +UNIV_INTERN +void +ibuf_export_ibuf_status( +/*====================*/ + ulint* size, + ulint* free_list, + ulint* segment_size, + ulint* merges, + ulint* merged_inserts, + ulint* merged_delete_marks, + ulint* merged_deletes, + ulint* discarded_inserts, + ulint* discarded_delete_marks, + ulint* discarded_deletes); #define IBUF_HEADER_PAGE_NO FSP_IBUF_HEADER_PAGE_NO #define IBUF_TREE_ROOT_PAGE_NO FSP_IBUF_TREE_ROOT_PAGE_NO --- a/storage/innobase/include/lock0lock.h +++ b/storage/innobase/include/lock0lock.h @@ -817,6 +817,7 @@ /** The lock system struct */ struct lock_sys_struct{ hash_table_t* rec_hash; /*!< hash table of the record locks */ + ulint rec_num; }; /** The lock system */ --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -742,6 +742,11 @@ /** Status variables to be passed to MySQL */ struct export_var_struct{ + ulint innodb_adaptive_hash_cells; + ulint innodb_adaptive_hash_heap_buffers; + ulint innodb_adaptive_hash_hash_searches; + ulint innodb_adaptive_hash_non_hash_searches; + ulint innodb_background_log_sync; ulint innodb_data_pending_reads; /*!< Pending reads */ ulint innodb_data_pending_writes; /*!< Pending writes */ ulint innodb_data_pending_fsyncs; /*!< Pending fsyncs */ @@ -759,6 +764,9 @@ #ifdef UNIV_DEBUG ulint innodb_buffer_pool_pages_latched; /*!< Latched pages */ #endif /* UNIV_DEBUG */ + ulint innodb_buffer_pool_pages_made_not_young; + ulint innodb_buffer_pool_pages_made_young; + ulint innodb_buffer_pool_pages_old; ulint innodb_buffer_pool_read_requests; /*!< buf_pool->stat.n_page_gets */ ulint innodb_buffer_pool_reads; /*!< srv_buf_pool_reads */ ulint innodb_buffer_pool_wait_free; /*!< srv_buf_pool_wait_free */ @@ -768,13 +776,43 @@ ulint innodb_buffer_pool_read_ahead_rnd;/*!< srv_read_ahead_rnd */ ulint innodb_buffer_pool_read_ahead; /*!< srv_read_ahead */ ulint innodb_buffer_pool_read_ahead_evicted;/*!< srv_read_ahead evicted*/ + ulint innodb_checkpoint_age; + ulint innodb_checkpoint_max_age; + ulint innodb_checkpoint_target_age; ulint innodb_dblwr_pages_written; /*!< srv_dblwr_pages_written */ ulint innodb_dblwr_writes; /*!< srv_dblwr_writes */ ulint innodb_deadlocks; ibool innodb_have_atomic_builtins; /*!< HAVE_ATOMIC_BUILTINS */ + ulint innodb_history_list_length; + ulint innodb_ibuf_size; + ulint innodb_ibuf_free_list; + ulint innodb_ibuf_segment_size; + ulint innodb_ibuf_merges; + ulint innodb_ibuf_merged_inserts; + ulint innodb_ibuf_merged_delete_marks; + ulint innodb_ibuf_merged_deletes; + ulint innodb_ibuf_discarded_inserts; + ulint innodb_ibuf_discarded_delete_marks; + ulint innodb_ibuf_discarded_deletes; ulint innodb_log_waits; /*!< srv_log_waits */ ulint innodb_log_write_requests; /*!< srv_log_write_requests */ ulint innodb_log_writes; /*!< srv_log_writes */ + ib_int64_t innodb_lsn_current; + ib_int64_t innodb_lsn_flushed; + ib_int64_t innodb_lsn_last_checkpoint; + ulint innodb_master_thread_1_second_loops; + ulint innodb_master_thread_10_second_loops; + ulint innodb_master_thread_background_loops; + ulint innodb_master_thread_main_flush_loops; + ulint innodb_master_thread_sleeps; + ib_int64_t innodb_max_trx_id; + ulint innodb_mem_adaptive_hash; + ulint innodb_mem_dictionary; + ulint innodb_mem_total; + ib_int64_t innodb_mutex_os_waits; + ib_int64_t innodb_mutex_spin_rounds; + ib_int64_t innodb_mutex_spin_waits; + ib_int64_t innodb_oldest_view_low_limit_trx_id; ulint innodb_os_log_written; /*!< srv_os_log_written */ ulint innodb_os_log_fsyncs; /*!< fil_n_log_flushes */ ulint innodb_os_log_pending_writes; /*!< srv_os_log_pending_writes */ @@ -783,6 +821,8 @@ ulint innodb_pages_created; /*!< buf_pool->stat.n_pages_created */ ulint innodb_pages_read; /*!< buf_pool->stat.n_pages_read */ ulint innodb_pages_written; /*!< buf_pool->stat.n_pages_written */ + ib_int64_t innodb_purge_trx_id; + ib_int64_t innodb_purge_undo_no; ulint innodb_row_lock_waits; /*!< srv_n_lock_wait_count */ ulint innodb_row_lock_current_waits; /*!< srv_n_lock_wait_current_count */ ib_int64_t innodb_row_lock_time; /*!< srv_n_lock_wait_time @@ -792,11 +832,18 @@ / srv_n_lock_wait_count */ ulint innodb_row_lock_time_max; /*!< srv_n_lock_max_wait_time / 1000 */ + ulint innodb_current_row_locks; ulint innodb_rows_read; /*!< srv_n_rows_read */ ulint innodb_rows_inserted; /*!< srv_n_rows_inserted */ ulint innodb_rows_updated; /*!< srv_n_rows_updated */ ulint innodb_rows_deleted; /*!< srv_n_rows_deleted */ ulint innodb_truncated_status_writes; /*!< srv_truncated_status_writes */ + ib_int64_t innodb_s_lock_os_waits; + ib_int64_t innodb_s_lock_spin_rounds; + ib_int64_t innodb_s_lock_spin_waits; + ib_int64_t innodb_x_lock_os_waits; + ib_int64_t innodb_x_lock_spin_rounds; + ib_int64_t innodb_x_lock_spin_waits; }; /** Thread slot in the thread table */ --- a/storage/innobase/include/sync0sync.h +++ b/storage/innobase/include/sync0sync.h @@ -766,6 +766,10 @@ #define SYNC_SPIN_ROUNDS srv_n_spin_wait_rounds +extern ib_int64_t mutex_spin_round_count; +extern ib_int64_t mutex_spin_wait_count; +extern ib_int64_t mutex_os_wait_count; + /** The number of mutex_exit calls. Intended for performance monitoring. */ extern ib_int64_t mutex_exit_count; --- a/storage/innobase/lock/lock0lock.c +++ b/storage/innobase/lock/lock0lock.c @@ -569,6 +569,7 @@ lock_sys = mem_alloc(sizeof(lock_sys_t)); lock_sys->rec_hash = hash_create(n_cells); + lock_sys->rec_num = 0; /* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */ @@ -1729,6 +1730,7 @@ HASH_INSERT(lock_t, hash, lock_sys->rec_hash, lock_rec_fold(space, page_no), lock); + lock_sys->rec_num++; if (UNIV_UNLIKELY(type_mode & LOCK_WAIT)) { lock_set_lock_and_trx_wait(lock, trx); @@ -2275,6 +2277,7 @@ HASH_DELETE(lock_t, hash, lock_sys->rec_hash, lock_rec_fold(space, page_no), in_lock); + lock_sys->rec_num--; UT_LIST_REMOVE(trx_locks, trx->trx_locks, in_lock); @@ -2318,6 +2321,7 @@ HASH_DELETE(lock_t, hash, lock_sys->rec_hash, lock_rec_fold(space, page_no), in_lock); + lock_sys->rec_num--; UT_LIST_REMOVE(trx_locks, trx->trx_locks, in_lock); } --- a/storage/innobase/srv/srv0srv.c +++ b/storage/innobase/srv/srv0srv.c @@ -2262,12 +2262,49 @@ ulint LRU_len; ulint free_len; ulint flush_list_len; + ulint mem_adaptive_hash, mem_dictionary; + read_view_t* oldest_view; + ulint i; buf_get_total_stat(&stat); buf_get_total_list_len(&LRU_len, &free_len, &flush_list_len); + if (btr_search_sys && btr_search_sys->hash_index[0]->heap) { + mem_adaptive_hash = mem_heap_get_size(btr_search_sys->hash_index[0]->heap); + } else { + mem_adaptive_hash = 0; + for (i=0; i < btr_search_sys->hash_index[0]->n_mutexes; i++) { + mem_adaptive_hash += mem_heap_get_size(btr_search_sys->hash_index[0]->heaps[i]); + } + } + mem_adaptive_hash *= btr_search_index_num; + if (btr_search_sys) { + mem_adaptive_hash += (btr_search_sys->hash_index[0]->n_cells * btr_search_index_num * sizeof(hash_cell_t)); + } + + mem_dictionary = (dict_sys ? ((dict_sys->table_hash->n_cells + + dict_sys->table_id_hash->n_cells + ) * sizeof(hash_cell_t) + + dict_sys->size) : 0); + mutex_enter(&srv_innodb_monitor_mutex); + export_vars.innodb_adaptive_hash_cells = 0; + export_vars.innodb_adaptive_hash_heap_buffers = 0; + for (i = 0; i < btr_search_index_num; i++) { + hash_table_t* table = btr_search_get_hash_index((index_id_t)i); + + export_vars.innodb_adaptive_hash_cells + += hash_get_n_cells(table); + export_vars.innodb_adaptive_hash_heap_buffers + += (UT_LIST_GET_LEN(table->heap->base) - 1); + } + export_vars.innodb_adaptive_hash_hash_searches + = btr_cur_n_sea; + export_vars.innodb_adaptive_hash_non_hash_searches + = btr_cur_n_non_sea; + export_vars.innodb_background_log_sync + = srv_log_writes_and_flush; export_vars.innodb_data_pending_reads = os_n_pending_reads; export_vars.innodb_data_pending_writes @@ -2306,6 +2343,92 @@ export_vars.innodb_buffer_pool_pages_misc = buf_pool_get_n_pages() - LRU_len - free_len; + + export_vars.innodb_buffer_pool_pages_made_young + = stat.n_pages_made_young; + export_vars.innodb_buffer_pool_pages_made_not_young + = stat.n_pages_not_made_young; + export_vars.innodb_buffer_pool_pages_old = 0; + for (i = 0; i < srv_buf_pool_instances; i++) { + buf_pool_t* buf_pool = buf_pool_from_array(i); + export_vars.innodb_buffer_pool_pages_old + += buf_pool->LRU_old_len; + } + export_vars.innodb_checkpoint_age + = (log_sys->lsn - log_sys->last_checkpoint_lsn); + export_vars.innodb_checkpoint_max_age + = log_sys->max_checkpoint_age; + export_vars.innodb_checkpoint_target_age + = srv_checkpoint_age_target + ? ut_min(log_sys->max_checkpoint_age_async, srv_checkpoint_age_target) + : log_sys->max_checkpoint_age_async; + export_vars.innodb_history_list_length + = trx_sys->rseg_history_len; + ibuf_export_ibuf_status( + &export_vars.innodb_ibuf_size, + &export_vars.innodb_ibuf_free_list, + &export_vars.innodb_ibuf_segment_size, + &export_vars.innodb_ibuf_merges, + &export_vars.innodb_ibuf_merged_inserts, + &export_vars.innodb_ibuf_merged_delete_marks, + &export_vars.innodb_ibuf_merged_deletes, + &export_vars.innodb_ibuf_discarded_inserts, + &export_vars.innodb_ibuf_discarded_delete_marks, + &export_vars.innodb_ibuf_discarded_deletes); + export_vars.innodb_lsn_current + = log_sys->lsn; + export_vars.innodb_lsn_flushed + = log_sys->flushed_to_disk_lsn; + export_vars.innodb_lsn_last_checkpoint + = log_sys->last_checkpoint_lsn; + export_vars.innodb_master_thread_1_second_loops + = srv_main_1_second_loops; + export_vars.innodb_master_thread_10_second_loops + = srv_main_10_second_loops; + export_vars.innodb_master_thread_background_loops + = srv_main_background_loops; + export_vars.innodb_master_thread_main_flush_loops + = srv_main_flush_loops; + export_vars.innodb_master_thread_sleeps + = srv_main_sleeps; + export_vars.innodb_max_trx_id + = trx_sys->max_trx_id; + export_vars.innodb_mem_adaptive_hash + = mem_adaptive_hash; + export_vars.innodb_mem_dictionary + = mem_dictionary; + export_vars.innodb_mem_total + = ut_total_allocated_memory; + export_vars.innodb_mutex_os_waits + = mutex_os_wait_count; + export_vars.innodb_mutex_spin_rounds + = mutex_spin_round_count; + export_vars.innodb_mutex_spin_waits + = mutex_spin_wait_count; + export_vars.innodb_s_lock_os_waits + = rw_s_os_wait_count; + export_vars.innodb_s_lock_spin_rounds + = rw_s_spin_round_count; + export_vars.innodb_s_lock_spin_waits + = rw_s_spin_wait_count; + export_vars.innodb_x_lock_os_waits + = rw_x_os_wait_count; + export_vars.innodb_x_lock_spin_rounds + = rw_x_spin_round_count; + export_vars.innodb_x_lock_spin_waits + = rw_x_spin_wait_count; + + oldest_view = UT_LIST_GET_LAST(trx_sys->view_list); + export_vars.innodb_oldest_view_low_limit_trx_id + = oldest_view ? oldest_view->low_limit_id : 0; + + export_vars.innodb_purge_trx_id + = purge_sys->purge_trx_no; + export_vars.innodb_purge_undo_no + = purge_sys->purge_undo_no; + export_vars.innodb_current_row_locks + = lock_sys->rec_num; + #ifdef HAVE_ATOMIC_BUILTINS export_vars.innodb_have_atomic_builtins = 1; #else --- a/storage/innobase/sync/sync0sync.c +++ b/storage/innobase/sync/sync0sync.c @@ -171,13 +171,13 @@ /** The number of iterations in the mutex_spin_wait() spin loop. Intended for performance monitoring. */ -static ib_int64_t mutex_spin_round_count = 0; +UNIV_INTERN ib_int64_t mutex_spin_round_count = 0; /** The number of mutex_spin_wait() calls. Intended for performance monitoring. */ -static ib_int64_t mutex_spin_wait_count = 0; +UNIV_INTERN ib_int64_t mutex_spin_wait_count = 0; /** The number of OS waits in mutex_spin_wait(). Intended for performance monitoring. */ -static ib_int64_t mutex_os_wait_count = 0; +UNIV_INTERN ib_int64_t mutex_os_wait_count = 0; /** The number of mutex_exit() calls. Intended for performance monitoring. */ UNIV_INTERN ib_int64_t mutex_exit_count = 0;