srv0start.c:

  Fix bug #5414 in 4.1: srv_max_n_threads was always set to only 1000, regardless of the buffer pool size; undelr very high concurrent loads this could cause an assertion failure in sync0arr.c line 384 when we ran out of wait slots for threads; also innodb_thread_concurrency did not work, because the wait queue also there overflowed at 1000 concurrent threads; also remove redundant code
trx0undo.c:
  Add a missing newline to fprints
parent ad6ad34b
......@@ -1056,33 +1056,14 @@ 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) {
/* Here we still have srv_pool_size counted
in kilobytes, 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
/* Note that the call srv_boot() also changes the values of
srv_pool_size etc. to the units used by InnoDB internally */
/* Set the maximum number of threads which can wait for a semaphore
inside InnoDB */
inside InnoDB: this is the 'sync wait array' size, as well as the
maximum number of threads that can wait in the 'srv_conc array' for
their time to enter InnoDB. */
#if defined(__WIN__) || defined(__NETWARE__)
/* Create less event semaphores because Win 98/ME had difficulty creating
......@@ -1091,11 +1072,16 @@ 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) {
if (srv_pool_size >= 1000 * 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,
in kilobytes (in 4.0 this was in bytes)
srv_boot() converts the value to
pages; if buffer pool is less than 1000 MB,
assume fewer threads. */
srv_max_n_threads = 50000;
} else if (srv_pool_size >= 8 * 1024) {
srv_max_n_threads = 10000;
} else {
srv_max_n_threads = 1000; /* saves several MB of memory,
......@@ -1103,7 +1089,7 @@ NetWare. */
computers */
}
#endif
err = srv_boot();
err = srv_boot(); /* This changes srv_pool_size to units of a page */
if (err != DB_SUCCESS) {
......
......@@ -404,7 +404,7 @@ trx_undo_seg_create(
ut_print_timestamp(stderr);
fprintf(stderr,
"InnoDB: Warning: cannot find a free slot for an undo log. Do you have too\n"
"InnoDB: many active transactions running concurrently?");
"InnoDB: many active transactions running concurrently?\n");
return(NULL);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment