diff options
author | unknown <heikki@hundin.mysql.fi> | 2003-10-17 23:44:34 +0300 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2003-10-17 23:44:34 +0300 |
commit | 14affe7e2fa5287aa205353e80615d089861a104 (patch) | |
tree | 27c4cf6a0ebf62c4a01fd1fe3028b1d331e84e4a /innobase/srv | |
parent | 629ced9d814f7112b72a6ffb16986222d156dce6 (diff) | |
download | mariadb-git-14affe7e2fa5287aa205353e80615d089861a104.tar.gz |
thr0loc.c, srv0start.c, srv0srv.c, srv0srv.h, os0thread.h, ha_innodb.cc:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
sql/ha_innodb.cc:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
innobase/include/os0thread.h:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
innobase/include/srv0srv.h:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
innobase/srv/srv0srv.c:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
innobase/srv/srv0start.c:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
innobase/thr/thr0loc.c:
Backport from 4.1: reduce InnoDB memory consumption if buf pool < 8 MB
Diffstat (limited to 'innobase/srv')
-rw-r--r-- | innobase/srv/srv0srv.c | 14 | ||||
-rw-r--r-- | innobase/srv/srv0start.c | 22 |
2 files changed, 33 insertions, 3 deletions
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c index f31d275eff0..8aba1b4f414 100644 --- a/innobase/srv/srv0srv.c +++ b/innobase/srv/srv0srv.c @@ -142,7 +142,7 @@ byte srv_latin1_ordering[256] /* The sort order table of the latin1 ulint srv_pool_size = ULINT_MAX; /* size in database pages; MySQL originally sets this - value in megabytes */ + value in bytes */ ulint srv_mem_pool_size = ULINT_MAX; /* size in bytes */ ulint srv_lock_table_size = ULINT_MAX; @@ -169,6 +169,12 @@ the user from forgetting the innodb_force_recovery keyword to my.cnf */ ulint srv_force_recovery = 0; /*-----------------------*/ +/* We are prepared for a situation that we have this many threads waiting for +a semaphore inside InnoDB. innobase_start_or_create_for_mysql() sets the +value. */ + +ulint srv_max_n_threads = 0; + /* The following controls how many threads we let inside InnoDB concurrently: threads waiting for locks are not counted into the number because otherwise we could get a deadlock. MySQL creates a thread for each user session, and @@ -208,7 +214,7 @@ struct srv_conc_slot_struct{ UT_LIST_BASE_NODE_T(srv_conc_slot_t) srv_conc_queue; /* queue of threads waiting to get in */ -srv_conc_slot_t srv_conc_slots[OS_THREAD_MAX_N]; /* array of wait +srv_conc_slot_t* srv_conc_slots; /* array of wait slots */ /* Number of times a thread is allowed to enter InnoDB within the same @@ -1693,6 +1699,8 @@ srv_init(void) os_fast_mutex_init(&srv_conc_mutex); UT_LIST_INIT(srv_conc_queue); + + srv_conc_slots = mem_alloc(OS_THREAD_MAX_N * sizeof(srv_conc_slot_t)); for (i = 0; i < OS_THREAD_MAX_N; i++) { conc_slot = srv_conc_slots + i; @@ -1740,7 +1748,7 @@ srv_conc_enter_innodb( thread */ { ibool has_slept = FALSE; - srv_conc_slot_t* slot; + srv_conc_slot_t* slot = NULL; ulint i; char err_buf[1000]; diff --git a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c index a85c3615c1b..af4ca71d443 100644 --- a/innobase/srv/srv0start.c +++ b/innobase/srv/srv0start.c @@ -1087,6 +1087,28 @@ innobase_start_or_create_for_mysql(void) return(DB_ERROR); } + /* Set the maximum number of threads which can wait for a semaphore + inside InnoDB */ +#if defined(__WIN__) || defined(__NETWARE__) + +/* Create less event semaphores because Win 98/ME had difficulty creating +40000 event semaphores. +Comment from Novell, Inc.: also, these just take a lot of memory on +NetWare. */ + srv_max_n_threads = 1000; +#else + if (srv_pool_size >= 8 * 1024 * 1024) { + /* Here we still have srv_pool_size counted + in bytes, srv_boot converts the value to + pages; if buffer pool is less than 8 MB, + assume fewer threads. */ + srv_max_n_threads = 10000; + } else { + srv_max_n_threads = 1000; /* saves several MB of memory, + especially in 64-bit + computers */ + } +#endif err = srv_boot(); if (err != DB_SUCCESS) { |