Commit e3f0690d authored by unknown's avatar unknown
Browse files

Applied patch recieved from Marko:

 Make innodb_thread_concurrency 0 by default, and extend the usable
 range from 0 to 1000 (0 disables the thread throttling).


innobase/include/srv0srv.h:
  Remove SRV_CONCURRENCY_THRESHOLD. The magic value is 0 from now on.
innobase/srv/srv0srv.c:
  Remove SRV_CONCURRENCY_THRESHOLD. The magic value is 0 from now on.
mysql-test/r/innodb.result:
  innodb_thread_concurrency is 0..1000 now, and the default is 0.
mysql-test/t/innodb.test:
  innodb_thread_concurrency is 0..1000 now.
sql/ha_innodb.cc:
  Remove SRV_CONCURRENCY_THRESHOLD. The magic value is 0 from now on.
sql/mysqld.cc:
  innodb_thread_concurrency is 0..1000 now, and 0 (the default)
   disables the thread throttling.
parent 74f499fa
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -195,7 +195,6 @@ extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
#define kernel_mutex (*kernel_mutex_temp)

#define SRV_MAX_N_IO_THREADS	100
#define SRV_CONCURRENCY_THRESHOLD	20
				
/* Array of English strings describing the current state of an
i/o handler thread */
+5 −4
Original line number Diff line number Diff line
@@ -258,9 +258,10 @@ 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
semaphore contention and convoy problems can occur withput this restriction.
Value 10 should be good if there are less than 4 processors + 4 disks in the
computer. Bigger computers need bigger values. */
computer. Bigger computers need bigger values. Value 0 will disable the
concurrency check. */

ulong	srv_thread_concurrency	= SRV_CONCURRENCY_THRESHOLD;
ulong	srv_thread_concurrency	= 0;
ulong   srv_commit_concurrency  = 0;

os_fast_mutex_t	srv_conc_mutex;		/* this mutex protects srv_conc data
@@ -1141,7 +1142,7 @@ srv_conc_force_enter_innodb(
	trx_t*	trx)	/* in: transaction object associated with the
			thread */
{
	if (srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD) {
	if (UNIV_LIKELY(!srv_thread_concurrency)) {
	
		return;
	}
@@ -1167,7 +1168,7 @@ srv_conc_force_exit_innodb(
{
	srv_conc_slot_t*	slot	= NULL;

	if (srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD) {
	if (UNIV_LIKELY(!srv_thread_concurrency)) {
	
		return;
	}
+3 −3
Original line number Diff line number Diff line
@@ -1821,15 +1821,15 @@ Variable_name Value
innodb_sync_spin_loops	20
show variables like "innodb_thread_concurrency";
Variable_name	Value
innodb_thread_concurrency	20
set global innodb_thread_concurrency=1000;
innodb_thread_concurrency	0
set global innodb_thread_concurrency=1001;
show variables like "innodb_thread_concurrency";
Variable_name	Value
innodb_thread_concurrency	1000
set global innodb_thread_concurrency=0;
show variables like "innodb_thread_concurrency";
Variable_name	Value
innodb_thread_concurrency	1
innodb_thread_concurrency	0
set global innodb_thread_concurrency=16;
show variables like "innodb_thread_concurrency";
Variable_name	Value
+1 −1
Original line number Diff line number Diff line
@@ -1316,7 +1316,7 @@ show variables like "innodb_sync_spin_loops";

# Test for innodb_thread_concurrency variable
show variables like "innodb_thread_concurrency";
set global innodb_thread_concurrency=1000;
set global innodb_thread_concurrency=1001;
show variables like "innodb_thread_concurrency";
set global innodb_thread_concurrency=0;
show variables like "innodb_thread_concurrency";
+2 −2
Original line number Diff line number Diff line
@@ -338,7 +338,7 @@ innodb_srv_conc_enter_innodb(
/*=========================*/
	trx_t*	trx)	/* in: transaction handle */
{
	if (UNIV_LIKELY(srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD)) {
	if (UNIV_LIKELY(!srv_thread_concurrency)) {

		return;
	}
@@ -355,7 +355,7 @@ innodb_srv_conc_exit_innodb(
/*========================*/
	trx_t*	trx)	/* in: transaction handle */
{
	if (UNIV_LIKELY(srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD)) {
	if (UNIV_LIKELY(!srv_thread_concurrency)) {

		return;
	}
Loading