mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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 innobase/trx/trx0undo.c: Add a missing newline to fprints innobase/srv/srv0start.c: Fix bug 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
This commit is contained in:
@ -1055,34 +1055,15 @@ innobase_start_or_create_for_mysql(void)
|
|||||||
srv_file_flush_method_str);
|
srv_file_flush_method_str);
|
||||||
return(DB_ERROR);
|
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
|
/* Note that the call srv_boot() also changes the values of
|
||||||
srv_pool_size etc. to the units used by InnoDB internally */
|
srv_pool_size etc. to the units used by InnoDB internally */
|
||||||
|
|
||||||
/* Set the maximum number of threads which can wait for a semaphore
|
/* 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__)
|
#if defined(__WIN__) || defined(__NETWARE__)
|
||||||
|
|
||||||
/* Create less event semaphores because Win 98/ME had difficulty creating
|
/* 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. */
|
NetWare. */
|
||||||
srv_max_n_threads = 1000;
|
srv_max_n_threads = 1000;
|
||||||
#else
|
#else
|
||||||
if (srv_pool_size >= 8 * 1024 * 1024) {
|
if (srv_pool_size >= 1000 * 1024) {
|
||||||
/* Here we still have srv_pool_size counted
|
/* Here we still have srv_pool_size counted
|
||||||
in bytes, srv_boot converts the value to
|
in kilobytes (in 4.0 this was in bytes)
|
||||||
pages; if buffer pool is less than 8 MB,
|
srv_boot() converts the value to
|
||||||
|
pages; if buffer pool is less than 1000 MB,
|
||||||
assume fewer threads. */
|
assume fewer threads. */
|
||||||
|
srv_max_n_threads = 50000;
|
||||||
|
|
||||||
|
} else if (srv_pool_size >= 8 * 1024) {
|
||||||
|
|
||||||
srv_max_n_threads = 10000;
|
srv_max_n_threads = 10000;
|
||||||
} else {
|
} else {
|
||||||
srv_max_n_threads = 1000; /* saves several MB of memory,
|
srv_max_n_threads = 1000; /* saves several MB of memory,
|
||||||
@ -1103,7 +1089,7 @@ NetWare. */
|
|||||||
computers */
|
computers */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
err = srv_boot();
|
err = srv_boot(); /* This changes srv_pool_size to units of a page */
|
||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
if (err != DB_SUCCESS) {
|
||||||
|
|
||||||
|
@ -404,7 +404,7 @@ trx_undo_seg_create(
|
|||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Warning: cannot find a free slot for an undo log. Do you have too\n"
|
"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);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user