Commit 72ce1f50 authored by paul@kite-hub.kitebird.com's avatar paul@kite-hub.kitebird.com

Merge paul@bk-internal.mysql.com:/home/bk/mysql-5.0

into kite-hub.kitebird.com:/src/extern/MySQL/bk/mysql-5.0
parents e608d27f 924ec83b
...@@ -244,6 +244,7 @@ venu@hundin.mysql.fi ...@@ -244,6 +244,7 @@ venu@hundin.mysql.fi
venu@myvenu.com venu@myvenu.com
venu@work.mysql.com venu@work.mysql.com
vtkachenko@intelp4d.mysql.com vtkachenko@intelp4d.mysql.com
vtkachenko@mail.mysql.com
vva@eagle.mysql.r18.ru vva@eagle.mysql.r18.ru
vva@genie.(none) vva@genie.(none)
vva@mysql.r18.ru vva@mysql.r18.ru
......
...@@ -134,6 +134,8 @@ extern ibool srv_lock_timeout_and_monitor_active; ...@@ -134,6 +134,8 @@ extern ibool srv_lock_timeout_and_monitor_active;
extern ibool srv_error_monitor_active; extern ibool srv_error_monitor_active;
extern ulint srv_n_spin_wait_rounds; extern ulint srv_n_spin_wait_rounds;
extern ulint srv_n_free_tickets_to_enter;
extern ulint srv_thread_sleep_delay;
extern ulint srv_spin_wait_delay; extern ulint srv_spin_wait_delay;
extern ibool srv_priority_boost; extern ibool srv_priority_boost;
......
...@@ -297,8 +297,8 @@ srv_conc_slot_t* srv_conc_slots; /* array of wait ...@@ -297,8 +297,8 @@ srv_conc_slot_t* srv_conc_slots; /* array of wait
/* Number of times a thread is allowed to enter InnoDB within the same /* Number of times a thread is allowed to enter InnoDB within the same
SQL query after it has once got the ticket at srv_conc_enter_innodb */ SQL query after it has once got the ticket at srv_conc_enter_innodb */
#define SRV_FREE_TICKETS_TO_ENTER 500 #define SRV_FREE_TICKETS_TO_ENTER srv_n_free_tickets_to_enter
#define SRV_THREAD_SLEEP_DELAY srv_thread_sleep_delay
/*-----------------------*/ /*-----------------------*/
/* If the following is set TRUE then we do not run purge and insert buffer /* If the following is set TRUE then we do not run purge and insert buffer
merge to completion before shutdown */ merge to completion before shutdown */
...@@ -328,6 +328,8 @@ ulint srv_max_purge_lag = 0; ...@@ -328,6 +328,8 @@ ulint srv_max_purge_lag = 0;
/*-------------------------------------------*/ /*-------------------------------------------*/
ulint srv_n_spin_wait_rounds = 20; ulint srv_n_spin_wait_rounds = 20;
ulint srv_n_free_tickets_to_enter = 500;
ulint srv_thread_sleep_delay = 10000;
ulint srv_spin_wait_delay = 5; ulint srv_spin_wait_delay = 5;
ibool srv_priority_boost = TRUE; ibool srv_priority_boost = TRUE;
...@@ -1025,8 +1027,8 @@ retry: ...@@ -1025,8 +1027,8 @@ retry:
return; return;
} }
/* If the transaction is not holding resources, let it sleep for 50 /* If the transaction is not holding resources,
milliseconds, and try again then */ let it sleep for SRV_THREAD_SLEEP_DELAY microseconds, and try again then */
if (!has_slept && !trx->has_search_latch if (!has_slept && !trx->has_search_latch
&& NULL == UT_LIST_GET_FIRST(trx->trx_locks)) { && NULL == UT_LIST_GET_FIRST(trx->trx_locks)) {
...@@ -1045,8 +1047,10 @@ retry: ...@@ -1045,8 +1047,10 @@ retry:
situations of lots of thread switches. Simply put some situations of lots of thread switches. Simply put some
threads aside for a while to reduce the number of thread threads aside for a while to reduce the number of thread
switches. */ switches. */
if (SRV_THREAD_SLEEP_DELAY > 0)
os_thread_sleep(10000); {
os_thread_sleep(SRV_THREAD_SLEEP_DELAY);
}
trx->op_info = ""; trx->op_info = "";
......
...@@ -1715,5 +1715,65 @@ Innodb_row_lock_time_max 0 ...@@ -1715,5 +1715,65 @@ Innodb_row_lock_time_max 0
show status like "Innodb_row_lock_time_avg"; show status like "Innodb_row_lock_time_avg";
Variable_name Value Variable_name Value
Innodb_row_lock_time_avg 0 Innodb_row_lock_time_avg 0
show variables like "innodb_sync_spin_loops";
Variable_name Value
innodb_sync_spin_loops 20
set global innodb_sync_spin_loops=1000;
show variables like "innodb_sync_spin_loops";
Variable_name Value
innodb_sync_spin_loops 1000
set global innodb_sync_spin_loops=0;
show variables like "innodb_sync_spin_loops";
Variable_name Value
innodb_sync_spin_loops 0
set global innodb_sync_spin_loops=20;
show variables like "innodb_sync_spin_loops";
Variable_name Value
innodb_sync_spin_loops 20
show variables like "innodb_thread_concurrency";
Variable_name Value
innodb_thread_concurrency 8
set global innodb_thread_concurrency=1000;
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
set global innodb_thread_concurrency=16;
show variables like "innodb_thread_concurrency";
Variable_name Value
innodb_thread_concurrency 16
show variables like "innodb_concurrency_tickets";
Variable_name Value
innodb_concurrency_tickets 500
set global innodb_concurrency_tickets=1000;
show variables like "innodb_concurrency_tickets";
Variable_name Value
innodb_concurrency_tickets 1000
set global innodb_concurrency_tickets=0;
show variables like "innodb_concurrency_tickets";
Variable_name Value
innodb_concurrency_tickets 1
set global innodb_concurrency_tickets=500;
show variables like "innodb_concurrency_tickets";
Variable_name Value
innodb_concurrency_tickets 500
show variables like "innodb_thread_sleep_delay";
Variable_name Value
innodb_thread_sleep_delay 10000
set global innodb_thread_sleep_delay=100000;
show variables like "innodb_thread_sleep_delay";
Variable_name Value
innodb_thread_sleep_delay 100000
set global innodb_thread_sleep_delay=0;
show variables like "innodb_thread_sleep_delay";
Variable_name Value
innodb_thread_sleep_delay 0
set global innodb_thread_sleep_delay=10000;
show variables like "innodb_thread_sleep_delay";
Variable_name Value
innodb_thread_sleep_delay 10000
create table t1 (v varchar(16384)) engine=innodb; create table t1 (v varchar(16384)) engine=innodb;
ERROR 42000: Column length too big for column 'v' (max = 255); use BLOB instead ERROR 42000: Column length too big for column 'v' (max = 255); use BLOB instead
...@@ -1218,6 +1218,42 @@ show status like "Innodb_row_lock_time"; ...@@ -1218,6 +1218,42 @@ show status like "Innodb_row_lock_time";
show status like "Innodb_row_lock_time_max"; show status like "Innodb_row_lock_time_max";
show status like "Innodb_row_lock_time_avg"; show status like "Innodb_row_lock_time_avg";
# Test for innodb_sync_spin_loops variable
show variables like "innodb_sync_spin_loops";
set global innodb_sync_spin_loops=1000;
show variables like "innodb_sync_spin_loops";
set global innodb_sync_spin_loops=0;
show variables like "innodb_sync_spin_loops";
set global innodb_sync_spin_loops=20;
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;
show variables like "innodb_thread_concurrency";
set global innodb_thread_concurrency=0;
show variables like "innodb_thread_concurrency";
set global innodb_thread_concurrency=16;
show variables like "innodb_thread_concurrency";
# Test for innodb_concurrency_tickets variable
show variables like "innodb_concurrency_tickets";
set global innodb_concurrency_tickets=1000;
show variables like "innodb_concurrency_tickets";
set global innodb_concurrency_tickets=0;
show variables like "innodb_concurrency_tickets";
set global innodb_concurrency_tickets=500;
show variables like "innodb_concurrency_tickets";
# Test for innodb_thread_sleep_delay variable
show variables like "innodb_thread_sleep_delay";
set global innodb_thread_sleep_delay=100000;
show variables like "innodb_thread_sleep_delay";
set global innodb_thread_sleep_delay=0;
show variables like "innodb_thread_sleep_delay";
set global innodb_thread_sleep_delay=10000;
show variables like "innodb_thread_sleep_delay";
# #
# Test varchar # Test varchar
# #
......
...@@ -98,6 +98,7 @@ static bool fixDepricated(InitConfigFileParser::Context & ctx, const char *); ...@@ -98,6 +98,7 @@ static bool fixDepricated(InitConfigFileParser::Context & ctx, const char *);
static bool saveInConfigValues(InitConfigFileParser::Context & ctx, const char *); static bool saveInConfigValues(InitConfigFileParser::Context & ctx, const char *);
static bool fixFileSystemPath(InitConfigFileParser::Context & ctx, const char * data); static bool fixFileSystemPath(InitConfigFileParser::Context & ctx, const char * data);
static bool fixBackupDataDir(InitConfigFileParser::Context & ctx, const char * data); static bool fixBackupDataDir(InitConfigFileParser::Context & ctx, const char * data);
static bool fixShmUniqueId(InitConfigFileParser::Context & ctx, const char * data);
const ConfigInfo::SectionRule const ConfigInfo::SectionRule
ConfigInfo::m_SectionRules[] = { ConfigInfo::m_SectionRules[] = {
...@@ -111,6 +112,8 @@ ConfigInfo::m_SectionRules[] = { ...@@ -111,6 +112,8 @@ ConfigInfo::m_SectionRules[] = {
{ "REP", transformNode, 0 }, { "REP", transformNode, 0 },
{ "EXTERNAL REP", transformExtNode, 0 }, { "EXTERNAL REP", transformExtNode, 0 },
{ MGM_TOKEN, fixShmUniqueId, 0 },
{ "TCP", checkConnectionSupport, 0 }, { "TCP", checkConnectionSupport, 0 },
{ "SHM", checkConnectionSupport, 0 }, { "SHM", checkConnectionSupport, 0 },
{ "SCI", checkConnectionSupport, 0 }, { "SCI", checkConnectionSupport, 0 },
...@@ -3155,19 +3158,39 @@ fixPortNumber(InitConfigFileParser::Context & ctx, const char * data){ ...@@ -3155,19 +3158,39 @@ fixPortNumber(InitConfigFileParser::Context & ctx, const char * data){
DBUG_RETURN(true); DBUG_RETURN(true);
} }
static bool
fixShmUniqueId(InitConfigFileParser::Context & ctx, const char * data)
{
DBUG_ENTER("fixShmUniqueId");
Uint32 nodes= 0;
ctx.m_userProperties.get(ctx.fname, &nodes);
if (nodes == 1) // first management server
{
Uint32 portno= atoi(NDB_PORT);
ctx.m_currentSection->get("PortNumber", &portno);
ctx.m_userProperties.put("ShmUniqueId", portno);
}
DBUG_RETURN(true);
}
static static
bool bool
fixShmKey(InitConfigFileParser::Context & ctx, const char *) fixShmKey(InitConfigFileParser::Context & ctx, const char *)
{ {
DBUG_ENTER("fixShmKey");
Uint32 id1= 0, id2= 0, key= 0; Uint32 id1= 0, id2= 0, key= 0;
require(ctx.m_currentSection->get("NodeId1", &id1)); require(ctx.m_currentSection->get("NodeId1", &id1));
require(ctx.m_currentSection->get("NodeId2", &id2)); require(ctx.m_currentSection->get("NodeId2", &id2));
if(ctx.m_currentSection->get("ShmKey", &key)) if(ctx.m_currentSection->get("ShmKey", &key))
return true; {
DBUG_RETURN(true);
}
key= (id1 > id2 ? id1 << 16 | id2 : id2 << 16 | id1); require(ctx.m_userProperties.get("ShmUniqueId", &key));
key= key << 16 | (id1 > id2 ? id1 << 8 | id2 : id2 << 8 | id1);
ctx.m_currentSection->put("ShmKey", key); ctx.m_currentSection->put("ShmKey", key);
return true; DBUG_PRINT("info",("Added ShmKey=0x%x", key));
DBUG_RETURN(true);
} }
/** /**
......
...@@ -1150,7 +1150,6 @@ innobase_init(void) ...@@ -1150,7 +1150,6 @@ innobase_init(void)
srv_n_file_io_threads = (ulint) innobase_file_io_threads; srv_n_file_io_threads = (ulint) innobase_file_io_threads;
srv_lock_wait_timeout = (ulint) innobase_lock_wait_timeout; srv_lock_wait_timeout = (ulint) innobase_lock_wait_timeout;
srv_thread_concurrency = (ulint) innobase_thread_concurrency;
srv_force_recovery = (ulint) innobase_force_recovery; srv_force_recovery = (ulint) innobase_force_recovery;
srv_fast_shutdown = (ibool) innobase_fast_shutdown; srv_fast_shutdown = (ibool) innobase_fast_shutdown;
......
...@@ -212,7 +212,11 @@ extern "C" { ...@@ -212,7 +212,11 @@ extern "C" {
extern ulong srv_max_buf_pool_modified_pct; extern ulong srv_max_buf_pool_modified_pct;
extern ulong srv_max_purge_lag; extern ulong srv_max_purge_lag;
extern ulong srv_auto_extend_increment; extern ulong srv_auto_extend_increment;
extern ulong srv_n_spin_wait_rounds;
extern ulong srv_n_free_tickets_to_enter;
extern ulong srv_thread_sleep_delay;
extern ulong srv_max_purge_lag; extern ulong srv_max_purge_lag;
extern ulong srv_thread_concurrency;
} }
extern TYPELIB innobase_lock_typelib; extern TYPELIB innobase_lock_typelib;
......
...@@ -4201,6 +4201,9 @@ enum options_mysqld ...@@ -4201,6 +4201,9 @@ enum options_mysqld
OPT_INNODB_TABLE_LOCKS, OPT_INNODB_TABLE_LOCKS,
OPT_INNODB_OPEN_FILES, OPT_INNODB_OPEN_FILES,
OPT_INNODB_AUTOEXTEND_INCREMENT, OPT_INNODB_AUTOEXTEND_INCREMENT,
OPT_INNODB_SYNC_SPIN_LOOPS,
OPT_INNODB_CONCURRENCY_TICKETS,
OPT_INNODB_THREAD_SLEEP_DELAY,
OPT_BDB_CACHE_SIZE, OPT_BDB_CACHE_SIZE,
OPT_BDB_LOG_BUFFER_SIZE, OPT_BDB_LOG_BUFFER_SIZE,
OPT_BDB_MAX_LOCK, OPT_BDB_MAX_LOCK,
...@@ -5046,6 +5049,17 @@ log and this option does nothing anymore.", ...@@ -5046,6 +5049,17 @@ log and this option does nothing anymore.",
"How many files at the maximum InnoDB keeps open at the same time.", "How many files at the maximum InnoDB keeps open at the same time.",
(gptr*) &innobase_open_files, (gptr*) &innobase_open_files, 0, (gptr*) &innobase_open_files, (gptr*) &innobase_open_files, 0,
GET_LONG, REQUIRED_ARG, 300L, 10L, ~0L, 0, 1L, 0}, GET_LONG, REQUIRED_ARG, 300L, 10L, ~0L, 0, 1L, 0},
{"innodb_sync_spin_loops", OPT_INNODB_SYNC_SPIN_LOOPS,
"Count of spin-loop rounds in InnoDB mutexes",
(gptr*) &srv_n_spin_wait_rounds,
(gptr*) &srv_n_spin_wait_rounds,
0, GET_LONG, REQUIRED_ARG, 20L, 0L, ~0L, 0, 1L, 0},
{"innodb_concurrency_tickets", OPT_INNODB_CONCURRENCY_TICKETS,
"Number of times a thread is allowed to enter InnoDB within the same \
SQL query after it has once got the ticket",
(gptr*) &srv_n_free_tickets_to_enter,
(gptr*) &srv_n_free_tickets_to_enter,
0, GET_LONG, REQUIRED_ARG, 500L, 1L, ~0L, 0, 1L, 0},
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
/* /*
Disabled for the 4.1.3 release. Disabling just this paragraph of code is Disabled for the 4.1.3 release. Disabling just this paragraph of code is
...@@ -5068,8 +5082,14 @@ log and this option does nothing anymore.", ...@@ -5068,8 +5082,14 @@ log and this option does nothing anymore.",
#endif #endif
{"innodb_thread_concurrency", OPT_INNODB_THREAD_CONCURRENCY, {"innodb_thread_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
"Helps in performance tuning in heavily concurrent environments.", "Helps in performance tuning in heavily concurrent environments.",
(gptr*) &innobase_thread_concurrency, (gptr*) &innobase_thread_concurrency, (gptr*) &srv_thread_concurrency, (gptr*) &srv_thread_concurrency,
0, GET_LONG, REQUIRED_ARG, 8, 1, 1000, 0, 1, 0}, 0, GET_LONG, REQUIRED_ARG, 8, 1, 1000, 0, 1, 0},
{"innodb_thread_sleep_delay", OPT_INNODB_THREAD_SLEEP_DELAY,
"Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0"
" disable a sleep",
(gptr*) &srv_thread_sleep_delay,
(gptr*) &srv_thread_sleep_delay,
0, GET_LONG, REQUIRED_ARG, 10000L, 0L, ~0L, 0, 1L, 0},
#endif /* HAVE_INNOBASE_DB */ #endif /* HAVE_INNOBASE_DB */
{"interactive_timeout", OPT_INTERACTIVE_TIMEOUT, {"interactive_timeout", OPT_INTERACTIVE_TIMEOUT,
"The number of seconds the server waits for activity on an interactive connection before closing it.", "The number of seconds the server waits for activity on an interactive connection before closing it.",
......
...@@ -378,6 +378,14 @@ sys_var_thd_bool sys_innodb_table_locks("innodb_table_locks", ...@@ -378,6 +378,14 @@ sys_var_thd_bool sys_innodb_table_locks("innodb_table_locks",
&SV::innodb_table_locks); &SV::innodb_table_locks);
sys_var_long_ptr sys_innodb_autoextend_increment("innodb_autoextend_increment", sys_var_long_ptr sys_innodb_autoextend_increment("innodb_autoextend_increment",
&srv_auto_extend_increment); &srv_auto_extend_increment);
sys_var_long_ptr sys_innodb_sync_spin_loops("innodb_sync_spin_loops",
&srv_n_spin_wait_rounds);
sys_var_long_ptr sys_innodb_concurrency_tickets("innodb_concurrency_tickets",
&srv_n_free_tickets_to_enter);
sys_var_long_ptr sys_innodb_thread_sleep_delay("innodb_thread_sleep_delay",
&srv_thread_sleep_delay);
sys_var_long_ptr sys_innodb_thread_concurrency("innodb_thread_concurrency",
&srv_thread_concurrency);
#endif #endif
#ifdef HAVE_NDBCLUSTER_DB #ifdef HAVE_NDBCLUSTER_DB
...@@ -651,6 +659,10 @@ sys_var *sys_variables[]= ...@@ -651,6 +659,10 @@ sys_var *sys_variables[]=
&sys_innodb_table_locks, &sys_innodb_table_locks,
&sys_innodb_max_purge_lag, &sys_innodb_max_purge_lag,
&sys_innodb_autoextend_increment, &sys_innodb_autoextend_increment,
&sys_innodb_sync_spin_loops,
&sys_innodb_concurrency_tickets,
&sys_innodb_thread_sleep_delay,
&sys_innodb_thread_concurrency,
#endif #endif
#ifdef HAVE_NDBCLUSTER_DB #ifdef HAVE_NDBCLUSTER_DB
&sys_ndb_autoincrement_prefetch_sz, &sys_ndb_autoincrement_prefetch_sz,
...@@ -742,6 +754,7 @@ struct show_var_st init_vars[]= { ...@@ -742,6 +754,7 @@ struct show_var_st init_vars[]= {
{"innodb_data_home_dir", (char*) &innobase_data_home_dir, SHOW_CHAR_PTR}, {"innodb_data_home_dir", (char*) &innobase_data_home_dir, SHOW_CHAR_PTR},
{"innodb_doublewrite", (char*) &innobase_use_doublewrite, SHOW_MY_BOOL}, {"innodb_doublewrite", (char*) &innobase_use_doublewrite, SHOW_MY_BOOL},
{"innodb_checksums", (char*) &innobase_use_checksums, SHOW_MY_BOOL}, {"innodb_checksums", (char*) &innobase_use_checksums, SHOW_MY_BOOL},
{sys_innodb_concurrency_tickets.name, (char*) &sys_innodb_concurrency_tickets, SHOW_SYS},
{"innodb_fast_shutdown", (char*) &innobase_fast_shutdown, SHOW_MY_BOOL}, {"innodb_fast_shutdown", (char*) &innobase_fast_shutdown, SHOW_MY_BOOL},
{"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG }, {"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
{"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL}, {"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
...@@ -760,8 +773,10 @@ struct show_var_st init_vars[]= { ...@@ -760,8 +773,10 @@ struct show_var_st init_vars[]= {
{sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS}, {sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS},
{"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG}, {"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
{"innodb_open_files", (char*) &innobase_open_files, SHOW_LONG }, {"innodb_open_files", (char*) &innobase_open_files, SHOW_LONG },
{sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS},
{sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS},
{sys_innodb_sync_spin_loops.name, (char*) &sys_innodb_sync_spin_loops, SHOW_SYS},
{sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS}, {sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
{"innodb_thread_concurrency", (char*) &innobase_thread_concurrency, SHOW_LONG },
#endif #endif
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS}, {sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS}, {sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
......
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