summaryrefslogtreecommitdiff
path: root/innobase/srv/srv0srv.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/srv/srv0srv.c')
-rw-r--r--innobase/srv/srv0srv.c160
1 files changed, 72 insertions, 88 deletions
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
index 028fae010d5..8dd9c9f3feb 100644
--- a/innobase/srv/srv0srv.c
+++ b/innobase/srv/srv0srv.c
@@ -93,6 +93,8 @@ ulint srv_lock_wait_timeout = 1024 * 1024 * 1024;
char* srv_unix_file_flush_method_str = NULL;
ulint srv_unix_file_flush_method = 0;
+ibool srv_use_doublewrite_buf = TRUE;
+
ibool srv_set_thread_priorities = TRUE;
int srv_query_thread_priority = 0;
/*-------------------------------------------*/
@@ -109,6 +111,8 @@ ibool srv_print_buf_io = FALSE;
ibool srv_print_log_io = FALSE;
ibool srv_print_latch_waits = FALSE;
+ibool srv_print_innodb_monitor = FALSE;
+
/* The parameters below are obsolete: */
ibool srv_print_parsed_sql = FALSE;
@@ -1492,7 +1496,6 @@ srv_init(void)
slot = srv_mysql_table + i;
slot->in_use = FALSE;
slot->event = os_event_create(NULL);
- slot->suspended = FALSE;
ut_a(slot->event);
}
@@ -1661,7 +1664,6 @@ srv_suspend_mysql_thread(
slot->thr = thr;
os_event_reset(event);
- slot->suspended = TRUE;
slot->suspend_time = ut_time();
@@ -1693,27 +1695,6 @@ srv_suspend_mysql_thread(
return(FALSE);
}
-os_event_t
-srv_mysql_thread_event_get(void)
-{
- srv_slot_t* slot;
- os_event_t event;
-
- mutex_enter(&kernel_mutex);
-
- slot = srv_table_reserve_slot_for_mysql();
-
- event = slot->event;
-
- os_event_reset(event);
-
- slot->suspended = TRUE;
-
- mutex_exit(&kernel_mutex);
-
- return(event);
-}
-
/************************************************************************
Releases a MySQL OS thread waiting for a lock to be released, if the
thread is already suspended. */
@@ -1737,7 +1718,6 @@ srv_release_mysql_thread_if_suspended(
/* Found */
os_event_set(slot->event);
- slot->suspended = FALSE;
return;
}
@@ -1746,59 +1726,6 @@ srv_release_mysql_thread_if_suspended(
/* not found */
}
-void
-srv_mysql_thread_release(void)
-/*==========================*/
-{
- srv_slot_t* slot;
- ulint i;
-
- mutex_enter(&kernel_mutex);
-
- for (i = 0; i < OS_THREAD_MAX_N; i++) {
-
- slot = srv_mysql_table + i;
-
- if (slot->in_use && slot->suspended) {
- /* Found */
- slot->suspended = FALSE;
- mutex_exit(&kernel_mutex);
-
- os_event_set(slot->event);
-
- return;
- }
- }
-
- ut_a(0);
-}
-
-void
-srv_mysql_thread_slot_free(
-/*==========================*/
- os_event_t event)
-{
- srv_slot_t* slot;
- ulint i;
-
- mutex_enter(&kernel_mutex);
-
- for (i = 0; i < OS_THREAD_MAX_N; i++) {
-
- slot = srv_mysql_table + i;
-
- if (slot->in_use && slot->event == event) {
- /* Found */
- slot->in_use = FALSE;
- mutex_exit(&kernel_mutex);
-
- return;
- }
- }
-
- ut_a(0);
-}
-
/*************************************************************************
A thread which wakes up threads whose lock wait may have lasted too long. */
@@ -1924,6 +1851,7 @@ srv_master_thread(
ulint i;
time_t last_flush_time;
time_t current_time;
+ time_t last_monitor_time;
UT_NOT_USED(arg);
@@ -1936,6 +1864,8 @@ srv_master_thread(
mutex_exit(&kernel_mutex);
os_event_set(srv_sys->operational);
+
+ last_monitor_time = time(NULL);
loop:
mutex_enter(&kernel_mutex);
@@ -1975,8 +1905,18 @@ loop:
while (n_pages_purged) {
/* TODO: replace this by a check if we are running
out of file space! */
+ if (srv_print_innodb_monitor) {
+ ut_print_timestamp(stdout);
+ printf(" InnoDB starts purge\n");
+ }
+
n_pages_purged = trx_purge();
+ if (srv_print_innodb_monitor) {
+ ut_print_timestamp(stdout);
+ printf(" InnoDB purged %lu pages\n", n_pages_purged);
+ }
+
current_time = time(NULL);
if (difftime(current_time, last_flush_time) > 1) {
@@ -1986,14 +1926,40 @@ loop:
}
background_loop:
- /*
- sync_array_print_info(sync_primary_wait_array);
- os_aio_print();
- buf_print_io();
- */
/* In this loop we run background operations while the server
is quiet */
+ current_time = time(NULL);
+
+ if (srv_print_innodb_monitor
+ && difftime(current_time, last_monitor_time) > 8) {
+
+ printf("================================\n");
+ last_monitor_time = time(NULL);
+ ut_print_timestamp(stdout);
+
+ printf(" INNODB MONITOR OUTPUT\n"
+ "================================\n");
+ printf("--------------------------\n"
+ "LOCKS HELD BY TRANSACTIONS\n"
+ "--------------------------\n");
+ lock_print_info();
+ printf("-----------------------------------------------\n"
+ "CURRENT SEMAPHORES RESERVED AND SEMAPHORE WAITS\n"
+ "-----------------------------------------------\n");
+ sync_print();
+ printf("CURRENT PENDING FILE I/O'S\n"
+ "--------------------------\n");
+ os_aio_print();
+ printf("-----------\n"
+ "BUFFER POOL\n"
+ "-----------\n");
+ buf_print_io();
+ printf("----------------------------\n"
+ "END OF INNODB MONITOR OUTPUT\n"
+ "============================\n");
+ }
+
mutex_enter(&kernel_mutex);
if (srv_activity_count != old_activity_count) {
mutex_exit(&kernel_mutex);
@@ -2005,8 +1971,18 @@ background_loop:
/* The server has been quiet for a while: start running background
operations */
+ if (srv_print_innodb_monitor) {
+ ut_print_timestamp(stdout);
+ printf(" InnoDB starts purge\n");
+ }
+
n_pages_purged = trx_purge();
+ if (srv_print_innodb_monitor) {
+ ut_print_timestamp(stdout);
+ printf(" InnoDB purged %lu pages\n", n_pages_purged);
+ }
+
mutex_enter(&kernel_mutex);
if (srv_activity_count != old_activity_count) {
mutex_exit(&kernel_mutex);
@@ -2014,8 +1990,18 @@ background_loop:
}
mutex_exit(&kernel_mutex);
+ if (srv_print_innodb_monitor) {
+ ut_print_timestamp(stdout);
+ printf(" InnoDB starts insert buffer merge\n");
+ }
+
n_bytes_merged = ibuf_contract(TRUE);
+ if (srv_print_innodb_monitor) {
+ ut_print_timestamp(stdout);
+ printf(" InnoDB merged %lu bytes\n", n_bytes_merged);
+ }
+
mutex_enter(&kernel_mutex);
if (srv_activity_count != old_activity_count) {
mutex_exit(&kernel_mutex);
@@ -2023,7 +2009,7 @@ background_loop:
}
mutex_exit(&kernel_mutex);
- n_pages_flushed = buf_flush_batch(BUF_FLUSH_LIST, 20, ut_dulint_max);
+ n_pages_flushed = buf_flush_batch(BUF_FLUSH_LIST, 100, ut_dulint_max);
mutex_enter(&kernel_mutex);
if (srv_activity_count != old_activity_count) {
@@ -2052,14 +2038,12 @@ background_loop:
/* mem_print_new_info();
*/
-
-/* fsp_print(0); */
-
-/* fprintf(stderr, "Validating tablespace\n");
+/*
+ fsp_print(0);
+ fprintf(stderr, "Validating tablespace\n");
fsp_validate(0);
fprintf(stderr, "Validation ok\n");
*/
-
#ifdef UNIV_SEARCH_PERF_STAT
/* btr_search_print_info(); */
#endif