diff options
author | heikki@hundin.mysql.fi <> | 2002-08-06 22:59:13 +0300 |
---|---|---|
committer | heikki@hundin.mysql.fi <> | 2002-08-06 22:59:13 +0300 |
commit | 042facc475a7a1d7610aba66526965e5b5ec5261 (patch) | |
tree | 0ed7a5d28436450a6e79787357c337dfae761d1d /innobase/srv | |
parent | 5fadf19295e31a0332de4f1ed3362ba1ce51e4ab (diff) | |
download | mariadb-git-042facc475a7a1d7610aba66526965e5b5ec5261.tar.gz |
Many files:
Merge InnoDB-3.23.52d
Diffstat (limited to 'innobase/srv')
-rw-r--r-- | innobase/srv/srv0srv.c | 57 | ||||
-rw-r--r-- | innobase/srv/srv0start.c | 22 |
2 files changed, 68 insertions, 11 deletions
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c index 3af2d96d921..2ce97c34e06 100644 --- a/innobase/srv/srv0srv.c +++ b/innobase/srv/srv0srv.c @@ -2018,7 +2018,7 @@ srv_table_reserve_slot_for_mysql(void) fprintf(stderr, "Slot %lu: thread id %lu, type %lu, in use %lu, susp %lu, time %lu\n", - i, (ulint)(slot->id), + i, os_thread_pf(slot->id), slot->type, slot->in_use, slot->suspended, (ulint)difftime(ut_time(), slot->suspend_time)); @@ -2163,6 +2163,34 @@ srv_release_mysql_thread_if_suspended( } /********************************************************************** +Refreshes the values used to calculate per-second averages. */ +static +void +srv_refresh_innodb_monitor_stats(void) +/*==================================*/ +{ + mutex_enter(&srv_innodb_monitor_mutex); + + srv_last_monitor_time = time(NULL); + + os_aio_refresh_stats(); + + btr_cur_n_sea_old = btr_cur_n_sea; + btr_cur_n_non_sea_old = btr_cur_n_non_sea; + + log_refresh_stats(); + + buf_refresh_io_stats(); + + srv_n_rows_inserted_old = srv_n_rows_inserted; + srv_n_rows_updated_old = srv_n_rows_updated; + srv_n_rows_deleted_old = srv_n_rows_deleted; + srv_n_rows_read_old = srv_n_rows_read; + + mutex_exit(&srv_innodb_monitor_mutex); +} + +/********************************************************************** Sprintfs to a buffer the output of the InnoDB Monitor. */ void @@ -2199,7 +2227,7 @@ srv_sprintf_innodb_monitor( "=====================================\n"); buf += sprintf(buf, -"Per second values calculated from the last %lu seconds\n", +"Per second averages calculated from the last %lu seconds\n", (ulint)time_elapsed); buf += sprintf(buf, "----------\n" @@ -2236,8 +2264,8 @@ srv_sprintf_innodb_monitor( / time_elapsed, (btr_cur_n_non_sea - btr_cur_n_non_sea_old) / time_elapsed); - btr_cur_n_sea_old = btr_cur_n_sea; - btr_cur_n_non_sea_old = btr_cur_n_non_sea; + btr_cur_n_sea_old = btr_cur_n_sea; + btr_cur_n_non_sea_old = btr_cur_n_non_sea; buf += sprintf(buf,"---\n" "LOG\n" @@ -2279,10 +2307,10 @@ srv_sprintf_innodb_monitor( (srv_n_rows_read - srv_n_rows_read_old) / time_elapsed); - srv_n_rows_inserted_old = srv_n_rows_inserted; - srv_n_rows_updated_old = srv_n_rows_updated; - srv_n_rows_deleted_old = srv_n_rows_deleted; - srv_n_rows_read_old = srv_n_rows_read; + srv_n_rows_inserted_old = srv_n_rows_inserted; + srv_n_rows_updated_old = srv_n_rows_updated; + srv_n_rows_deleted_old = srv_n_rows_deleted; + srv_n_rows_read_old = srv_n_rows_read; buf += sprintf(buf, "----------------------------\n" "END OF INNODB MONITOR OUTPUT\n" @@ -2325,7 +2353,7 @@ loop: /* When someone is waiting for a lock, we wake up every second and check if a timeout has passed for a lock wait */ - os_thread_sleep(1000000); + os_thread_sleep(1000000); /* In case mutex_exit is not a memory barrier, it is theoretically possible some threads are left waiting though @@ -2342,9 +2370,9 @@ loop: if (srv_print_innodb_monitor) { - buf = mem_alloc(100000); + buf = mem_alloc(100000); - srv_sprintf_innodb_monitor(buf, 100000); + srv_sprintf_innodb_monitor(buf, 100000); printf("%s", buf); @@ -2485,6 +2513,13 @@ loop: os_thread_sleep(2000000); + if (difftime(time(NULL), srv_last_monitor_time) > 60) { + /* We referesh InnoDB Monitor values so that averages are + printed from at most 60 last seconds */ + + srv_refresh_innodb_monitor_stats(); + } + /* mem_print_new_info(); if (cnt % 10 == 0) { diff --git a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c index b35bca1ea8e..ea0ed7c961e 100644 --- a/innobase/srv/srv0start.c +++ b/innobase/srv/srv0start.c @@ -74,6 +74,12 @@ ulint ios; ulint n[SRV_MAX_N_IO_THREADS + 5]; os_thread_id_t thread_ids[SRV_MAX_N_IO_THREADS + 5]; +/* We use this mutex to test the return value of pthread_mutex_trylock + on successful locking. HP-UX does NOT return 0, though Linux et al do. */ +os_fast_mutex_t srv_os_test_mutex; + +ibool srv_os_test_mutex_is_locked = FALSE; + #define SRV_N_PENDING_IOS_PER_THREAD OS_AIO_N_PENDING_IOS_PER_THREAD #define SRV_MAX_N_PENDING_SYNC_IOS 100 @@ -1353,6 +1359,22 @@ innobase_start_or_create_for_mysql(void) tablespace_size_in_header, sum_of_data_file_sizes); } + /* Check that os_fast_mutexes work as exptected */ + os_fast_mutex_init(&srv_os_test_mutex); + + if (0 != os_fast_mutex_trylock(&srv_os_test_mutex)) { + fprintf(stderr, +"InnoDB: Error: pthread_mutex_trylock returns an unexpected value on\n" + "InnoDB: success! Cannot continue.\n"); + exit(1); + } + + os_fast_mutex_unlock(&srv_os_test_mutex); + + os_fast_mutex_lock(&srv_os_test_mutex); + + os_fast_mutex_unlock(&srv_os_test_mutex); + ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Started\n"); |